2015-09-21 58 views
4

我有一個函數說,增加值它被稱爲

inc <- function(t) { 
     f <- 1 
     t + f 
} 

所以,在第一次函數inc被調用,f1,但下一次它得到叫f值應2當函數inc被稱爲第3次f值應該是3等等...

我怎麼做,在R'

+1

什麼是你想最終做呢? – Heroka

+1

您可以將其用於記憶,但對於幾乎所有其他目的,您都不應該這樣做。它違反了函數式語言範式。 – Roland

+0

查看Hadley Wickham的書,這裏是確切的例子:http://adv-r.had.co.nz/Functional-programming.html#mutable-state – tonytonov

回答

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

你應該真的解釋它是如何工作的。 – Roland

+0

我不明白。有人可以解釋嗎? – user3664020

+0

@ user3664020'getF'返回一個函數(查看'print(f)')。在<< getF'環境中'<< - '增加'x',這個環境包含'f'的環境。 – Roland

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