R:如何将变量传递给函数以对data.frame进行子集化

时间:2014-12-27 09:43:50

标签: r

 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")

我收到错误:

var(x)中的错误:'x'为NULL 另外:警告信息: 1:在is.na(x)中:is.na()应用于'NULL'类型的非(列表或向量) 2:在mean.default(x)中:参数不是数字或逻辑:返回NA

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

1 个答案:

答案 0 :(得分:2)

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

 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")