2011-11-08 44 views
0

我必須從ANOVA表的列表中提取F ValueR中的系統列表索引

tear <- c(6.5, 6.2, 5.8, 6.5, 6.5, 6.9, 7.2, 6.9, 6.1, 6.3, 
     6.7, 6.6, 7.2, 7.1, 6.8, 7.1, 7.0, 7.2, 7.5, 7.6) 
gloss <- c(9.5, 9.9, 9.6, 9.6, 9.2, 9.1, 10.0, 9.9, 9.5, 9.4, 
     9.1, 9.3, 8.3, 8.4, 8.5, 9.2, 8.8, 9.7, 10.1, 9.2) 
opacity <- c(4.4, 6.4, 3.0, 4.1, 0.8, 5.7, 2.0, 3.9, 1.9, 5.7, 
     2.8, 4.1, 3.8, 1.6, 3.4, 8.4, 5.2, 6.9, 2.7, 1.9) 
Y <- cbind(tear, gloss, opacity) 
rate <- factor(gl(2,10), labels=c("Low", "High")) 
additive <- factor(gl(2, 5, length=20), labels=c("Low", "High")) 

fit <- manova(Y ~ rate * additive) 
summary.aov(fit) 

我可以用下面的代碼完成的任務:

summary.aov(fit)[[1]][-4,4] 
summary.aov(fit)[[2]][-4,4] 
summary.aov(fit)[[3]][-4,4] 

我不知道是否有一種方法這樣

summary.aov(fit)[[1:3]][-4,4] 

,以完成更優雅的方式任務。謝謝

回答

4

使用sapply橫跨包含數字向量的列表,即1:3

sapply(1:3, function(i) summary.aov(fit)[[i]][-4,4]) 
      [,1]  [,2]  [,3] 
[1,] 15.786848073 7.917808 0.1036289 
[2,] 6.897959184 3.729072 1.2076890 
[3,] 0.004535147 3.315068 0.9760335 

您也可以直接訪問變量,通過使用sapplysummary.aov這是一個列表。 F值是一個命名元素F value - 這包含空格,所以索引它,你必須將它包裝在反引號:

sapply(summary.aov(fit), function(x) x$`F value`) 

     Response tear Response gloss Response opacity 
[1,] 15.786848073  7.917808   0.1036289 
[2,] 6.897959184  3.729072   1.2076890 
[3,] 0.004535147  3.315068   0.9760335 
[4,]    NA    NA    NA 
+0

@編輯來說明如何直接訪問F值MYaseen208答案。 – Andrie

+0

謝謝你的幫助和很好的答案。 – MYaseen208

2

對於這種類型的任務,則*apply家庭的功能是你的朋友:

sapply(summary.aov(fit), "[", -4, 4) 

它是不是很明顯,但「[」是,確實是落後R中使用[]功能(和它的第一個參數是要子集的對象 - 見?"["),其他的參數傳遞這個功能也是如此。 由於不需要這方面的知識替代:

sapply(summary.aov(fit), function(cursummary){cursummary[-4,4]}) 
+0

+1感謝Nick Sabbe爲您提供的最佳答案。 – MYaseen208