【发布时间】:2016-10-19 12:58:40
【问题描述】:
我需要使用lapply 将不同的csv 文件从源导入到列表中。
关键是我想要的 csv 文件是例如100 个,但源仅包含其中的 80 个。
如何跳过源中未包含的文件?
这是我的代码:
stations <- read.csv("stations.csv", header = TRUE)
filenames <- paste(stations$ID, "csv", sep = ".") #define the filenames
directory <- "~I/am/not/that/dumb" #set directory where take files to read
filenames <- file.path(directory, filenames) #construct the files paths
list <- lapply(filenames, read.csv, header = FALSE, stringsAsFactors = FALSE) #import the csv into a list
但我得到了错误:
文件中的错误(文件,“rt”):无法打开连接另外: 警告消息:在文件中(文件,“rt”):无法打开文件 '/Users/I/am/not/that/dumb/26003.csv': 没有这样的文件或目录
显然是因为文件 26003.csv 不包含在源中。
关于如何跳过不存在的文件有什么建议吗?
要导入的 csv 文件总共有 >> 100 个,因此我无法手动完成。
【问题讨论】:
-
也许使用
dir(directory)的结果或与文件名相交的结果:myFilenames <- intersect(dir(directory), filenames))应该返回一个包含您的初始 csv 中实际位于目录中的文件名的向量。 -
你不能
Filter用file.exists取出不存在的文件吗? -
大家非常感谢,但我在问你 :)
-
lapply(Filter(file.exists, filenames), read.csv, header = FALSE, stringsAsFactors = FALSE)? -
@Imo 非常感谢。你的建议很好。如果你想发布你的答案,我会接受它是正确的。
标签: r file lapply skip read.csv