我需要使用csv
将不同的lapply
文件从源导入到列表中。
关键是我想要的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/am/not/that/哑/26003.csv:没有这样的文件或目录
很明显,因为文件26003.csv不包含在源中。
有关于如何跳过不存在的文件的建议吗?
要导入的csv文件总共是>> 100,因此我不能手动进行。
发布于 2016-10-19 05:13:27
我能想到两种选择。
1)导入前检查文件名是否存在(类似于OP上的注释):
stations <- read.csv("stations.csv", header = TRUE)
filenames <- paste(stations$ID, "csv", sep = ".")
directory <- "~I/am/not/that/dumb"
filenames <- file.path(directory, filenames)
filenames <- intersect(filenames, list.files(directory, full.names = TRUE)) # added
list <- lapply(filenames, read.csv, header = FALSE, stringsAsFactors = FALSE)
2)使用try
/ tryCatch
来处理错误:
一个简单的办法是:
stations <- read.csv("stations.csv", header = TRUE)
filenames <- paste(stations$ID, "csv", sep = ".")
directory <- "~I/am/not/that/dumb"
filenames <- file.path(directory, filenames)
lst <- lapply(filenames, function(x) {
try(read.csv(x, header = FALSE, stringsAsFactors = FALSE))
})
生成的列表对象随后可能包含try-error
元素。如果您想要删除它们,可以使用
lst <- lst[sapply(lst, function(x) !inherits(x, "try-error"))]
https://stackoverflow.com/questions/40132085
复制