没有这样的文件或目录(R中的错误)

时间:2017-11-28 14:55:06

标签: 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)
}

2 个答案:

答案 0 :(得分:1)

默认情况下,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)

答案 1 :(得分:0)

  

我想导入并在一个数据框中绑定一组.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,可以将read.csv替换为fread,这可能会加快速度。

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的操作要慢得多,具体取决于您拥有的文件数量。