【问题标题】:R script, programmatically batch import multiple csv files as list of data frames (solution)R脚本,以编程方式批量导入多个csv文件作为数据框列表(解决方案)
【发布时间】:2017-02-03 05:51:50
【问题描述】:

我对 R 比较陌生,但在传统编程语言(例如 C、Java)方面经验丰富。我最近遇到了这样一种情况,即我有很多数据文件要加载,以至于我在一项任务上花费的时间几乎与我在实际分析上花费的时间一样多。我花了一点时间在谷歌上搜索,但没有遇到任何我发现直接相关的解决方案(我可能错过了一些东西,我很不耐烦)。尽管如此,我还是想出了一个简单的解决方案来解决我的问题,我想与社区分享,以防其他人发现自己处于类似情况。

一些背景信息:我正在分析的数据是由实时数据馈送(即复杂)驱动的实验系统的实时性能和诊断指标。结果是在试验之间文件名不会改变,数据直接写入 csv 文件(我编写了日志记录代码,这样我就可以成为我自己最好的朋友;)。在一次试用期间会生成数十个文件,我们可能会进行数百次试用。

我有一些想法,在玩了一会儿代码后,我想出了以下解决方案:

# Create mapping that associates files with a handle that the loader will use to
# generate a named list of data frames (don't even try this on the cmdline)
createDataFileMapping <- function() {
  list(
    c(file = "file1.csv", descr = "descriptor1"),
    c(file = "file2.csv", descr = "descriptor2"),
    ...
  )
}

# Batch load csv files and return as list of data frames
loadTrialData <- function(load.dir, mapping) {
  dfList <- list()
  for (item in mapping) {
    file <- paste(load.dir, item[["file"]], sep = "/")
    df <- read.csv(file)
    dfList[[ item[["descr"]] ]] <- df
  }

  return(dfList)
}

调用就像loadTrialData("~/data/directory", createDataFileMapping())一样简单。

我确信还有其他方法可以解决此问题,但以上方法在我的情况下可以完成。我确信这比将文件直接加载到全局环境中的数据帧中的内存效率略低,并且将单个数据帧传递给分析/绘图函数的语法并不像它可以的那样优雅,但我'我不挑剔。如果您有更灵活/通用的解决方案,请不要犹豫发布!

【问题讨论】:

  • 由于这里没有明确的可回答的编程问题,因此这篇文章似乎比 Stack Overflow 更适合 Code Review
  • 也许,尽管我认为寻求帮助解决此问题或类似问题的人可能不同意。堆栈溢出是一个高流量的帮助目的地,这里发布的全部目的是将信息放在最能发挥作用的地方。如果这不符合“传统”智慧,那就这样吧。当然,我也会写博客。

标签: r csv import automation batch-processing


【解决方案1】:

你所拥有的是健全的,我只会添加两个 cmets:

  • 不用担心额外的内存使用,假设数据帧大小不一,将它们放在一个大列表中不会损失太多。

  • 1234563想要stringsAsFactors=FALSE 或其他东西)然后他们可以灵活地做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多