8

いくつかの NA 値を含むデータに適合する lm() の勾配を平均化するカスタム関数で dlply() を使用しています。 = singular.ok, ...) : 0 (非 NA) ケース"

このエラーは、2 つのキー変数を使用して dlply を呼び出した場合にのみ発生します。1 つの変数で区切ると問題なく動作します。

厄介なことに、単純なデータセットではエラーを再現できないため、問題のデータセットをドロップボックスに投稿しました。

エラーを生成しながら可能な限り最小化されたコードを次に示します。

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

洞察をお寄せいただきありがとうございます。

4

2 に答える 2

5

交差分類のいくつかで、共変量が欠落しています。

 with(masterData, table(sample, substrate, r1mis = is.na(r1) ) )
#
snipped the nonmissing reports
, , r1mis = TRUE

      substrate
sample 1 2 3 4 5 6 7 8
    3  0 0 0 0 0 0 0 0
    4  0 0 0 0 0 0 0 0
    5  0 0 0 0 0 0 0 0
    6  0 0 0 0 0 0 0 0
    7  0 0 0 0 0 0 3 3
    8  0 0 0 0 0 0 0 3
    9  0 0 0 0 0 0 0 3
    10 0 0 0 0 0 0 0 3
    11 0 0 0 0 0 0 0 3
    12 0 0 0 0 0 0 0 3
    13 0 0 0 0 0 0 0 3
    14 0 0 0 0 0 0 0 3

これにより、この特定のデータでデータが不十分なサブセットをスキップできます。

meanSlope <- function(df) { if ( sum(!is.na(df$el1)) < 2 ) { return(NA) } else {
     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)) }
}

欠落が特定の共変量にあることに依存しますが。より堅牢なソリューションは、tryエラーをキャプチャして NA に変換するために使用することです。

?try
于 2012-03-01T16:46:17.913 に答える
2

私のコメントによると:

my.func <- function(df) {
  data.frame(el1=all(is.na(df$el1)), F1=all(is.na(df$F1)))
}

ddply(workingData, .(sample, substrate), my.func)

F1 と el1 の両方が NA である多くのサブセットがあることを示しています。(実際、一方がすべてナになるたびに、もう一方も同様です!)

于 2012-03-01T16:46:00.147 に答える