我要从ANOVA表列表中提取F Value
。
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]
以更优雅的方式完成任务。感谢
答案 0 :(得分: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
您还可以使用sapply
作为列表summary.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
答案 1 :(得分:2)
对于此类任务,*apply
系列函数是您的朋友:
sapply(summary.aov(fit), "[", -4, 4)
这并不是很明显,但“[”是在R中使用[]后面真正落后的函数(它的第一个参数是你想要子集的对象 - 见?"["
),其他参数是也传递给了这个函数。
作为不需要这种知识的替代方案:
sapply(summary.aov(fit), function(cursummary){cursummary[-4,4]})