gpt4 book ai didi

r - 函数运算符和环境

转载 作者:行者123 更新时间:2023-12-01 13:29:44 25 4
gpt4 key购买 nike

好的堆栈,

我一直在阅读 Advanced R并且真的发现它很有帮助。我真的不明白示例中 R 的行为:

dot_every <- function(n, f) {
i <- 1
function(...) {
if (i %% n == 0) cat(".")
i <<- i + 1
f(...)
}
}

所以这里的想法是我们要在函数的每 n 次迭代中显示一个句点。我不明白的是如何通过多次调用 dot_every 来维护 i 的值。在一个函数中。我明白 <<-在搜索名为 i 的东西的环境中向上移动然后替换为 i+1 .我本以为是这样的:

x <- lapply(1:20, dot_every(10, runif))

垃圾会收集 i对于 lapply 中的每次迭代因此永远不要增加它。我的直觉是它会像这样工作:

for(i in 1:20){
dot_every(10, runif)(i)
}

它似乎在调用 dot_every , 垃圾收集i ,因此不显示任何内容。在这种情况下使用函数与 for 循环有什么不同?

感谢您的帮助!

最佳答案

在第一种情况下(使用 lapply),您只调用一次 dot_every(),然后对 1 中的每个元素使用结果函数: 20。在第二种情况下,您在每次循环中调用 dot_every(),然后只使用一次结果函数。要查看此内容,请插入以下行:

cat("!")

作为 dot_every() 定义中的第一行。然后:

> x <- lapply(1:20, dot_every(10, runif))
!..

但是

> for(i in 1:20) dot_every(10,runif)(i)
!!!!!!!!!!!!!!!!!!!!

关于r - 函数运算符和环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46550512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com