从这段简单的代码
df = tibble(A = 1)
save(df, file = file.path("tmp.RData"))
df = tibble(A = 2)
# tmp <- rlang::env()
tmp <- environment()
load("tmp.RData", envir = tmp)
我希望df
包含2,tmp$df
包含1,但两者都包含1,所以加载的df
会覆盖全局环境中的一个。这不是我期望的将envir
参数传递给load
的行为。
有人能解释一下原因吗?我是不是错过了一些重要的设计?
注意:将基本Renvironment
替换为rlang::env
,工作正常。
注意,environment()
返回当前环境;它不会创造一个新的环境。在这里你可以看到它只是全球环境
tmp <- environment()
tmp
# <environment: R_GlobalEnv>
因此您正在替换全局环境中df
的值。
如果你想要一个新的环境,请使用
tmp <- new.env()
load("tmp.RData", envir = tmp)
这将加载到不同的环境中,并保持全局环境中df
的值不变。