问题在 R 中使用 try 来捕获导入文件的错误

Sam*_*ert 1 r try-catch

我在 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()语句在日志中产生了一个错误,这是我试图避免的。

谢谢

fde*_*sch 7

尝试通过指定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)