2010-12-05 2 views
8

Ich führe gerade ANOVA für ein Projekt in der Schule, die eine große Anzahl von möglichen Läufen (1400 oder so) hat, aber einige von ihnen sind nicht in der Lage, ANOVA in R laufen. Ich schrieb ein Skript, um alle ANOVAs laufen einige von ihnen werden nicht ausgeführt und die Rout-Datei gibt mir Fehler in contrasts<- (*tmp*, Wert = "contr.treatment"): Kontraste können nur auf Faktoren mit 2 oder mehr Ebenen angewendet werden Aufrufe: aov ... Modell. matrix -> model.matrix.default -> kontraste < - Ausführung angehaltenGibt es eine Möglichkeit, das R-Skript nach dem Empfang von Fehlermeldungen fortzusetzen, anstatt die Ausführung anzuhalten?

Gibt es eine Möglichkeit, das Skript zu schreiben, das R das Skript trotz des Fehlers fortsetzen wird?

Mein ganzes Skript, andere dann das Laden von Dateien, das Anbringen, ein Waschbecken, eine Bibliothek Laden zu schaffen, etc ist ...

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

Jede Hilfe würde geschätzt.

+0

Einige neue Antworten heute. Entweder http://stackoverflow.com/a/14612524/403310 (geloopt 'try (eval (...))' für jeden Ausdruck im Ergebnis von 'parse (" file.R ")', oder http: // stackoverflow.com/a/14613363/403310 (das Paket 'evaluate') –

Antwort

8

Siehe die Funktion try() und es ist Hilfeseite (?try). Sie wickeln Ihren R-Ausdruck in einen -Aufruf ein und wenn es erfolgreich ist, enthält das resultierende Objekt in diesem Fall das angepasste Modell. Wenn dies fehlschlägt, wird ein Objekt mit der Klasse "try-error" zurückgegeben. So können Sie einfach überprüfen, welche Modelle funktionieren und welche nicht.

Sie können die Tests durchführen, um zu entscheiden, ob für das Modell aus der Zusammenfassung zu drucken oder zu einer Fehlermeldung nur, z.B .:

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

Kurzes Update: Es scheint, als ob die Klasse eines 'try'-Objekts, das fehlgeschlagen ist, seit 2013-02-12 'try-error' ist. –

+0

@Fr. Danke für das. Ich glaube nicht, dass sich das geändert hat und vielleicht habe ich das mit 'tryCatch()' verwechselt? Wie auch immer, danke für das Aufzeigen des Problems. –

+0

'try()' ist mehr oder weniger dargestellt als einfacherer Wrapper für 'tryCatch', also sollte es dasselbe Objekt sein, aber es ist eigentlich nicht:' x <- try (stop (e)) 'gibt ein Objekt der Klasse' try-error' zurück, und 'x <- tryCatch (stop (e), error = function (e) e) 'gibt ein Objekt der Klasse' c ("simpleError", "error", "condition") zurück. Ich bin ein bisschen verloren in all dem, um zu sprechen ehrlich :) –

1

Die Funktionen try() und cousins, die von der Hilfeseite für try() verlinkt sind, ermöglichen es Ihnen, auf einen Fehler zu testen, entsprechende Maßnahmen wie Schreiben in ein Fehlerprotokoll (oder gar nichts) zu ergreifen und ordnungsgemäß fortzufahren .

4

I failwith im plyr Paket verwenden. Sie können dies in Kombination mit llply verwenden und Ihre Funktion umschließen.

+0

Ja - so gehe ich normalerweise auch diese Probleme an. Das [plyr tutorial] (http://had.co.nz/plyr/plyr-intro-090510.pdf) hat ein paar schöne Beispiele mit 'faithwith'. – Chase

Verwandte Themen