Я использую dlply() с пользовательской функцией, которая усредняет наклоны lm() для данных, содержащих некоторые значения NA, и Я получаю ошибку "ошибка в lm.fit (х, у, смещение = смещение, singular.ok = singular.ok, ...): 0 (не NA) случаи"lm вызван изнутри dlply throws «0 (non-NA) cases» error [r]
Эта ошибка происходит только когда я вызываю dlply с двумя ключевыми переменными - разделение на одну переменную отлично работает.
Раздражающе, я не могу воспроизвести ошибку с помощью простого набора данных, поэтому я разместил набор данных проблем в своем Dropbox.
Вот код, как и свести к минимуму, насколько это возможно, все еще производит ошибку:
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
Заранее спасибо за любую проницательность.
Я бы сказал, что ошибка информативна. Если вы посмотрите на значения в каждом подмножестве своих данных, я предполагаю, что вы найдете одно подмножество всего 'NA'. Попробуйте заменить свой вызов lm в своей функции тем, что может идентифицировать 'all (is.na())'. – Justin