我们说我已经定义了一个函数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
我感谢任何意见。
谢谢!
答案 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
内的f1
。 source
在这里没有用。
感谢大家的建议。