gpt4 book ai didi

r - 如何获得应用功能产生副作用?

转载 作者:行者123 更新时间:2023-12-02 09:30:34 24 4
gpt4 key购买 nike

我希望由apply函数调用的函数在全局范围内具有副作用,即影响全局范围内的变量。如您所见,这不起作用:

library(zoo)
test=1
rollapply(1:10, width=2, function(x) test=test+1)
# [1] NA NA NA NA NA NA NA NA NA
test
# 1

我希望每次调用 function(x)时测试都会增加,但是不幸的是,执行 1后,测试仍然是 rollapply。有可能解决这个问题吗?

最佳答案

通常,R不支持在函数范围之外更改变量。这样做的原因是为了减少代码的互连性。这是一件好事,因为它使推理特定代码段的工作变得更加容易,而不必考虑周围的所有上下文。尤其是在较大的程序中,这会造成很难修复的错误。

但是,使用<<-运算符可以覆盖以下行为:

a = 1
spam = function() {
a <<- a + 1
}
spam()
a
[1] 2

但是,通常不需要这样做,不建议这样做。

通常,功能不会保持状态,即一旦功能完成,功能内的所有信息都会被丢弃。看一看 closures来获取确实保持状态的函数,这可能会解决您的问题(您未陈述)。

关于r - 如何获得应用功能产生副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33539007/

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