2016-03-04 63 views
2

我正在尝试在R中构建一个子集函数,它将接受数据框以及列名,并使用概述here的lazyeval方法解决问题。这里是我的代码:R中的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,〜。数据[[。env $ selection_var]] == selection_input): '子集'必须为逻辑

A dvice赞赏!

+0

你的问题没有任何意义。你想做什么,真的吗? –

+0

@HongOoi,我正在尝试构建一个函数,该函数将根据给定条件(实际上来自另一个数据框)对数据框进行子集合。现在,我试图让第一部分工作 - 基于变量和值的子集,这些变量和值将作为函数的输入(以及数据框)。 –

+1

在那个例子中,hadley重新定义了'subset',因此它不再是'base :: subset' – rawr

回答

0

R subset功能不是为编程设计的。这会对你有没有一个非标准的eval困惑的问:

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

(不幸的是在“lazyeval”这篇文章似乎没有要与套餐五0.1.10一致有没有f_evalf_interp,所以你不能定义(懒惰):子集函数,需要开发版本。)