R 如何用其他环境覆盖.GlobalEnv

R 如何用其他环境覆盖.GlobalEnv,r,R,我试过这个: myEnv <- new.env() assign("X", 42, envir = myEnv) .GlobalEnv <- myEnv 我正在设计一个包,它将保留一个包含元数据和数据的隐藏目录: # ls R/.hidden/* 1-import.R.Rdata 1-import.R.duration 2-data-management.R.Rdata 2-data-management.R.duration ... 我将创建一个my_sou

我试过这个:

myEnv <- new.env()
assign("X", 42, envir = myEnv)
.GlobalEnv <- myEnv
我正在设计一个包,它将保留一个包含元数据和数据的隐藏目录:

# ls R/.hidden/*
1-import.R.Rdata
1-import.R.duration
2-data-management.R.Rdata
2-data-management.R.duration
...
我将创建一个
my_source()
函数,该函数只生成以前修改过的脚本。为此,我必须处理一个临时环境,在其中编写脚本,并在.GlobalEnv中交付结果

此软件包的0.0.1版本位于此处

1)要将环境的所有元素复制到全局环境,请使用
as.list
将该环境转换为列表,然后使用
list2env
将该列表的内容复制到全局环境。你是否真的需要这样做还不清楚。你能不能不把这些东西放在那个隐藏的环境里

list2env(as.list(myEnv), .GlobalEnv)
X
## [1] 42
2)我不建议这样做,但与其修改全局环境,还可以将myEnv放置在搜索路径上,然后您可以引用其对象,只要它们没有被全局环境中同名的对象遮罩

X <- 43
attach(myEnv)

X
## 43

get("X", "myEnv")
## 42

rm(X)
X
## 42

X我不确定我是否了解您的想法,但请检查以下内容是否符合您的目的:

library(rlang)

myEnv <- env()
env_poke(myEnv, "X", 42)
env_bind(myEnv, X = zap()) # Here I use zap() to erase the previous value you can also
                           # overwrite it with another value. 

> myEnv$X
NULL

库(rlang)
myEnv myEnv$X
无效的
如果希望您的环境包含自身,也可以使用以下代码:

library(lobstr)
myEnv$self <- myEnv

> ref(myEnv)
o [1:0x2a4c3231e98] <env> 
\-self = [1:0x2a4c3231e98]  # This shows the memory address where your env was created.

库(lobstr)
myEnv$self ref(myEnv)
o[1:0x2a4c3231e98]
\-self=[1:0x2a4c3231e98]#显示创建环境的内存地址。

你到底想完成什么?我不确定我是否理解您为什么要更换您的全球环境。您是否只想在不同的环境中运行代码?还是要将所有值从
myEnv
复制到您的全局环境中?或者从当前全局环境中删除所有值?我已编辑了该问题。我希望标题中覆盖的使用是显而易见的。
myEnv
变量必须存在于某个地方。目前还不清楚在这种情况下会发生什么。我真的认为最好告诉我们你为什么认为你需要这样做。可能有更好、更惯用的方法来完成您在R中所追求的目标。如果这是用于
source()
,请使用源函数的
local=
参数。它允许您指定运行代码的参数。这比操纵用户的全局环境提供了更多的控制权,而用户的全局环境可能会产生恶劣的副作用,这取决于他们正在做什么。这就是我所做的,但最后我必须在中提供结果。GlobalEnvI编辑了这个问题。我不希望从环境中删除所有对象只是为了覆盖具有相同名称的对象,这是默认情况下发生的情况。我已根据问题的更改修改了答案。
library(rlang)

myEnv <- env()
env_poke(myEnv, "X", 42)
env_bind(myEnv, X = zap()) # Here I use zap() to erase the previous value you can also
                           # overwrite it with another value. 

> myEnv$X
NULL

library(lobstr)
myEnv$self <- myEnv

> ref(myEnv)
o [1:0x2a4c3231e98] <env> 
\-self = [1:0x2a4c3231e98]  # This shows the memory address where your env was created.