【发布时间】:2019-03-01 07:36:31
【问题描述】:
我正在尝试编写一个清理电子表格的函数。但是,某些电子表格已损坏,无法打开。我希望函数能够识别这一点,打印一条错误消息,并跳过函数其余部分的执行(因为我使用lapply() 来遍历文件),然后继续。我当前的尝试如下所示:
candidate.cleaner <- function(filename){
#this function cleans candidate data spreadsheets into an R dataframe
#dependency check
library(readxl)
#read in
cand_df <- tryCatch(read_xls(filename, col_names = F),
error = function (e){
warning(paste(filename, "cannot be opened; corrupted or does not exist"))
})
print(filename)
#rest of function
cand_df[1,1]
}
test_vec <- c("test.xls", "test2.xls", "test3.xls")
lapply(FUN = candidate.cleaner, X = test_vec)
但是,当给定一个不存在的 .xls 文件时,这仍然会在 tryCatch 语句之后执行函数行,这会引发停止,因为我试图索引一个不存在的数据帧。这将退出 lapply 调用。如何编写tryCatch 调用以使其跳过函数其余部分的执行而不退出lapply?
【问题讨论】:
-
一种选择可能是改用
try,这将返回一个您可以检查的值,然后将您的代码分支。 purrr 中存在类似的东西,safely。 -
成功了,谢谢!
标签: r error-handling try-catch lapply