使用函数内的$索引数据框?

sfu*_*fuj 0 indexing r function

许多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')
Run Code Online (Sandbox Code Playgroud)

我注意到在R语言定义中它说:

使用$的表单适用于列表和pairlists等递归对象.它只允许文字>字符串或符号作为索引.也就是说,索引是不可计算的:对于需要评估表达式以查找索引的情况,请使用x [[expr]].当$应用于>非递归对象时,结果总是为NULL:从R 2.6.0开始,这是一个错误.

myFunc2上面是一个例子,其中$没有提供文字字符串吗?

^ Zuur 2009'R'的初学者指南61页

^ Spector 2008'数据操作与R'p 26,64,69

小智 5

您也可以使用[[而不是$

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
Run Code Online (Sandbox Code Playgroud)