我正在阅读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
可能有人给我解释一下为什么他使用force
上var
却没有做一样df
?我知道这样做的目的是强制对变量进行求值,但为什么他只为求变量却无法理解var
。
该行将nrow(df)
强制对进行评估df
。由于var
在内部函数得到实际评估之前不会进行评估,var
因此在内部函数真正执行之前,闭包内仍将保留未force(var)
评估的承诺。因此,如果您已经以某种方式使用了变量的值,force()
则不需要显式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句