如何将基于外部数据的变量添加到表格{tables}汇总表中

时间:2014-07-16 15:16:56

标签: r latex multiple-columns knitr tabular

是否可以根据具有tabular()的外部对象将行(或列)添加到摘要表中?

这有效:

tabular( (Sepal.Width+Petal.Width) ~ (n=1) + Format(digits=2)*(Species)*(mean + sd), data=iris )

这不是:

var <- names(iris)[c(2,4)]
tabular( (var) ~ (n=1) + Format(digits=2)*(Species)*(mean + sd), data=iris )

是否有一种简单的方法可以使用另一个对象选择变量,还是我真的必须通过他们的名字来调用它们?

免责声明:我是乳胶和包装{tables}的新手,所以请原谅我的天真。

2 个答案:

答案 0 :(得分:3)

试试这个:

tabular( parse(text = paste(var, collapse = "+")) ~ (n=1) + Format(digits=2)*(Species)*(mean + sd), data=iris )

然后你会得到

                 Species                                    
                 setosa       versicolor      virginica     
             n   mean    sd   mean       sd   mean      sd  
 Sepal.Width 150 3.43    0.38 2.77       0.31 2.97      0.32
 Petal.Width 150 0.25    0.11 1.33       0.20 2.03      0.27

答案 1 :(得分:0)

您可以从字符串构造公式,然后将其传递给tabular函数:

tmp <- as.formula( paste( paste(var, collapse = "+"), "~ (n=1) + Format(digits=2)*(Species)*(mean + sd)") )
tabular(tmp, data=iris)

如果你想避免paste和任何类型的字符表示,那么这是另一个有效的选项(但对于大多数简单的表来说可能有点过分):

library(tables)
var <- names(iris)[c(2,3,4)]
form <- (var) ~ (n=1) + Format(digits=2)*(Species)*(mean + sd)
tmpfun <- function(a,b) {
    if( is.character(a) ) {
        substitute( `+`(aa,bb), list(aa=as.name(a),bb=as.name(b)) )
    } else {
        substitute( `+`(aa,bb), list(aa=a, bb=as.name(b)) )
    }
}
form[[2]] <- Reduce(tmpfun, var)

tabular( form, data=iris )