R:使用try()处理异常
我有一个存储在对象R:使用try()处理异常,r,try-catch,R,Try Catch,我有一个存储在对象FILELIST中的15个文件的列表。任务是从一个特定目录中读取FILELIST中的所有文件,并将其中一个附加到另一个目录下 在下面的代码中,名为“dataset”的对象将具有最终附加文件。我面临的问题是,如果文件列表中的一个或多个文件不在目录中,我将得到如下错误。我需要的是,如果15个文件中有1个或多个不在目录中,代码应该继续追加其余的文件 我已经尝试了try异常处理方法,但仍然得到下面的错误,代码不会处理其余的文件 文件(文件“rt”)中出错:无法打开连接 此外:警告信息:
FILELIST
中的15个文件的列表。任务是从一个特定目录中读取FILELIST
中的所有文件,并将其中一个附加到另一个目录下
在下面的代码中,名为“dataset”的对象将具有最终附加文件。我面临的问题是,如果文件列表
中的一个或多个文件不在目录中,我将得到如下错误。我需要的是,如果15个文件中有1个或多个不在目录中,代码应该继续追加其余的文件
我已经尝试了try
异常处理方法,但仍然得到下面的错误,代码不会处理其余的文件
文件(文件“rt”)中出错:无法打开连接
此外:警告信息:
在文件中(文件“rt”):
无法打开文件“PREDICTION_2016_Q4_Wk13.csv”:没有此类文件或目录
代码:
for(文件列表中的文件){
试试(
如果(!存在(“数据集”)){
dataset我不会对此使用异常处理。而是执行以下操作:
for (file in intersect(FILELIST, list.files())) {
首先使用file.exists
和Filter
将FILELIST
缩减为存在的文件,然后读取每个文件,并在最后将它们一起绑定
请注意,这既适用于文件列表
包含当前目录中的文件名的情况,也适用于文件位于其他位置且路径/文件名在文件列表
中指定的情况
没有使用任何软件包
do.call("rbind", lapply(Filter(file.exists, FILELIST), read.csv))
更新:改进的代码。结合其他两个答案,使用readr
+dplyr
提高速度:
library(dplyr)
library(readr)
# existing files
f <- intersect(FILELIST, list.files())
# or identically:
# f <- intersect(FILELIST, dir())
# f <- FILELIST[ file.exists(FILELIST) ]
# combine in a single dataset
d <- bind_rows(lapply(f, read_csv))
库(dplyr)
图书馆(readr)
#现有文件
f正如下面所有的解决方案所建议的那样,您应该在此处丢失for
循环,并且您不需要调用try
调用。此外,如果您的文件包含一些将被解释为因子的列,则与将stringsafactors
设置为FALSE
的情况相比,执行速度可能会较慢:-P
library(dplyr)
library(readr)
# existing files
f <- intersect(FILELIST, list.files())
# or identically:
# f <- intersect(FILELIST, dir())
# f <- FILELIST[ file.exists(FILELIST) ]
# combine in a single dataset
d <- bind_rows(lapply(f, read_csv))