Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:使用try()处理异常_R_Try Catch - Fatal编程技术网

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))