首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将多个csv文件导入列表并跳过不存在的文件

将多个csv文件导入列表并跳过不存在的文件
EN

Stack Overflow用户
提问于 2016-10-19 12:58:40
回答 1查看 314关注 0票数 0

我需要使用csv将不同的lapply文件从源导入到列表中。

关键是我想要的csv文件是100,但是源只包含其中的80个。

如何跳过源代码中未包含的文件?

这里我的代码:

代码语言:javascript
运行
复制
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,因此我不能手动进行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 13:13:27

我能想到两种选择。

1)导入前检查文件名是否存在(类似于OP上的注释):

代码语言:javascript
运行
复制
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来处理错误:

一个简单的办法是:

代码语言:javascript
运行
复制
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元素。如果您想要删除它们,可以使用

代码语言:javascript
运行
复制
lst <- lst[sapply(lst, function(x) !inherits(x, "try-error"))]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40132085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档