2016-04-27 76 views
2

有沒有什麼辦法可以在R中定義一個函數,其中的常數是由變量確定的?我不知道如何說更好,所以這裏是一個例子。在函數中創建變量常量R

> index<-3 
> f<-function(x){x+index} 
> f(4) 
[1] 7  #Great! 
> index<-20 
> f(4) 
[1] 24 #No! I still want to see 7! 

謝謝!

+4

關於環境的先進R的章節似乎相關:http://adv-r.had.co.nz/Environments.html – paljenczy

+1

可能想看到http://stackoverflow.com/q/1169534 – BenBarnes

+0

所以我最終與BenBarnes的短期方法,但會繼續閱讀paljenczy建議的環境,希望能提出一些「更好」的東西。謝謝你們倆! – Rubarb

回答

2

一個可能的解決方案是另一個函數中定義的函數:

g <- function(index){ 
    function(x) x + index 
} 
index <- 3 
f <- g(index) 
f(4) 
index<-20 
f(4) 

現在的g(index)的輸出是中定義的函數(執行)環境g。此功能(f)將在此環境中查看index的值,它固定爲3.這就是它工作的原因,但也許有一個更簡單的解決方案。

+0

謝謝!這看起來像BenBarnes在上面的評論中所暗示的,但是直到我讀到你的解決方案之前,我並不完全「明白」。 – Rubarb

2

查找?lockBinding,你的答案是here

index <- 3 
lockBinding("index", globalenv()) 
index <- 4 
#> Error: cannot change value of locked binding for 'index' 
+0

謝謝,但我希望能夠在函數定義後能夠更改「index」的值。理想情況下,如果我查看函數,我會看到:function(x){x + 3}。 – Rubarb