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

Wic*_*elo 2 r side-effects apply

我希望由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
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*tra 5

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

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

a = 1
spam = function() {
    a <<- a + 1
}
spam()
a
[1] 2
Run Code Online (Sandbox Code Playgroud)

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

通常,功能不会保持状态,即一旦功能完成,功能内部的所有信息都将被丢弃。看一下闭包以获取确实保持状态的函数,这可能会解决您的问题(您未声明)。