我正在尝试在R中构建一个子集函数,它将接受数据框架和列名称,并使用概述here的lazyeval方法解决问题。这是我的代码:
iris_fun <- function(df, selection_var, selection_input){
temp <- subset(df, ~.data[[.env$selection_var]] == .env$selection_input)
return(temp)
}
当我尝试用以下方式调用时:
iris_fun(iris, "Species", "setosa")
我收到错误消息:
subset.data.frame(df,〜。data [[。env $ selection_var]] == selection_input)出错: '子集'必须是逻辑
建议表示赞赏!
答案 0 :(得分:0)
R subset
函数不是为编程而设计的。这将完成您的要求,没有非标准的评估错误:
iris_fun <- function(df, selection_var, selection_input){
df[ df[[selection_var]] == selection_input , ]}
(不幸的是,关于“lazyeval”的文章似乎与包v 0.1.10不一致。没有f_eval
或f_interp
,所以你不能定义(懒惰):子集-function。需要devel-version。)