R的try()不会捕获file.remove()产生的错误

时间:2016-11-10 15:24:51

标签: r try-catch

我正在尝试捕获file.remove()引发的错误,例如当打开Excel文件时因此无法删除。 似乎R的try()函数在这种情况下不起作用。虽然参数silent设置为TRUE并且没有任何内容存储到变量中,但以下代码仍然会向控制台生成错误:

removal.error <- try(file.remove("testfile.xlsx"), silent = T)
  

removal.error   [1]错误

为什么会出现这种错误的原因或解决办法?

1 个答案:

答案 0 :(得分:1)

trytryCatch函数也没有捕获任何错误,因为remove.file函数正常工作(如@Bhas所说)并且它会抛出FALSE值可用于处理错误,如下所示:

write.csv2(x = data.frame(V1 = 1:10, V2 = letters[1:10]),
           file = 'file.csv')

shell('start excel file.csv') # opens excel to throw the error

rem <- try(file.remove('file.csv'))
rem # [1] FALSE

if (rem == FALSE) {
  shell('taskkill /F /IM excel.exe') # handle the error you pointed us
  rem_2 <- file.remove('file.csv')
  if(rem_2 == FALSE) { # if this was not the case, warn the user
    warning(warnings())
    class(rem) <- c(class(rem), "try-error") # and add try-error class to 'rem'
  }
}

之后,您将能够按计划处理此问题。

OBS:逐行运行此代码,否则R将比excel更快,并且您不会在控制台中看到任何错误。