加载 .RData 文件中包含的对象(如果它们尚不存在)

Posted

技术标签:

【中文标题】加载 .RData 文件中包含的对象(如果它们尚不存在)【英文标题】:Load objects contained in .RData file if they do not already exist 【发布时间】:2018-10-17 06:42:17 【问题描述】:

问题:是否只有在当前环境中不存在 RData 文件时才能从 RData 文件中读取 R 对象?

为什么:我希望能够在 R 脚本的顶部设置一些变量,但加载之前脚本的已完成变量。但是,如果它们设置在顶部,我希望它们覆盖 load() 变量。

示例数据和问题:

a <- 5
b <- 2
save(a,b,file="testa.RData")
rm(a)
a <- 10
load("testa.RData")
#CURRENTLY:
> a
[1] 5
> b
[1] 2

#DESIRED RESULT:
> a
[1] 10
> b
[1] 2

【问题讨论】:

Get specific object from Rdata file的可能重复 我建议您使用saveRDS 将每个变量保存到自己的文件中。然后你可以根据exists是否返回TRUE来加载文件。 我将文件加载到新环境中,并通过来自@krads 建议的从 Rdata 文件中获取特定对象按名称调用。 e &lt;- local(load("testa.RData"); environment());if(!exists("a"))a&lt;-e$a 【参考方案1】:

根据 cmets 的建议,我想出了一个相当干净的函数:

 lnexist <- function(filename)
  ee <- local(load(filename); environment())
  lsee <- ls(ee)
  lse <- ls()
  for(x in lsee)
    if(!exists(x))
      tempvar <<- ee[[x]]
      assign(x,tempvar,envir = .GlobalEnv)
    
  


#TESTING
a<- 10
b <- 5
c <- 3
save(a,b,c,file="testc.RData")
rm(b)
c<- 8
lnexist("testc.RData")
> a
[1] 10
> b
[1] 5
> c
[1] 8

【讨论】:

以上是关于加载 .RData 文件中包含的对象(如果它们尚不存在)的主要内容,如果未能解决你的问题,请参考以下文章

小 ggplot 对象(1 mb)在保存时变成 7 GB .Rdata 对象

加载 .RData 对象时出现问题:“文件‘pathway.path.RData’有幻数‘’不推荐使用 2 之前的保存版本”

从应用程序中包含的文件加载 android 数组

如何重新加载 UIViewController 中包含的 tableView?

如何解决从字符串加载 XSL 的转换中包含的 XSL?

加载spydata文件