Sweave 和 Matrix

Sweave 和 Matrix

我正在使用 xtable 生成矩阵

x1mean <- matrix(c(204.5, 556.5), 2)
x2mean <- matrix(c(130.0, 355.0), 2)
x1mmat <- xtable(x1mean, align = rep( "", ncol(x1mean) + 1) )
x2mmat <- xtable(x2mean, align = rep( "", ncol(x2mean) + 1) )
print(x1mmat, floating=FALSE, tabular.environment="bmatrix", hline.after=NULL, include.rownames=FALSE, include.colnames=FALSE)
print(x2mmat, floating=FALSE, tabular.environment="bmatrix", hline.after=NULL, include.rownames=FALSE, include.colnames=FALSE)

它确实生成了漂亮的矩阵,但我无法找到一种方法将 Matrix 变量放在它旁边,而且对于多个矩阵也是如此。类似于:

    X = []  Y = []  
    Z = []

其中 X、Y 和 Z 是矩阵变量。它们上面可能有条形图(表示平均值),可以是粗体,矩阵本身可能是 nXm 维。此外,当我打印时,我必须将打印语句放在方程/数学环境中,否则我会收到来自 Sweave 的错误。这也有一个限制,即以下序列不起作用:

  1. 在 latex 中写入 X,打开数学环境,在 R 环境中打印矩阵,关闭数学环境
  2. 在 latex 中写入 Y,打开数学环境,在 R 环境中打印矩阵,关闭数学环境

我想避免对矩阵进行硬编码,并且我想使用与计算其他结果(如协方差、相关性等)时相同的矩阵变量。本质上,我试图描述我的输入,即矩阵变量,然后描述我的计算,最后放置结果。我试图用变量来完成所有这些工作。

这可能吗?如果不是 Sweave,knitr 有这些功能吗?我听说过 knitr,但没有用过,但如果 knitr 有解决方案,我很乐意学习。

仅供参考,我的环境是 RStudio 和 R 的最新发布版本。

编辑

感谢 Aaron 的帮助。以下是生成用于打印矩阵的乳胶代码的函数:

<<echo=False>>=
x1mean <- matrix(c(204.5, 556.5), 2)
@

Some blah.. blah...

<<echo=False, results=tex>>=
  matgen <- function(mat) {
  mattable <- table(mat, align = rep("", ncol(mat) + 1) )
  mattex <- print(x1mmat, floating = FALSE, tabular.environment = "bmatrix", print.results=FALSE, hline.after = NULL, include.rownames = FALSE, include.colnames = FALSE)
  mattex <- gsub("\\", "\\\\", mattex, fixed=TRUE)
  return (mattex)
}
@

$\Sexpr{matgen(x1mean)}$

$% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Tue Sep 18 11:41:40 2012
\begin{bmatrix}{}
  204.50 \\
  556.50 \\
  \end{bmatrix}
$

它仍然保留的一件事是 xtable 生成的注释。我不知道作者为什么坚持保留注释。

答案1

您的建议非常接近;您只需要在写入 X 或 Y 之前打开数学环境。要记住的是,Sweave 只会用该代码块的结果替换代码块,因此您只需决定希望 LaTeX 代码的外观,然后用 Sweave 块替换相应的部分。有时使用 Sweave 块直接从 Sweave 块输出 LaTeX 代码也更容易cat(如果您需要反斜杠,则需要将其加倍。)下面的示例显示了这两种方法;结果是两个相邻的矩阵。

\[A=
<<results=tex, echo=FALSE>>=
print(x1mmat, floating=FALSE, tabular.environment="bmatrix", hline.after=NULL, include.rownames=FALSE, include.colnames=FALSE)
@ 
<<results=tex, echo=FALSE>>=
cat("\\hat B=")
print(x2mmat, floating=FALSE, tabular.environment="bmatrix", hline.after=NULL, include.rownames=FALSE, include.colnames=FALSE)
@ 
\]

相关内容