Estoy usando dlply() con una función personalizada que promedia inclinaciones de lm() se ajusta a datos que contienen algunos valores NA, y me sale el error "error en lm.fit (x, y, compensado = offset, singular.ok = singular.ok, ...): 0 casos (no-NA)"lm llamado desde dentro arroja el error "0 (no NA) casos" [r]
Este error sólo ocurre cuando llamo dlply con dos variables clave, la separación por una variable funciona bien.
Annoyingly no puedo reproducir el error con un conjunto de datos simple, así que he publicado el conjunto de datos del problema en mi dropbox.
Aquí está el código, ya que reduce al mínimo posible sin dejar de producir un error:
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
Gracias de antemano por cualquier idea.
Yo diría que el error es informativo. Si miras los valores en cada subconjunto de tus datos, supongo que encontrarás un subconjunto de todos los 'NA'. Intente reemplazar su llamada de lm en su función con algo que pueda identificar 'all (is.na())'. – Justin