我的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:要在函数中创建的列的已编辑名称
答案 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()
是一个非常糟糕的主意,因为它将取代基本函数。