功能工厂的力量评估

丹尼尔加

我正在阅读Hadley的Advanced R,并进入以下示例:

boot_permute <- function(df, var) {
  n <- nrow(df)
  force(var)

  function() {
    col <- df[[var]]
    col[sample(n, replace = TRUE)]
  }
}

boot_mtcars1 <- boot_permute(mtcars, "mpg")
head(boot_mtcars1())
#> [1] 16.4 22.8 22.8 22.8 16.4 19.2
head(boot_mtcars1())
#> [1] 17.8 18.7 30.4 30.4 16.4 21.0

可能有人给我解释一下为什么他使用forcevar却没有做一样df我知道这样做的目的是强制对变量进行求值,但为什么他只为求变量却无法理解var

弗里克先生

该行将nrow(df)强制对进行评估df由于var在内部函数得到实际评估之前不会进行评估,var因此在内部函数真正执行之前,闭包内仍将保留未force(var)评估的承诺。因此,如果您已经以某种方式使用了变量的值,force()则不需要显式

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章