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

问题描述 投票:0回答:2

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

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

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

编辑:我认为经常使用的术语是“调用环境”而不是“父环境”。

r
2个回答
8
投票

您可以使用

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

例如

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

0
投票

我遇到了这个问题,想做类似的事情。您尝试过下面的代码吗?这应该可以满足您的要求。

make.var<-function(){
   assign("holder", rep(NA,10))
}

如果您想使用全局环境链上更高的环境来设置它,您可以使用 allocate 的 pos 参数。

© www.soinside.com 2019 - 2024. All rights reserved.