请看下面的示例,我已将变量持有者分配给全局环境。但是,我想将holder专门分配给make.var()的本地环境。我该怎么做?
make.var<-function(){
holder<<-rep(NA,10) #assigns global
}
test<-function(){
make.var()
}
编辑:我认为经常使用的术语是“呼叫环境”,而不是“父环境”。
答案 0 :(得分:2)
您可以使用parent.frame
获取调用环境(不要将其与parent.env
混淆)并使用$
或[[
为其分配变量(与您一样)列表)。
或者您可以使用assign
。
E.g。
rm(list = ls())
`%<-1%` <- function(x, y) { p <- parent.frame() ; p[[deparse(substitute(x))]] <- y }
`%<-2%` <- function(x, y) { assign(deparse(substitute(x)), y, env = parent.frame())}
然后:
ls()
a1 %<-1% 111
ls()
a2 %<-2% 222
ls()
a1 ; a2
test1 <- function(x) { print(ls()); t %<-1% x; print(ls()); t }
test2 <- function(x) { print(ls()); t %<-2% x; print(ls()); t }
ls()
test1(333)
ls()
test2(444)
ls()