我有一个函数为特定列做一个ANOVA(这个代码被简化了,我的代码也做了一些其他相关的事情,我为不同的列做了这组计算,所以它值得一个函数)。 alz
是我的数据框。
analysis <- function(column) {
print(anova(lm(alz[[column]] ~ alz$Category)))
}
我称之为:
analysis("VariableX")
然后在输出中我得到:
Analysis of Variance Table
Response: alz[[column]]
Df Sum Sq Mean Sq F value Pr(>F)
alz$Category 2 4.894 2.44684 9.3029 0.0001634 ***
Residuals 136 35.771 0.26302
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
如何使输出显示列名而不是alz[[column]]
?
答案 0 :(得分:9)
以下是一个例子:
> f <- function(n) {
+ fml <- as.formula(paste(n, "~cyl"))
+ print(anova(lm(fml, data = mtcars)))
+ }
>
> f("mpg")
Analysis of Variance Table
Response: mpg
Df Sum Sq Mean Sq F value Pr(>F)
cyl 1 817.71 817.71 79.561 6.113e-10 ***
Residuals 30 308.33 10.28
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
答案 1 :(得分:1)
analysis <- function(column) {
afit <- anova(lm( alz[[column]] ~ alz$Category))
attr(afit, "heading") <- sub("\\: .+$", paste(": ", column) , attr( afit, "heading") )
print(afit)
}
anova对象在名为“heading”的属性中携带其“Response:”值。建议您以@kohske所示的方式使用lm
的'data'参数。