我在 R 中有一个进程,其中我在 R 中导入了许多文件。
有时,某些文件会出现问题,例如,我正在读取的文件中不存在 EOF 字符,因此 read.table 语句会出错。
由于有很多文件要处理,这很难手动管理,所以我想使用一些错误捕获来改变问题的用户并继续处理其他文件。
我曾尝试使用try并引用 SOF 帖子Excel IFERROR 的 R 等价物是什么?
下面我想测试导入,然后根据结果向用户提供一些消息或实际导入文件。
mtry <- try(read.table("~/file_location/test_file.csv",
fill = TRUE,
stringsAsFactors = FALSE))
if (!inherits(mtry, "try-error")) {
read.table("~/file_location/test_file..csv",
fill = TRUE,
stringsAsFactors = FALSE)
} else {
message("File doesn't exist, please check")
}
Run Code Online (Sandbox Code Playgroud)
问题是该try()语句在日志中产生了一个错误,这是我试图避免的。
谢谢
尝试通过指定try(..., silent = TRUE)来抑制错误消息的报告(另请参阅?try)。我用一个不存在的虚拟文件测试了下面的代码,使用if (class(mtry) != "try-error")它并且它工作正常。
some_dummy_file <- "data/dummy.csv"
mtry <- try(read.table(some_dummy_file, sep = ",", header = TRUE),
silent = TRUE)
if (class(mtry) != "try-error") {
read.table(some_dummy_file, sep = ",", header = TRUE)
} else {
message("File doesn't exist, please check")
}
Run Code Online (Sandbox Code Playgroud)
这是控制台输出。
> File doesn't exist, please check
Run Code Online (Sandbox Code Playgroud)