以编程方式从 RData 文件集合中提取对象

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

我们在生产环境中工作,通过 API 调用组装的大型数据集保存为 RData 文件,以保留完整的环境和后续数据摘要。 RData 文件非常大,并且包含使用标准分析工作流程生成的多个具有相似名称和结构的数据框对象。

我正在寻找一种干净的方法来遍历 RData 文件集合,从每个文件中提取一个命名对象,然后组装成 AllCohorts 数据框进行分析。

r production-environment rdata
2个回答
2
投票

我们找到了一个有用的解决方案。

  1. 提取功能
 extractorRData <- function(file, object) {
      #' Function for extracting an object from a .RData file created by R's save() command
      #' Inputs: RData file, object name
      E <- new.env()
      load(file=file, envir=E)
      return(get(object, envir=E, inherits=F))
    }
  1. 从 RData 文件“priorRun.RData”中提取数据框“allParams”,而不加载整个环境。
      allParams.prior <- extractorRData("priorRun.RData", "allParams")

事实证明,这种方法既快速又灵活。对于重建速度较慢的大型数据帧很有用。


0
投票

以下修改 (1) 允许请求多个对象,并且 (2) 避免使用分配。即,将对象放置在调用环境中

extractRData <- function(file, objects) {
  objectsNotFound <- c()
  E <- new.env()
  load(file=file, envir=E)
  for (object in objects) {
    temp <- try({
      get(object, envir=E, inherits=F)
    })
    if (substr(temp[1],1,5) == "Error") {
      objectsNotFound <- c(objectsNotFound,object)
    } else {
      eval(parse(text=paste(object," <<- temp")))
    }
  }
  return(objectsNotFound)
}
© www.soinside.com 2019 - 2024. All rights reserved.