R语言中load()指定envir参数未按预期工作的原因咨询
为什么
load()指定envir = environment()会覆盖全局对象? 核心原因很简单:你调用environment()时,它返回的就是当前运行代码的环境——也就是全局环境,所以本质上你还是把对象加载到了全局环境里,自然会覆盖原有的df。
具体拆解:
environment()的作用是返回当前执行环境,不是创建新环境。在全局环境中运行这段代码时,identical(environment(), .GlobalEnv)会返回TRUE,说明你指定的envir就是全局环境,和不指定envir参数的效果完全一样。- 而
rlang::env()默认会创建一个全新的空环境,和全局环境相互独立,所以加载的df只会存到这个新环境里,不会影响全局的df。
修正方案(用base R也能实现):
如果想用base R达到预期效果,别用environment(),改用new.env()创建新环境:
df = tibble(A = 1) save(df, file = file.path("tmp.RData")) df = tibble(A = 2) # 创建新环境,而非返回当前环境 tmp <- new.env() load("tmp.RData", envir = tmp) # 验证结果 df # 输出 tibble(A = 2) tmp$df # 输出 tibble(A = 1)
内容的提问来源于stack exchange,提问作者paulduf
相关产品推荐
相关产品推荐

