R中的Lazyeval - 如何构建子集函数?

时间:2016-03-04 19:36:34

标签: r lazy-evaluation

我正在尝试在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)出错:   '子集'必须是逻辑

建议表示赞赏!

1 个答案:

答案 0 :(得分:0)

R subset函数不是为编程而设计的。这将完成您的要求,没有非标准的评估错误:

iris_fun <- function(df, selection_var, selection_input){
                     df[ df[[selection_var]] == selection_input , ]}

(不幸的是,关于“lazyeval”的文章似乎与包v 0.1.10不一致。没有f_evalf_interp,所以你不能定义(懒惰):子集-function。需要devel-version。)