首页 > 解决方案 > 如何延迟 R 中函数参数的评估?

问题描述

我想延迟 R 中函数参数的评估。示例:

my_func <- function(FUN){print(FUN); print(FUN)}
my_func(runif(1))
#> [1] 0.2833882
#> [1] 0.2833882

reprex 包(v0.2.1)于 2019 年 7 月 21 日创建

这按记录工作,因为runif(1)只评估一次并且其结果打印两次。

相反,我不想runif(1)在每个 print() 语句中被评估。这将生成两个不同的随机数。

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

标签: rrlang

解决方案


您还可以使用substituteand实现此目的eval

my_func <- function(FUN) {
  print(eval(substitute(FUN)))
  print(eval(substitute(FUN)))
}

my_func(runif(1))
#> [1] 0.09973534
#> [1] 0.8096205

my_func(runif(1))
#> [1] 0.2231202
#> [1] 0.5386637

注意:有关更多详细信息,请查看本章Advanced R的非标准评估


推荐阅读