R,以编程方式给出列的名称

时间:2012-03-23 12:47:13

标签: r

我有一个函数为特定列做一个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]]

2 个答案:

答案 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'参数。