【问题标题】:How can I pass column names in an R function?如何在 R 函数中传递列名?
【发布时间】:2017-01-18 00:43:45
【问题描述】:

我想在函数内创建一个数据框,它是数据框 d 中的列选择

QPP<-function(dat,xvar,yvar){
  varx <<- dat[,c(xvar)]
  vary <<- dat[,c(yvar)]
  a <- cbind(varx,vary) 
  a <- as.data.frame(a)
  #Perform some operations
}

QPP(dat=d,xvar = area,yvar = f.ecdf)

但我收到一条错误消息:

eval(expr, envir, enclos) 中的错误:缺少参数,没有默认值

  1. 我该如何解决这个问题?
  2. 或者,我可以一步选择列名,而不是先选择然后绑定它吗?我不确定如何传递列名。

    dput(droplevels(head(d,10)))
    structure(list(area = c(96.8656, 96.8656, 562.0274, 117.5855, 
    117.5855, 117.5855, 117.5855, 117.5855, 117.5855, 117.5855), 
    tp = c(1.5, 1, 0.5, 4.5, 6, 8.25, 4.25, 5.75, 10.75, 20.25
    ), f.ecdf = c(0.887918176006819, 0.812380140634988, 0.760387811634349, 
    0.0372895802258683, 0.00809716599190283, 0.0310036224163648, 
    0.300660558278287, 0.441721713189857, 0.152354570637119, 
    0.386852759428937)), .Names = c("area", "tp", "f.ecdf"), row.names = c(NA, 
    -10L), class = c("data.table", 
    "data.frame"))
    

【问题讨论】:

  • 试试QPP(dat=d,xvar = "area",yvar = "f.ecdf")
  • 我试过了。我没有得到一个带有数字的数据框,而是一个带有名称区域和 f.ecdf 的数据框。我必须先附加数据集吗?
  • 你为什么不直接做dat[,c("area","f.ecdf")]?为什么需要这个功能?
  • 在函数末尾添加return(a)或将a &lt;- as.data.frame(a)改为as.data.frame(a)
  • @aichao 我需要对该数据框进行操作。请参阅编辑。

标签: r


【解决方案1】:

您的功能非常好。您传递参数的方式存在问题。您应该将字符串作为变量名传递。

试试这个QPP(dat=d,xvar = "area" ,yvar = "f.ecdf")

现在,这是因为如果您注意到 df[,c("col_name")] 参数“col_name”是字符串

关于你的问题 2:这就是你如何在不使用 cbind 的情况下一步完成的方法

QPP<-function(dat,xvar,yvar)
{
colnames<- c(xvar, yvar)
new_df <<- dat[, c(colnames)]
}

QPP(dat=d,xvar = "area" ,yvar = "f.ecdf")

【讨论】:

  • 我尝试过传递字符串。我得到这个。我也提到了 cmets 中的问题。不确定是什么问题... new_df [1] "area" "f.ecdf"
  • 好的,我开始了一个新的 R 会话,它现在可以工作了。谢谢。不知道为什么它以前不起作用....
  • 好吧,这就是我发现的。我正在使用 fread 导入我的数据集 d,它给了我一个数据表。一旦我把它变成了一个数据框,这个问题就会消失。
猜你喜欢
  • 2023-03-28
  • 2015-09-26
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多