许多 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 初学者指南”第 61 页
^ Spector 2008“使用 R 进行数据操作”第 26、64、69 页
您还可以使用 [[ 代替 $
myFunc2 <- function(x, y){
+ z <- x[[y]]
+ return(z)
+ }
> myFunc2(BOD, 'demand')
[1] 8.3 10.3 19.0 16.0 15.6 19.8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)