多くの R 教科書では、$ を使用して data.frames^ から変数 (列) を取得することを推奨しています。ただし、これは関数内では機能しないことがわかりました。その理由はわかりません。
data(BOD)
print(BOD)
# These work.
BOD$'demand'
BOD[ ,'demand']
# This works.
myFunc1 <- function(x, y){
z <- x[ , y]
return(z)
}
out <- myFunc(BOD, 'demand')
# This doesn't work.
myFunc2 <- function(x, y){
z <- x$y
return(z)
}
out <- myFunc2(BOD, 'demand')
R言語の定義では、次のように書かれていることに気付きました:
$ を使用した形式は、リストやペアリストなどの再帰オブジェクトに適用されます。インデックスとして文字列リテラルまたは記号のみを許可します。つまり、インデックスは計算可能ではありません。インデックスを見つけるために式を評価する必要がある場合は、x[[expr]] を使用します。$ が非再帰オブジェクトに適用されると、結果は常に NULL でした: R 2.6.0 以降、これはエラーです。
上記の myFunc2 は、$ がリテラル文字列として提供されていない例ですか?
^ Zuur 2009年「R初心者向けガイド」p61
^ スペクター 2008年「Rによるデータ操作」p 26, 64, 69