【发布时间】:2018-01-12 17:23:09
【问题描述】:
我试图明确说明长列表中哪个文件引发了错误。我尝试将for 循环包装在tryCatch() 中,但我无法获得我正在寻找的行为。我想要的结果是:如果文件i 抛出错误sprintf("Error: %s has a formatting problem", i)。
下面,我们创建一个包含三个文件的目录,其中两个应该被for 循环正确读取到一个列表中,一个会抛出错误,因为它是一个xlsx 文件。
请注意,下面的代码将创建和删除一个目录和三个文件
dir.create("Demo999")
setwd("Demo999")
write.csv(mtcars,"mtcars.csv")
xlsx::write.xlsx(mtcars,"mtcars.xlsx")
write.csv(mtcars,"mtcars2.csv")
files <- list.files()
data <- list()
for (i in files){
f <- read.csv(i)
data[[i]] <- f
}
# clean up generated files
setwd("..")
unlink("Demo999", recursive= TRUE, force= TRUE)
我想要的输出是:
“错误:mtcars.xlsx 有格式问题。”
此代码不会运行,而是一个示例 tryCatch 块:
tryCatch({
for (i in files){
f <- read.csv(i)
data[[i]] <- f
}
}, error = function() sprintf("Error: %s has a formatting problem", i))
【问题讨论】:
-
顺便说一句,我非常感谢您包含清理代码。
-
@Gregor 很高兴,很高兴为任何愿意花时间提供帮助的人提供更轻松的生活!
标签: r error-handling