R:如何将变量传递到函数中以子集data.frame

R:如何将变量传递到函数中以子集data.frame,r,R,我得到一个错误: 变量(x)中的错误:“x”为空 此外:警告信息: 1:In is.na(x):is.na()应用于“NULL”类型的非-(列表或向量) 2:平均值。默认值(x):参数不是数字或逻辑参数:返回NA 我认为这是因为dat$x始终为空,因为data.frame中没有名为x的列。我认为我没有将变量名传递给函数dat$x总是将dat中名为x的列作为子集,而不是我传入的列名(即权重)。因此,我的问题是,如何才能传入我想要的列名,以便该函数运行?正如注释中提到的@agstudy和@docen

我得到一个错误:

变量(x)中的错误:“x”为空 此外:警告信息: 1:In is.na(x):is.na()应用于“NULL”类型的非-(列表或向量) 2:平均值。默认值(x):参数不是数字或逻辑参数:返回NA


我认为这是因为
dat$x
始终为空,因为data.frame中没有名为
x
的列。我认为我没有将变量名传递给函数
dat$x
总是将
dat
中名为
x
的列作为子集,而不是我传入的列名(即权重)。因此,我的问题是,如何才能传入我想要的列名,以便该函数运行?

正如注释中提到的@agstudy和@docendodiscimus,在函数中传递列名时,最好使用
[
[[/code>而不是
$

 dat = data.frame(height = c(20, 20, 40, 50, 60, 10), weight = c(100, 200, 300, 200, 140, 240),
             age = c(19, 20, 20, 19, 10, 11))
 f = function(x){
   subset.19 = dat$x[dat$age == 20]
   subset.20 = dat$x[dat$age == 19]
   t.test(subset.19, subset.20)  
 }
 f("weight")

f要点是在变量中传递列名时必须使用
[
而不是
$
。您可以通过键入
帮助(“[”
)来了解这一点。
 f <- function(x){
     subset.19 = dat[,x][dat$age == 20]
     subset.20 = dat[,x][dat$age == 19]
   t.test(subset.19, subset.20)  
 }
f("weight")