【发布时间】:2015-02-17 10:45:59
【问题描述】:
我想在另一个函数中使用subset,但要传递来自顶级函数的非标准评估参数。以下是非工作代码,但概述了这个想法:
foo_1 <- function(x, mysubset)
{
# some deparse, substitute etc. magic here ??
subset(x, subset)
}
foo_1(ansombe, x1 > 5)
我希望得到与subset(ansombe, x1 > 5) 相同的结果。另外,当参数传递到更深层次时,我希望同样的工作,即
foo_2 <- function(x, mysubset)
{
# some deparse, substitute etc. magic here ??
foo_1(x, mysubset)
}
foo_2(ansombe, x1 > 5)
这里我也想要和上面一样的结果。
到目前为止我已经尝试过什么
我尝试了substitute-deparse、eval-parse 组合,比如
foo_1 <- function(x, mysubset)
{
tx <- deparse(substitute(mysubset))
subset(x, eval(parse(text=tx)))
}
foo_1(anscombe, x1 >5)
这很好,但我现在如何继续foo_2?
另外,我记得 Thomas Lumley 的格言:
如果答案是 parse(),你通常应该重新考虑这个问题。 -- Thomas Lumley(R-help,2005 年 2 月)
所以,我想知道是否有比eval-parse 组合更好的方法。?
有什么想法吗?
PS。这个问题类似但不包括更深的嵌套:Pass subset argument through a function to subset
PPS:也许应用plyr 中的. 函数很有成效,但我不知道如何......
【问题讨论】:
-
当一个简单的
foo[foo[,1]<5,]或类似的结构可以使用时,我不太喜欢使用subset。如果您可以发布一些小的、可重复的示例数据,我们可以展示一个简单的方法来做到这一点。编辑:就像 BrodieG 所做的 :-)