我有以下代码创建一个包含多个图的PDF。在代码中,"文件"包含我在lapply()中循环的所有数据集的名称。
pdf(file="plot.pdf")
par(mfrow=c(3,3), oma=c(1,1,8,1))
Test <- lapply(1:length(files), function(x) {
a <- as.data.table(read.csv(files[x], header = TRUE))
plot(col 1 ~ col 2, a, main = paste("R=", summary(lm(col 1 ~ col 2, a))$adj.r.squared))
abline(lm(col 1 ~ col 2, a), col = "red")
})
dev.off()
如果所有数据集都有值,则此代码有效。遇到空数据集时,线性模型函数[lm()]会给出以下错误并停止循环。
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (non-NA) cases
PDF将被导出但仅包含错误之前的图。有没有办法可以忽略错误,以便代码继续循环其余的数据集(可能实际上有数据)?
答案 0 :(得分:2)
一个简单的方法是将有问题的代码包装在try语句中:
pdf(file="plot.pdf")
par(mfrow=c(3,3), oma=c(1,1,8,1))
Test <- lapply(1:length(files), function(x) {
a <- as.data.table(read.csv(files[x], header = TRUE))
try({
plot(col 1 ~ col 2, a, main = paste("R=", summary(lm(col 1 ~ col 2, a))$adj.r.squared))
abline(lm(col 1 ~ col 2, a), col = "red")
}, silent = TRUE)
})
dev.off()
try
将指示R运行表达式中详细说明的代码。 silent = TRUE
参数将指示R禁止任何错误。