我有一個函數說,增加值它被稱爲
inc <- function(t) {
f <- 1
t + f
}
所以,在第一次函數inc
被調用,f
將1
,但下一次它得到叫f
值應2
當函數inc
被稱爲第3次f
值應該是3
等等...
我怎麼做,在R'
我有一個函數說,增加值它被稱爲
inc <- function(t) {
f <- 1
t + f
}
所以,在第一次函數inc
被調用,f
將1
,但下一次它得到叫f
值應2
當函數inc
被稱爲第3次f
值應該是3
等等...
我怎麼做,在R'
我通常使用這個。我不知道這是否是一個把戲或黑客:
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
你應該真的解釋它是如何工作的。 – Roland
我不明白。有人可以解釋嗎? – user3664020
@ user3664020'getF'返回一個函數(查看'print(f)')。在<< getF'環境中'<< - '增加'x',這個環境包含'f'的環境。 – Roland
這可能是比較容易理解,但在工作區作爲一個副作用創建一個環境:
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
什麼是你想最終做呢? – Heroka
您可以將其用於記憶,但對於幾乎所有其他目的,您都不應該這樣做。它違反了函數式語言範式。 – Roland
查看Hadley Wickham的書,這裏是確切的例子:http://adv-r.had.co.nz/Functional-programming.html#mutable-state – tonytonov