是否可以根据具有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}
的新手,所以请原谅我的天真。
答案 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 )