【发布时间】:2013-07-16 18:00:38
【问题描述】:
许多 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 页
【问题讨论】:
-
你在函数内部做的事情在函数外部也不起作用:
y = 'demand'; z = BOD$y -
fortune(312)在这里再次相关:“这里的问题是 $ 符号是一个神奇的快捷方式,如果使用不正确,就像任何其他魔法一样,可能会产生相当于把自己变成蟾蜍的程序化效果"