将列作为函数参数传递

时间:2019-03-01 02:41:25

标签: r function data.table

我的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:要在函数中创建的列的已编辑名称

1 个答案:

答案 0 :(得分: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()是一个非常糟糕的主意,因为它将取代基本函数。