在函数的父环境中分配变量

时间:2017-03-18 11:11:44

标签: r

请看下面的示例,我已将变量持有者分配给全局环境。但是,我想将holder专门分配给make.var()的本地环境。我该怎么做?

make.var<-function(){
  holder<<-rep(NA,10) #assigns global
}

test<-function(){
  make.var()
}
编辑:我认为经常使用的术语是“呼叫环境”,而不是“父环境”。

1 个答案:

答案 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()