变量范围贯穿R中的函数内部

时间:2017-11-06 21:41:25

标签: r scope

我们说我已经定义了一个函数f1(x),它调用了别人拥有的另一个函数f2(x),我不应该触及。我希望f1中定义的变量在f2中可用而不传递其他参数。

以下是示例:

a<-4 # A global variable
f2<-function(x,b){
     return(a*b*x) #accesses a global variable and one that I want to define inside f1
}
f1<-function(x){
     b<-2 # Note: I do not want to use b<<-2 because it messes up my .GlobalEnv
     y = f2(x) # This produces error saying 'b' is undefined
     return(y)
}
f1(10) # This should produce 80 (= 4*2*10) but gives error that 'b' is not defined 

我感谢任何意见。

谢谢!

2 个答案:

答案 0 :(得分:0)

你好使用词典范围。简而言之,这意味着函数可以访问函数中可用的函数范围内可用的所有变量。

你想做的就是这样。

a<-4 # A global variable

f1<-function(x){
     b<-2 # Note: I do not want to use b<<-2 because it messes up my .GlobalEnv
f2<-function(x){
     return(a*b*x) #accesses a global variable and one that I want to define inside f1
}
     y = f2(x) # This produces error saying 'b' is undefined
     return(y)
}

答案 1 :(得分:0)

在深入了解www后,我找到了问题的答案。如果您假设每个函数都是用.R文件编写的,那么您可以在f1内调用它来解决问题:

eval(parse(file = 'path to f2.R'))

这实质上重新定义了f2内的f1source在这里没有用。

感谢大家的建议。