簡體   English   中英

R腳本,以編程方式批量導入多個csv文件作為數據幀列表(解決方案)

[英]R script, programmatically batch import multiple csv files as list of data frames (solution)

我對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())

我確定還有其他方法可以解決此問題,但以上內容可以完成我的工作。 我敢肯定,這與在全局環境中將文件直接加載到數據幀中相比,內存效率略低,並且將單個數據幀傳遞到分析/繪圖功能的語法並不盡如人意,但是我我不挑剔。 如果您有一個更靈活/更通用的解決方案,那么請隨時發布!

您所擁有的就是聲音,我只添加兩個評論:

  • 不必擔心額外的內存使用情況,假設數據幀的大小很簡單,那么將它們放到一個大列表中也不會造成太大損失。

  • 您可以在函數中添加...作為參數,然后將其傳遞給read.csv ,這樣,如果另一個用戶需要指定額外的參數,因為他們的文件格式不是完全相同(或者想要stringsAsFactors=FALSE東西) ),那么他們就可以靈活地做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM