2013-07-01 41 views
1

我想写一个不同的对象类的子集方法,我希望用户能够执行相同的方式,他们使用subset.data.frame功能。我读过几篇相关文章,如thisthis,但我不认为他们是这里的解决方案。我相信我使用的是错误的环境,但我对环境的了解不够充分,还有substitute函数来弄清楚为什么这段代码的前半部分工作正常,但后半部分没有。任何人都可以解释我下面做错了什么,然后如何使lsubset功能,可能需要gear == 4作为其第二个参数?对不起,如果我的搜索错过了类似的问题..谢谢!如何通过一个函数来传递子集函数来评估R

# create a list of mtcars data frames 
mtlist <- list(mtcars , mtcars , mtcars) 
# subset them all - this works 
lapply(mtlist , subset , gear == 4) 


# create a function that simply replicates the task above 
lsubset <- 
    function(x , sset){ 
     lapply(x , subset , sset) 
    } 

# this does not work for some reason 
lsubset(mtlist , gear == 4) 
+1

我看看[这里](http://stackoverflow.com/questions/9860090/in-r-why-is-better-than -subset)问题线程和[this one](http://stackoverflow.com/questions/12850141/programming-safe-version-of-subset-to-evaluate-its-condition-while-called-from/12850252#12850252 )。通常说,编程使用'subset'是一个坏主意,我想你会发现为什么! – Justin

回答

5

什么:

lsubset <- 
    function(x , ...){ 
     lapply(x , subset , ...) 
    } 

lsubset(mtlist , gear == 4) 
+0

对我的抵抗,以结束我的回答与“这是一个R的工作” –

+0

这是天才的冲动的荣誉。谢谢。也是:赞扬你。 –

+0

这里的诀窍是'gear == 4'被传递给'subset'未被评估,是吗? –