如何延迟 R 中函数参数的求值?

Dav*_*ane 5 r rlang

我想延迟 R 中函数参数的求值。示例:

my_func <- function(FUN){print(FUN); print(FUN)}
my_func(runif(1))
#> [1] 0.2833882
#> [1] 0.2833882
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2019-07-21 创建

这正如记录的那样工作,因为runif(1)只评估一次,其结果打印两次。

相反,我不想runif(1)在每个 print() 语句中对其进行求值。这将生成两个不同的随机数。

换句话说,我不希望 FUN “解决”——如果这个词正确的话——runif(1)直到我们进入一个print()声明。

Ron*_*hah 2

这是与match.call和的一个技巧eval

my_func <- function(FUN){
  print(eval(match.call()[[2]])) 
  print(eval(match.call()[[2]]))
}

my_func(runif(1))

#[1] 0.7439711
#[1] 0.5011816

my_func(runif(1))
#[1] 0.7864152
#[1] 0.730453
Run Code Online (Sandbox Code Playgroud)