r - 如何延迟 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()
声明中。
解决方案
您还可以使用substitute
and实现此目的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的非标准评估