我有一个存储在对象FILELIST
中的15个文件的列表。任务是从特定目录中读取FILELIST
中的所有文件,并在另一个下面附加一个文件。
在下面的代码中,对象名为' dataset'将有最后的附加文件。我面临的问题是如果目录中不存在FILELIST
中的一个或多个文件,我收到如下错误。我需要的是,如果目录中不存在15个文件中的一个或多个,则代码应继续附加其余文件。
我尝试使用try
异常处理方法,但仍然遇到错误,代码也没有处理其余的文件。
文件错误(文件," rt"):无法打开连接 另外:警告信息: 在文件(文件," rt")中: 无法打开文件' PREDICTION_2016_Q4_Wk13.csv':没有这样的文件或目录
代码:
for (file in FILELIST) {
try(
if (!exists("dataset")) {
dataset <- read.table(file, header=TRUE, sep=",")
}
if (exists("dataset")) {
temp_dataset <-read.table(file, header=TRUE, sep=",")
dataset<-rbind(dataset, temp_dataset)
rm(temp_dataset)
},
silent = T
)
}
答案 0 :(得分:0)
我不会为此使用异常处理。而是做这样的事情:
for (file in intersect(FILELIST, list.files())) {
答案 1 :(得分:0)
首先使用file.exists
和Filter
将FILELIST
缩减为现有的rbind
,然后在结尾处阅读每个FILELIST
和FILELIST
。
请注意,这适用于do.call("rbind", lapply(Filter(file.exists, FILELIST), read.csv))
包含当前目录中文件名的情况,如果文件位于其他位置并且background-size: 100%;
中指定了路径/文件名,则也可以。
没有使用任何包裹。
$logger = new StreamHandler(__DIR__.'/my_app.log');
$logger->setFormatter( new JsonFormatter() );
$logger->pushHandler($logger);
更新:改进了代码。
答案 2 :(得分:0)
另外两个答案的组合,使用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))