22

$リストの場合、基本演算子とを使用してインデックスを作成するときに部分一致が行われることを知ってい[[ます。例えば:

ll <- list(yy=1)
ll$y
[1] 1

しかし、私はまだRの初心者であり、これは私にとっては新しいことであり、関数の引数の部分的な一致です。

h <- function(xx=2)xx
h(x=2)
[1] 2

これがどのように機能するかを理解したいと思います。その背後にあるメカニズムは何ですか?これには副作用がありますか?xx引数が与えられたかどうかを誰かがどのようにテストできるかを理解したいですか?

アンドリーのコメントの後に編集:

内部的には、Rはpmatchアルゴリズムを使用して引数を照合します。ここでは、これがどのように機能するかの例を示します。

 pmatch("me",   c("mean", "median", "mode")) # error multiple partial matches
[1] NA
> pmatch("mo",   c("mean", "median", "mode")) # mo match mode match here
[1] 3

しかし、なぜRにはそのような機能があるのでしょうか。partial uniqueマッチングの背後にある基本的な考え方は何ですか?

4

1 に答える 1

22

長い引数名を入力する手間を省くために、部分一致が存在します。それによる危険は、関数が後で部分一致と競合する追加の引数を取得する可能性があることです。これは、インタラクティブな使用にのみ適していることを意味します。たとえば、パッケージに入れて長時間使用するコードを作成する場合は、常に完全な引数名を作成する必要があります。もう1つの問題は、引数名を省略して、コードを読みにくくすることができることです。

2つの一般的な良い使用法は次のとおりです。

  1. len(または)関数 length.outの代わりに。seqseq.int

  2. all関数の代わりall.namesls

比較:

seq.int(0, 1, len = 11) 
seq.int(0, 1, length.out = 11)

ls(all = TRUE)
ls(all.names = TRUE)

どちらの場合も、コードは短縮された引数名でほぼ同じように読みやすく、関数は古くて安定しているため、名前が競合する別の引数が追加される可能性はほとんどありません。

入力を節約するためのより良い解決策は、省略名を使用するのではなく、変数名と引数名のオートコンプリートを使用することです。R GUIとRStudioはTABキーを使用してこれをサポートし、ArchitectはCTRL+を使用してこれをサポートしSpaceます。

于 2013-01-04T10:23:26.540 に答える