我正在尝试读取具有不同名称的CSV文件。 在我的for循环中,使用不同的i值,它会检查文件并导入文件。有一些i的值,它与任何文件名都没有关联。
在这里,我的问题是如何进入下一次迭代? 提前谢谢!
for (i in 17:23)
{
path= file.path(paste0("2017-02-23 ", i, "_00_00/Registrations.csv"))
if(!file.exists(path))
data= read.table(path, header = F, sep=",")
datalist= list(data)
else print(NA)
}
> for (i in 17:23)
+ {
+ path= file.path(paste0("2017-02-23 ", i, "_00_00/Registrations.csv"))
+ if(!file.exists(path))
+ data= read.table(path, header = F, sep=",")
+ datalist= list(data)
+ }
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file '2017-02-23 19_00_00/Registrations.csv': No such file or directory
答案 0 :(得分:3)
您可以使用next
:
datalist = list()
for (i in 17:23) {
file = paste0("2017-02-23 ", i, "_00_00/Registrations.csv")
path = file.path(file)
if(!file.exists(path)) {
next
}
data = read.table(path, header = F, sep = ",")
datalist[[file]] = data
}
我有
next
跳过文件不存在的迭代print(NA)
行。但是这更有效地做同样的事情(我会说,更清楚):
paths = file.path(paste0("2017-02-23 ", 17:23, "_00_00/Registrations.csv"))
extant_paths = paths[file.exists(paths)]
datalist = lapply(extant_paths, read.table, header = FALSE, sep = ",")
paste
,file.path
和file.exists
都是矢量化的,因此一次性使用它们会更容易,更快捷。需要在循环中的唯一操作是read.csv
。在这里,我们使用lapply
作为方便的语法而不是for
循环 - 它节省了我们需要初始化list
并手动为其分配元素。