许多 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]]。当 $ 应用于 >non-recursive 对象时,结果通常为 NULL:从 R 2.6.0 开始,这是一个错误。
上面的 myFunc2 是否是未提供 $ 文字字符串的示例?
^ Zuur 2009 年“R 初学者指南”第 61 页
^ Spector 2008 '使用 R 进行数据操作' p 26, 64, 69