handling - Saltarse el error en for-loop
r if error skip (2)
Estoy haciendo un ciclo for para generar 180 gráficos para mi matriz 6000 X 180 (1 gráfico por columna), algunos de los datos no se ajustan a mis criterios y me aparece el siguiente error:
"Error in cut.default(x, breaks = bigbreak, include.lowest = T)
''breaks'' are not unique".
Estoy de acuerdo con el error, quiero que el programa continúe ejecutando el ciclo for, y me proporcione una lista de las columnas que hicieron este error (como una variable que contenga los nombres de las columnas ¿quizás?).
Aquí está mi comando:
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()
}
Nota: he encontrado numerosas publicaciones sobre tryCatch y ninguna de ellas me ha funcionado (o al menos no pude aplicar la función correctamente). El archivo de ayuda tampoco fue muy útil.
La ayuda sería apreciada Gracias.
En lugar de detectar el error, ¿no sería posible probar myplotfunction()
o antes la función myplotfunction()
si el error ocurrirá (es decir, si los cortes son únicos) y solo trazarlo para aquellos casos en que no aparezca? !
Una forma (sucia) de hacerlo es usar tryCatch
con una función vacía para el manejo de errores. Por ejemplo, el siguiente código genera un error y rompe el ciclo:
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 !
Pero puede ajustar sus instrucciones en un tryCatch
con una función de manejo de errores que no hace nada, por ejemplo:
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
Pero creo que al menos debería imprimir el mensaje de error para saber si algo malo sucedió al permitir que su código continúe ejecutándose:
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
EDITAR: Entonces aplicar tryCatch
en su caso sería algo así como:
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")})
}