【问题标题】:R: how to pass a variable into a function to subset data.frameR:如何将变量传递给函数以子集data.frame
【发布时间】:2015-02-24 07:03:00
【问题描述】:
 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 子集,而不是我传入的列名(即重量)。所以我的问题是如何传递我想要的列名以便这个函数运行?

【问题讨论】:

  • 重点是在变量中传递列名时必须使用[ 而不是$。您可以通过输入 help("[") 来阅读相关信息。

标签: r


【解决方案1】:

正如cmets中提到的@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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2011-02-26
    • 2013-10-08
    相关资源
    最近更新 更多