【发布时间】:2014-04-15 14:17:41
【问题描述】:
让x<-2在全局环境中:
x <-2
x
[1] 2
让a成为一个函数,在本地定义另一个x并使用get:
a<-function(){
x<-1
get("x")
}
此函数正确地从本地环境中获取x:
a()
[1] 1
现在让我们定义一个函数b 如下,它使用mapply 和get:
b<-function(){
x<-1
mapply(get,"x")
}
如果我调用b,似乎mapply 使get 没有先搜索函数环境。相反,它会尝试直接从全局环境中获取x,如果x 未在全局环境中定义,则会给出错误消息:
b()
x
2
rm(x)
b()
Error in (function (x, pos = -1L, envir = as.environment(pos), mode = "any", :
object 'x' not found
解决方案是显式定义envir=environment()。
c<-function(){
x<-1
mapply(get,"x", MoreArgs = list(envir=environment()))
}
c()
x
1
但我想知道这里到底发生了什么。 mapply在做什么? (为什么?这是预期的行为吗?)这种“陷阱”在其他 R 函数中是否常见?
【问题讨论】:
标签: r get environment mapply