簡體   English   中英

沒有這樣的文件或目錄(R 中的錯​​誤)

[英]no such file or directory (error in R)

我想在一個數據框中導入和綁定一組 .csv 文件。 我創建了一個文件列表,然后創建了一個 for 循環來讀取每個文件並將它們綁定在一起。 但是,在第二個文件中,我收到一條錯誤消息,指出缺少此類文件或目錄。 但是它確實存在於我創建的文件列表中。 請問有什么關於這個問題的建議嗎? 謝謝你。

file.names <- list.files(path = pathname, pattern = " trial.csv")

for(i in seq(file.names)){
  file1 <- read.csv(file.names[i], header = TRUE, stringsAsFactors = FALSE)
  file1 <- t(file)
  file1 <- data.frame(file, stringsAsFactors = FALSE)
  colnames(file1) = file1[1,]
  print(file1)
}

默認情況下, list.files()返回沒有目錄詳細信息的文件名。 導入文件時,您通常希望設置full.names = TRUE以返回絕對路徑(包括目錄名稱)。

一個好的代碼模式如下。

library(assertive.files)
files_to_import <- list.files(some_path, full.names = TRUE)
assert_all_are_existing_files(files_to_import)
data <- lapply(files_to_import, read.csv)

我想在一個數據框中導入和綁定一組 .csv 文件。

@richie-cotton 提供了一個解決您路徑問題的答案,但我想解決您問題中突出顯示的部分。

Richie Cotton 的代碼:

library(assertive.files)
files_to_import <- list.files(some_path, full.names = TRUE)
assert_all_are_existing_files(files_to_import)
data <- lapply(files_to_import, read.csv)

將以data結尾,一個 data.frames 列表。 您希望這些成為一個data.frame 看看這個對類似問題的回答: https : //stackoverflow.com/a/18489830/5333994

我的建議是使用結束rbindlist所產生的名單上data.frame

library(data.table)
data <- rbindlist(data)

事實上,如果你打算使用data.table你可以用fread替換read.csv這可能會加快速度。

library(data.table)
library(assertive.files)
files_to_import <- list.files(some_path, full.names = TRUE)
assert_all_are_existing_files(files_to_import)
data <- rbindlist(lapply(files_to_import, fread))

如果您想以data.frame而不是data.table只需使用setDF

setDF(data)

如果你想避免一起使用data.table ,運行do.call可能是你最好的選擇。

data <- do.call("rbind", data)

請注意我上面鏈接的答案,這可能比使用rbindlist慢得多,具體取決於您擁有的文件數量。

暫無
暫無

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

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