Je suis en train de faire une boucle for pour générer 180 graphiques pour ma matrice 6000 X 180 (1 graphique par colonne), certaines données ne correspondent pas à mes critères et le message d'erreur suivant s'affiche:
"Error in cut.default(x, breaks = bigbreak, include.lowest = T)
'breaks' are not unique".
Je suis d'accord avec l'erreur, je veux que le programme continue à exécuter la boucle for, et me donne une liste des colonnes qui ont provoqué cette erreur (en tant que variable contenant des noms de colonnes, peut-être?).
Voici ma commande:
for (v in 2:180){
mypath=file.path("C:", "file1", (paste("graph",names(mydata[columnname]), ".pdf", sep="-")))
pdf(file=mypath)
mytitle = paste("anything")
myplotfunction(mydata[,columnnumber]) ## this function is defined previously in the program
dev.off()
}
Remarque: j'ai trouvé de nombreux articles sur tryCatch et aucun d'eux ne fonctionnait pour moi (ou du moins, je ne pouvais pas appliquer la fonction correctement). Le fichier d'aide n'a pas été très utile aussi.
Une aide serait appréciée. Merci.
Une façon (sale) de le faire est d'utiliser tryCatch
avec une fonction vide pour la gestion des erreurs. Par exemple, le code suivant génère une erreur et rompt la boucle:
for (i in 1:10) {
print(i)
if (i==7) stop("Urgh, the iphone is in the blender !")
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
Erreur : Urgh, the iphone is in the blender !
Mais vous pouvez envelopper vos instructions dans un tryCatch
avec une fonction de gestion des erreurs qui ne fait rien, par exemple:
for (i in 1:10) {
tryCatch({
print(i)
if (i==7) stop("Urgh, the iphone is in the blender !")
}, error=function(e){})
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
Mais je pense que vous devriez au moins imprimer le message d'erreur pour savoir si quelque chose de grave s'est passé en laissant votre code continuer à s'exécuter:
for (i in 1:10) {
tryCatch({
print(i)
if (i==7) stop("Urgh, the iphone is in the blender !")
}, error=function(e){cat("ERROR :",conditionMessage(e), "\n")})
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
ERROR : Urgh, the iphone is in the blender !
[1] 8
[1] 9
[1] 10
EDIT: Donc, appliquer tryCatch
dans votre cas serait quelque chose comme:
for (v in 2:180){
tryCatch({
mypath=file.path("C:", "file1", (paste("graph",names(mydata[columnname]), ".pdf", sep="-")))
pdf(file=mypath)
mytitle = paste("anything")
myplotfunction(mydata[,columnnumber]) ## this function is defined previously in the program
dev.off()
}, error=function(e){cat("ERROR :",conditionMessage(e), "\n")})
}
Au lieu de détecter l'erreur, ne serait-il pas possible de tester d'abord ou avant la fonction myplotfunction()
si l'erreur se produira (c'est-à-dire si les coupures sont uniques) et de la tracer uniquement dans les cas où elle a été gagnée n'apparaît pas?