我有一个功能说,
inc <- function(t) {
f <- 1
t + f
}
因此,第一次调用函数inc
时,f
将为1
,但下次调用时f
值应为2
}当第3次调用函数inc
时,f
值应为3
,等等......
我如何在R中执行此操作?
答案 0 :(得分:6)
我经常使用这个。我不知道这是一招还是黑客攻击:
getF <- function(){
x <- 1
function(t){
x <<- t + x
}
}
f <- getF()
f
是一个函数(getF
的返回值),它的封闭环境不是全局环境,而是定义了f
的环境。看environment(f)
。 <<-
将x
分配到该环境中:请参阅ls(environment(f))
和get("x", environment(f))
。
print(f(3))#4
print(f(4))#8
答案 1 :(得分:3)
这可能更容易理解,但在工作区中创建一个环境作为副作用:
inc <- function(t) {
if (!exists("e")) {
e <<- new.env()
e$x <- 1
}
e$x <- e$x + t
e$x
}
inc(2)
#[1] 3
inc(2)
#[1] 5