2016-04-27 77 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