#r
#r
Вопрос:
У меня есть вариант использования, когда мне нужен некоторый поток управления, основанный на количестве предупреждений, сгенерированных некоторым фрагментом кода:
# clear all warnings
assign("last.warning", NULL, envir = baseenv())
for (i in 0:100) {
# call warning-generating code here
x <- warnings()
cat(paste('There were',length(x),'warnings generatedn'))
if (length(x)>10) {
# do something
}
# clear all warnings again
assign("last.warning", NULL, envir = baseenv())
}
По какой-то причине этот код не работает. Код всегда будет выдавать There were 0 warnings generated
… почему? Если я запускаю рассматриваемый код генерации предупреждений вне цикла, он выдает ненулевое переменное количество предупреждений…
Комментарии:
1. Прочитайте
help("options")
(прокрутите доwarn
опции).last.warning
Объект создается только тогда, когда возвращается функция верхнего уровня (здесьfor
цикл). Я бы, вероятно, изучилtryCatch
и связанные функции (см.help("tryCatch")
), чтобы решить эту проблему.
Ответ №1:
Не уверен, что это то, к чему вы стремитесь?
# clear all warnings
assign("last.warning", NULL, envir = baseenv())
x <- rep(NA, 100)
for (i in 1:100) {
# call warning-generating code here
x[i] <- warning()
cat(paste('There were',sum(!is.na(x)),'warnings generatedn'))
if (sum(!is.na(x))>10) {
# do something
}
# clear all warnings again
assign("last.warning", NULL, envir = baseenv()
}
Похоже на опечатку — afaik warnings () просто покажет вам предупреждения, которые все еще равны нулю на этом этапе цикла; warning() сгенерирует.