2009-08-23 3 views
22

私に怠け者と呼ばれるが、私はいつもpaste("a","b",sep='')のようなものを入力するのは嫌いだ。Rの文字を "+"操作しないのはなぜですか?

私は知っている "(t)彼はRです。 (library(fortunes);(fortune(109))。だから、私の追随する質問は:簡単にこの動作を変更することは可能ですか?

+0

文字に「+」を定義する方法が問題です。あなたはsep = ""が望ましいでしょうが、他のものはデフォルトのsep = ""を好むかもしれません。そして、両方の要素の一方が文字でない場合(数値、論理)はどうでしょうか?どのように '+'を定義する必要がありますか? – Thierry

+0

"+"はバイナリ演算子なので、 'sep'引数は関係ありません。選択肢がありますが(「文字」+数値など)、文字を連結することを許可するだけで、私は(そしてほとんどの人が)疑いがあります。これは、例えばPythonの機能です。以下のMartinとのディスカッションは本当に面白いです。 –

答えて

23

:どのように手のこの小さなスライ程度、ということバーリング

。パーサではありません。 一つ "+" - help( "+")のヘルプメソッドは "算術演算子"になります。 これらは一般的であり、それらのためのメソッドを書くことができます...もちろん多くのパッケージライター例えば、私たちは 'Matrix'パッケージで行います。また、 "Rmpfr"パッケージに対しても行います。 しかし、Dirkは現在のところ、Rの中では で "+ .character"のメソッドを定義するだけではそれを行うことはできません。

約3年前、私はR-devel(R開発のRメーリングリスト)を開始しました。これらのトピックに興味があれば非常にお勧めです.GManeでアクセスしたくない場合は、 r-devel archived msg

特に、ジョン・チェンバース(「SとRの父」)は、「+」という操作を使用することにかなり反対しているという興味深い議論になっています。我々は(Rコア)がアイデアを採用/サポートすべきではないという見解を支持し、であり、可換性は であり、r-devel archived msg2である(別のRコアメンバーによる)。もし人々が**本当に*それを望むなら、彼らは %+%を定義することができます。

+1

私は、Hadleyが彼のggplot2パッケージでいくつかの方法を書いたことに気付きました。プロットに複数のレイヤーを追加するために使用されます。 – Thierry

+0

Martin、詳細な修正をありがとう。 –

+1

あなたがそこで始めた素晴らしいスレッド、ありがとう! "+"を連結(例えばチェンバーズ)と考えることが自然であると信じていない人と、他の言語で常時それを見て、それに慣れている人との間には、葛藤があるようです。ディスカッションは単にそこで停止しましたか? –

6

sprintfを使用していますか?一度のために、あなたはかなり右じゃない:ディルク@

'%+%' <- paste 

'and' %+% 'now' %+% 'for'%+% 'something' %+% 'completely' %+% 'different'  
# [1] "and now for something completely different" 
+1

sprintfはデフォルトの場合(書式設定なし)は便利ではありませんが、もっと頻繁に使用してください。 "%+%"を使用していただきありがとうございますが、これは実際には主な質問には答えません。 –

+2

答えはありません。パーサの動作の仕方により+演算子をオーバーライドすることはできません。 sep = ""の通常のpaste()よりも簡単に入力できるショートカット関数p < - function(...)paste(...、sep = "")を定義することを除いて、Steveの提案が最善の策です。 " –

+1

さて、私たちは最終的に幸運(109)への反例を見つけました。より正確には、答えは "自分の気になるパーサーを書く"です。 –

関連する問題