将表达式传递给R中的自定义函数

时间:2016-09-08 03:36:50

标签: r

我需要在自定义函数中使用<field id="105">xxxxxxxxxx 000000000</field>(细节并不重要,但它涉及随机数生成。

我们假设我正在使用:replicate

我知道我可以使用rnorm(2)

重复10次

现在,我希望能够在函数中使用replicate(10, rnorm(2)),因为我需要对输出进行后处理,并且我还希望能够更改复制的表达式,所以我尝试了一些东西像这样:

replicate

但是当我运行该功能时,我会重复10次完全相同的数字:

fn <- function(expression) replicate(10, expression)

我知道fn(rnorm(2)) 正在获得fn的结果,这就是重复这些数字的原因所以我需要告诉rnorm(2)不要评估fn }。我一直在深入研究这个问题,似乎我需要在expression内使用substitute,但我无法使其发挥作用。

1 个答案:

答案 0 :(得分:4)

如果您只是想通过思考表达式,可以使用...之类的

fn <- function(...) replicate(10, ...)

这不允许您与该特定参数进行交互,并且它假定您要传递所有参数。

您可以捕获表达式并将其与

一起传递
fn <- function(a) do.call("replicate", list(10, substitute(a)))

也是。您需要使用do.call将未评估的表达式传递给`replicate。