2017-03-18 43 views
0

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

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

test<-function(){ 
    make.var() 
} 

编辑:我认为这是经常使用的“呼唤环境”,而不是“家长环境”一词。

+0

你可以看看'assign' - 可能是在 “POS = parent.frame()”?你为什么不简单地让'make.var'返回一个你可以随时分配的值? –

+0

@alexis_laz我会看看它。我基本上必须分配(启动)很多变量。我想如果我返回这些变量的列表,这将是麻烦的。如果他们全部在父母环境中以单线形式分配,则会更容易。 –

+0

返回一个列表并使用list2env() – Sathish

回答

1

你可以使用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()