2016-05-26 32 views
0

在R中,如何在定義函數時將變量的值用作常量?R - 如何獲得一個變量的值作爲常量處理?

在一個循環,我想要做的事,如:

theta <- vector[n] 

f <- function(x) 
{ 
    v <- theta * x 
    return(v) 
} 

但我需要以後能夠重新theta和沒有這個改變函數的定義?我研究過get(),但是這遇到了同樣的問題。

+2

一般而言,功能不應該依賴於常量在全局環境。在這種情況下,'f'應該是'theta'和'x'的函數。在循環內部定義一個函數*會是一個非常奇怪的情況。在循環外定義函數,然後在循環內部使用'f(x,theta [i])'。 – Gregor

+0

感謝您的回覆,這會更有意義。 – Conor

回答

3

你可以嘗試這樣的事情:

f <- function(theta) { 
    t <- theta 
    function(x) t * x 
} 
theta <- 5 
g <- f(theta) 
# g is now a function that multiplies its argument by 5 
g(2) 
#[1] 10 
# Now try to modify theta in the global environment 
theta <- 6 
# g doesn't change 
g(2) 
#[1] 10 
+3

值得一提的是,這是一個簡單的_closure_示例。 – rbm

+0

謝謝!這是否工作,因爲t是本地的功能?在執行R時,是否正確設置函數g,而不是每次評估g(。)時都要經過f? – Conor

+0

是'g'有它自己的相關環境(你可以看到例如,如果你只是輸入'print(g)')。哈德利的書中有很多信息http://adv-r.had.co.nz/Functional-programming.html – konvas

相關問題