2010-12-05 34 views
8

Actualmente estoy ejecutando ANOVA para un proyecto en la escuela que tiene una gran cantidad de ejecuciones posibles (1400 o más) pero algunas de ellas no pueden ejecutar ANOVA en R. Escribí un script para ejecutar todas las ANOVA, pero algunos de ellos no se ejecutarán y el archivo Rout me da Error en contrasts<- (*tmp*, value = "contr.treatment"): contrastes se pueden aplicar solo a factores con 2 o más niveles Llamadas: aov ... modelo. matrix -> model.matrix.default -> contrastes < - Ejecución detenida¿Hay alguna forma de que la secuencia de comandos R continúe después de recibir mensajes de error en lugar de detener la ejecución?

¿Hay alguna forma de escribir el script que hará que R continúe el guión a pesar del error?

Mi toda la escritura, otro entonces el archivo de carga, adjuntando, la creación de un fregadero, la carga de la biblioteca, etc ... es

ss107927468.model<-aov(Race.5~ss107927468, data=snp1) 
summary(ss107927468.model) 

Cualquier ayuda se agradece.

+0

Algunas de las respuestas nuevas de hoy. O bien http://stackoverflow.com/a/14612524/403310 (en bucle 'try (eval (...)) 'en cada expresión en el resultado de' parse ("file.R") ', o http: // stackoverflow.com/a/14613363/403310 (el paquete 'evaluate'). –

Respuesta

8

Consulte la función try() y su página de ayuda (?try). Envuelve su expresión R en una llamada try() y si tiene éxito, el objeto resultante contiene, en este caso, el modelo ajustado. Si falla, se devuelve un objeto con la clase "try-error". Esto le permite verificar fácilmente qué modelos funcionaron y cuáles no.

Usted puede hacer la prueba para decidir si se debe imprimir el resumen para el modelo o simplemente un mensaje de fallo, por ejemplo .:

ss107927468.model <- try(aov(Race.5~ss107927468, data=snp1)) 
if(isTRUE(all.equal(class(ss107927468.model), "try-error"))) { 
    writeLines("Model failed") 
} else { 
    summary(ss107927468.model) 
} 
+0

Actualización rápida: parece que, a partir del 2013-02-12, la clase de un objeto 'try' que ha fallado es' try-error'. –

+0

@Fr. Gracias por eso. No creo que esto haya cambiado, así que tal vez estaba confundiendo esto con 'tryCatch()'? De todos modos, gracias por señalar el problema. –

+0

'try()' se presenta más o menos como un contenedor más simple para 'tryCatch', por lo que debería ser el mismo objeto. Pero en realidad no es:' x <- try (stop (e)) 'devuelve un objeto de clase' try-error', y 'x <- tryCatch (stop (e), error = function (e) e) 'devuelve un objeto de clase' c ("simpleError", "error", "condición"). Estoy un poco perdido en todo eso, hablar francamente :) –

1

Las funciones try() y primos que están vinculados desde la página de ayuda para try() le permitirán probar una condición de error, tomar las medidas apropiadas como escribir en un registro de errores (o no hacer nada) y proceder con gracia .

4

utilizo failwith en el paquete plyr. Puede usar esto en combinación con llply y ajustar su función alrededor.

+0

Sí, así es como generalmente abordo estos problemas también. El [tutorial plyr] (http://had.co.nz/plyr/plyr-intro-090510.pdf) tiene un buen ejemplo usando 'faithwith'. – Chase

Cuestiones relacionadas