我确实得到
> f1(a)
a= 1 2
b= 2 1
[1] TRUE
[1] "b"
但是在这种情况下,我使用的envir参数exists(即使属于某个包,您仍然可以更改它)
f2<-function(dataset){
print(exists(dataset, envir=envir=parent.frame()))
print(dataset) # do analysis on dataset b
}
如果你真的无法修改f2,你必须“改进” f1......
a<-c(1,2)
f1<-function(dataset){
f2<-function(dataset){
print(exists(dataset, envir=parent.frame()))
print(dataset) # do analysis on dataset b
}
cat("a=",a,"\n")
b<-rev(a)
cat("b=",b,"\n")
f2("b")
}
> f1(a)
a= 1 2
b= 2 1
[1] TRUE
[1] "b"
问题是,在当前环境(函数本身)R中查找名为“b”的对象,然后,如果没有找到对象,则进入“上”级别......bb
这个上层b是定义在里面的父环境(在你的情况下是.GlobalEnv),并且b不在里面,而是在里面f1。
定义f2insidef1使得在进入. R_ 我的第一个解决方案使用了,它明确要求在被调用的环境中查找对象,这是与父环境不同的概念。bf1.GlabalEnvparent.frameRf2