R 在函数的父环境中指定变量

R 在函数的父环境中指定变量,r,R,看看下面的例子,我已经将变量holder分配给了全局环境。但是,我想将holder专门分配给make.var的本地环境。我该怎么做 make.var<-function(){ holder<<-rep(NA,10) #assigns global } test<-function(){ make.var() } 编辑:我认为这个术语经常用于调用环境而不是父环境 您可以使用parent.frame获取调用环境,不要将其与parent.env混淆,并使用$or[]

看看下面的例子,我已经将变量holder分配给了全局环境。但是,我想将holder专门分配给make.var的本地环境。我该怎么做

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

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

编辑:我认为这个术语经常用于调用环境而不是父环境

您可以使用parent.frame获取调用环境,不要将其与parent.env混淆,并使用$or[]为其分配变量,就像使用列表一样。 或者您可以使用assign

例如

然后:

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

您可以使用parent.frame获取调用环境—不要将其与parent.env混淆,并使用$or[[就像使用列表一样]为其分配变量。 或者您可以使用assign

例如

然后:

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

你可以签出?assign-可能在pos=parent.frame中。你为什么不简单地让make.var返回一个值,你可以在任何需要的地方分配它?@alexis_laz我会看一看。我基本上必须分配很多变量。我想如果我返回这些变量的列表,那会很麻烦。如果y都是在父环境中以一行方式分配的。返回一个列表并使用List2Env您可以签出吗?分配-可能在pos=parent.frame中。为什么不简单地让make.var返回一个值,您可以在任何需要的地方分配它?@alexis_laz我会看一看。我基本上必须分配很多变量。我想如果我返回了这些变量的列表,这会很麻烦。如果它们都是在父环境中以一行方式分配的,这会更容易。如果您需要返回多代,例如,在apply函数中有一个if语句,在主函数中有您要设置的变量,请返回列表并使用list2envFYI日期,您可以为parent.frame.FYI指定参数n,如果您需要返回多个代,例如,在apply函数中有一个If语句,在包含要更新的变量的主函数中,您可以为parent.frame指定参数n。