Не имеет ли больше смысла ставить next
вне tryCatch
на основе проверки if
? Примерно так:
for (i in c(1,2,Inf)) {
rs <- tryCatch(seq(i), finally=print('whoops'), error=function(e) NULL)
if (is.null(rs)){
print("I found an error!")
}
else{
next
}
}
хотя я не уверен, что это то, что вы хотите, так как мне немного непонятно, что вы пытаетесь сделать.
EDIT
Исходя из пересмотров ФП, эта формулировка работает для меня:
plotFn <- function(fname,i){
png(fname, width=400, height=200)
plot(i)
dev.off()
}
for (i in c(1,Inf,3)) {
fname = paste('f', i, '.png',sep="")
rs <- tryCatch(plotFn(fname,i), error=function(e){dev.off(); return(NULL)})
if (is.null(rs)){
print("I'll create a different picture because of the error.")
}
else{
print(paste('image', fname, 'created'))
next
}
}
Я уверен, что в случае ошибки не нужно было вызывать dev.off()
в случае ошибки. Мне нужно было бы покопаться немного глубже, чтобы понять, почему именно разделение png
и plot
вызывает проблемы. Но я думаю, что, возможно, в любом случае лучше сохранить последовательность png(); plot(); dev.off()
самодостаточной. Также обратите внимание, что я вставил dev.off()
в функцию ошибки.
Я не проверял, что произойдет, если plotFn
выдаст ошибку на png()
, никогда не создаст устройство, а затем достигнет функции ошибки и вызовет dev.off()
. Поведение может зависеть от того, что еще у вас происходит в вашей R-сессии.