J'ai un problème: j'exécute une boucle pour traiter plusieurs fichiers. Mes matrices sont énormes et donc je manque souvent de mémoire si je ne fais pas attention.
Existe-t-il un moyen de sortir d'une boucle si des avertissements sont créés? Il continue simplement à exécuter la boucle et signale qu'il a échoué beaucoup plus tard ... ennuyeux. Des idées, oh sages stackoverflow-ers?!
Vous pouvez transformer les avertissements en erreurs avec:
options(warn=2)
Contrairement aux avertissements, les erreurs interrompent la boucle. Bien, R vous signalera également que ces erreurs particulières ont été converties à partir d'avertissements.
j <- function() {
for (i in 1:3) {
cat(i, "\n")
as.numeric(c("1", "NA"))
}}
# warn = 0 (default) -- warnings as warnings!
j()
# 1
# 2
# 3
# Warning messages:
# 1: NAs introduced by coercion
# 2: NAs introduced by coercion
# 3: NAs introduced by coercion
# warn = 2 -- warnings as errors
options(warn=2)
j()
# 1
# Error: (converted from warning) NAs introduced by coercion
R vous permet de définir un gestionnaire de conditions
x <- tryCatch({
warning("oops")
}, warning=function(w) {
## do something about the warning, maybe return 'NA'
message("handling warning: ", conditionMessage(w))
NA
})
ce qui se traduit par
handling warning: oops
> x
[1] NA
L'exécution se poursuit après tryCatch; vous pouvez décider de terminer en convertissant votre avertissement en erreur
x <- tryCatch({
warning("oops")
}, warning=function(w) {
stop("converted from warning: ", conditionMessage(w))
})
ou gérer la condition avec élégance (poursuite de l'évaluation après l'appel d'avertissement)
withCallingHandlers({
warning("oops")
1
}, warning=function(w) {
message("handled warning: ", conditionMessage(w))
invokeRestart("muffleWarning")
})
qui imprime
handled warning: oops
[1] 1
Définissez l'option globale warn
:
options(warn=1) # print warnings as they occur
options(warn=2) # treat warnings as errors
Notez qu'un "avertissement" n'est pas une "erreur". Les boucles ne se terminent pas pour les avertissements (à moins que options(warn=2)
).