【问题标题】:Passing a column as a function argument [duplicate]将列作为函数参数传递[重复]
【发布时间】:2019-07-23 01:10:15
【问题描述】:

我的 df 看起来像这样:

library(data.table)
df <- data.table(id = c(1,1,1,2,2), 
             starts = c(0,0,6,0,9), 
             ends = c(0,6,10,9,20))

我想创建一个函数来创建一个数据表,其中包含一个包含平均值的新列:

mean <- function(df, col_name){
library(data.table)

a <- data.table(

mean_df = df[col_name != 0, mean(col_name)]

)
return(a)
}

然后当我运行函数时

mean(df, "starts")

这给了我错误:

 Error in data.table(mean = df[col_name != 0, mean(col_name)]) : 
    argument "col_name" is missing, with no default 

我不确定我做错了什么 - 我尝试使用 get() 和替换() 来传递列名,但我不确定我是否正确。

感谢任何帮助!

EDIT1:要在函数中创建的列的编辑名称

【问题讨论】:

  • 您正在用一个名为 mean 的新函数覆盖 mean 函数,然后尝试在函数中调用原始 mean 函数...最好不要创建与基本 R 东西同名的函数
  • 也许是meanfun &lt;- function(df, col_name){ df[abs(get(col_name)) &gt; 0, mean(get(col_name))] } meanfun(df, "starts")

标签: r function data.table


【解决方案1】:

我认为像这样使用get() 是相当标准的:

my_mean <- function(data, col_name) {
  data[get(col_name) != 0, mean(get(col_name))]
} 

my_mean(data = df, col_name = "starts")
[1] 7.5

顺便说一句。 将新函数命名为 mean() 是一个非常糟糕的主意,因为它将替换基本函数。

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 2011-04-07
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2018-08-30
    相关资源
    最近更新 更多