2012-06-16 15 views
16

これはかなり悪いです。リスト名を省略することはできますか?私は前にそれに気付かなかったし、私は一日のように完全に釘付けになった。誰かがここで何が起こっているのか、なぜそれがひどいことよりも役立つのか説明できますか?そしてなぜそれは一番下のものと矛盾しているのですか?そして私はそれをオフにすることができますか?リスト名は省略できますか?どうして?

項目の正確な一致がある場合、それを使用する:

リストの要素名(及び関数パラメータ名)について
> wtf <- list(whatisthe=1, pointofthis=2) 
> wtf$whatisthe 
[1] 1 
> wtf$what 
[1] 1 

> wtf <- list(whatisthe=1, whatisthepointofthis=2) 
> wtf$whatisthepointofthis 
[1] 2 
> wtf$whatisthep 
[1] 2 
> wtf$whatisthe 
[1] 1 
> wtf$what 
NULL 
+5

それは矛盾しないのです。一意の一致がある場合に限り、名前の先頭部分文字列が解決されます。 –

+1

+1なぜこのように*なぜ* $ $が実装されているか考えてください。 –

+0

これはベル研究所のSの最初の日に戻ります。それは悪いことですが、私はまだ入力を保存するためにそれを使用します。また、 'predict(m、type =" resp ")'や 'cor(x、y、use =" pair ")'のような関数の引数でも機能します。 –

答えて

16

私は$オペレータによる部分一致は、あなたがその振る舞いが気に入らない場合は前のタブ補完が

を実装していた背中の日に、あなたが使用できるインタラクティブな使用のために素敵な(R)機能であったことを疑います代わりに"[["演算子。 部分一致の動作を制御するための引数exact=があり、デフォルトはTRUEです。

wtf[["whatisthep"]]     # Only returns exact matches 
# NULL 

wtf[["whatisthep", exact=FALSE]] # Returns partial matches without warning 
# [1] 2 

wtf[["whatisthep", exact=NA]]  # Returns partial matches & warns that it did 
# [1] 2 
# Warning message: 
# In wtf[["whatisthep", exact = NA]] : 
# partial match of 'whatisthep' to 'whatisthepointofthis' 

は(これは"[["は、一般的にRプログラミングで$に好まれている理由の一つです。もうこのX <- "whatisthe"; wtf[[X]]ではなく、このX <- "whatisthe"; wtf$Xを行う能力である。)

+0

よかった、ありがとう。私はオートコンプリートが役に立つと思われていると確信していますが、ちょっと不快な感じです。私はただそれが再び噛むのを待っているだけです。 – enfascination

+0

@ user1073999 - 私は同意します。私は、初期の設計決定がRのプリンシパルの悲惨さのいくつかを見てきたように感じているが、今どこで覚えていないのだろうか。他の誰かがそれを見たなら、私は興味があるだろう。 –

+2

さらに、私は、タブ付きオートコンプリートが実装される前に、インタラクティブな使用に役立つはずであることがわかりました。 –

2

は、Rは、以下のアルゴリズムを適用します。完全一致がない場合は、部分一致を探します。部分一致が1つだけある場合は、それを使用します。そうでなければ何も使用しないでください。

+0

私は完全なアルゴリズムも位置マッチングを使用すると思います。 – Andrie

+0

あなたは精緻化できますか? (a = 1、a = 2) '' aのエラー(a = 1、a = 2) = 2):仮引数 "aa"が複数の実際の引数と一致する場合 ' –

+0

引数に名前を付ける必要がないことがわかります。この場合、Rは位置一致を使用します。引数の名前と名前のない場合を混在させることができるので、完全な答えは私の意見でこれを述べるべきです。したがって、あなたの例では 'a(1、ab = 2)'は 'a(ab = 2、1)'と同様に動作します。 – Andrie

関連する問題