lm genannt von innen dlply wirft "0 (non-NA) Fällen" Fehler [r]
Ich bin mit dlply() ist eine benutzerdefinierte Funktion, die Durchschnittswerte hängen von lm() passt auf die Daten enthalten NA Werte, und ich bekomme die Fehlermeldung
"Fehler in der lm.fit(x, y, offset = offset in der Einzahl.ok = singular.ok, ...) :
0 (non-NA) Fällen"
Dieser Fehler passiert nur wenn ich call dlply mit den beiden key-Variablen - Trennung durch eine variable funktioniert.
Dummerweise kann ich den Fehler reproduzieren mit einem einfachen Datensatz, so dass ich gepostet habe das problem dataset in meine dropbox.
Hier ist der code, so minimiert wie möglich, während immer noch einen Fehler erzeugt:
masterData <- read.csv("http://dl.dropbox.com/u/48901983/SOquestionData.csv", na.strings="#N/A")
workingData <- data.frame(sample = masterData$sample,
substrate = masterData$substrate,
el1 = masterData$elapsedHr1,
F1 = masterData$r1 - masterData$rK)
#This function is trivial as written; in reality it takes the average of many slopes
meanSlope <- function(df) {
lm1 <- lm(df$F1 ~ df$el1, na.action=na.omit) #changing to na.exclude doesn't help
slope1 <- lm1$coefficients[2]
meanSlope <- mean(c(slope1))
}
lsGOOD <- dlply(workingData, .(sample), meanSlope) #works fine
lsBAD <- dlply(workingData, .(sample, substrate), meanSlope) #throws error
Dank im Voraus für jede Einsicht.
- Ich würde sagen, dass der Fehler ist informativ. Wenn man sich die Werte in jeder Teilmenge der Daten, ich nehme an, Sie finden eine Teilmenge aller
NA
. Versuchen Sie ersetzen Ihre Film-nennen Sie in Ihrer Funktion mit etwas identifizieren können, dassall(is.na())
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Ihrer cross-Klassifizierungen müssen Sie fehlende kovariablen:
Damit würden Sie überspringen die Teilmengen mit unzureichenden Daten im jeweiligen data:
Obwohl es hängt von der missingness als in einer bestimmten kovariable. Eine robustere Lösung wäre die Verwendung
try
zum erfassen von Fehlern und konvertieren zu NA ist.traceback()
.Als pro mein Kommentar:
Zeigt, dass Sie viele sub-sets, bei denen sowohl F1 und el1 sind NA. (in der Tat jedes mal, wenn man alle na, der andere ist so gut!)
dlply
ist nicht Schuld hier. es ist der Umgang jede Teilmenge unabhängig wie Sie es erwartet haben. allerdings, wenn Sie füttern eine Teilmengelm
das ist alles, NA es wird Fehler. Sie versucht, den Fall behandeln, wo einige Werte wurden mit NA richtig, aber Sie nicht ernähren könnenlm
eine leere Teilmenge, die ist, was Sie haben, wenn Siena.omit
eine Teilmenge mit allen NA. fügen Sie stattdessen eine Zeile wieif(all(is.na(df)) return(NA)
vor derlm
nennen.