我使用 xtable 将 r 表转换为可操作的乳胶代码。
<<echo=false>>=
attach(warpbreaks)
p2 <- round(tapply(breaks, list(tension), mean), digits=2) %>%
as.table(.)
@
p2 如下所示:
L M H
36.39 26.39 21.67
但是此代码创建的pdf的输出:
<<echo=false, results=tex>>=
library("xtable")
xtable(p2,
align = "rr")
@
看起来(大约)像这样:
x
L 36.39
M 26.39
H 21.67
为什么它看起来不像 r 中的初始表以及我该如何修复它?
编辑:这是我通过此获得的 Tex 代码
\begin{table}[ht]
\centering
\begin{tabular}{rr}
\hline
& . \\
\hline
L & 36.39 \\
M & 26.39 \\
H & 21.67 \\
\hline
\end{tabular}
\end{table}
答案1
当您xtable
在类型对象上应用时,将调用table
该xtable.table
方法。此方法定义如下(使用 获取的代码getAnywhere(xtable.table)
):
function (x, caption = NULL, label = NULL, align = NULL, digits = NULL,
display = NULL, auto = FALSE, ...)
{
if (length(dim(x)) == 1) {
return(xtable.matrix(matrix(x, dimnames = list(rownames(x),
names(dimnames(x)))), caption = caption, label = label,
align = align, digits = digits, display = display,
auto = auto, ...))
}
else if (length(dim(x)) == 2) {
return(xtable.matrix(matrix(x, ncol = dim(x)[2], nrow = dim(x)[1],
dimnames = list(rownames(x), colnames(x))), caption = caption,
label = label, align = align, digits = digits, display = display,
auto = auto, ...))
}
else {
stop("xtable.table is not implemented for tables of > 2 dimensions")
}
}
因此,表格被转换为矩阵,然后xtable
在矩阵上调用。将列表转换为矩阵时,值将显示在列中:
> matrix(p2,dimnames=list(rownames(p2)))
[,1]
L 36.39
M 26.39
H 21.67
要更改输出,您可以使用 转置表格t()
。为此,无需使用as.table
,您可以直接转置 的结果tapply
。
转置函数[1,]
在输出中创建一个行名。要删除它,您可以使用include.rownames=FALSE
。此选项是的参数print.xtable
,不是本身xtable
。因此,您需要print
在代码中明确使用该函数。
R代码:
p2 <- round(tapply(breaks, list(tension), mean), digits=2)
p2trans <- t(p2)
p2tab <- xtable(p2trans)
print(p2tab,include.rownames=FALSE)
完整 MWE:
\documentclass{article}
\begin{document}
<<echo=FALSE,results='asis'>>=
library(xtable)
attach(warpbreaks)
p2 <- round(tapply(breaks, list(tension), mean), digits=2)
p2trans <- t(p2)
p2tab <- xtable(p2trans)
print(p2tab,include.rownames=FALSE)
@
\end{document}
结果: