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

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

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

这如文档所示,因为 runif(1) 只计算一次,其结果打印两次。

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

换句话说,在我们进入 runif(1) 语句之前,我不希望 FUN “解析”--- 如果这是正确的词 --- print()

最佳答案

这是 match.calleval 的一个技巧

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

关于r - 如何延迟R中函数参数的评估?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57138776/

10-12 19:09