1

我想使用 xtable() 将表格列表转换为 Latex,并在 R-studio 中使用 Knitr 创建一个 pdf。

我曾尝试在列表中使用 llply() 但它不起作用。

以下是表格列表:

library(plyr)
library(xtable)
Data <- data.frame(a=rbinom(100,1,0.5), b=rbinom(100,1,0.3), c=rbinom(100,1,0.6))
combos <- combn(ncol(Data),2)
TabelFn <- function(x) {
  Table <- addmargins(table(Data[, x[1]], Data[, x[2]]))
  return(Table)
}
Table <- alply(.data=combos, .margins=2, .fun=TabelFn, .expand=TRUE)

Table # list of tables

我试图在它上面运行 llply() :

llply(Table, function(x) {xtable(x)})

并得到了这个输出:

$`1`
% latex table generated in R 2.15.3 by xtable 1.7-1 package
% Sat Apr 13 19:45:40 2013
\begin{table}[ht]
\centering
\begin{tabular}{rrrr}
  \hline
 & 0 & 1 & Sum \\ 
  \hline
0 & 48.00 & 11.00 & 59.00 \\ 
  1 & 31.00 & 10.00 & 41.00 \\ 
  Sum & 79.00 & 21.00 & 100.00 \\ 
   \hline
\end{tabular}
\end{table}

$`2`
% latex table generated in R 2.15.3 by xtable 1.7-1 package
% Sat Apr 13 19:45:41 2013
\begin{table}[ht]
\centering
\begin{tabular}{rrrr}
  \hline
 & 0 & 1 & Sum \\ 
  \hline
0 & 27.00 & 32.00 & 59.00 \\ 
  1 & 21.00 & 20.00 & 41.00 \\ 
  Sum & 48.00 & 52.00 & 100.00 \\ 
   \hline
\end{tabular}
\end{table}

$`3`
% latex table generated in R 2.15.3 by xtable 1.7-1 package
% Sat Apr 13 19:45:41 2013
\begin{table}[ht]
\centering
\begin{tabular}{rrrr}
  \hline
 & 0 & 1 & Sum \\ 
  \hline
0 & 40.00 & 39.00 & 79.00 \\ 
  1 & 8.00 & 13.00 & 21.00 \\ 
  Sum & 48.00 & 52.00 & 100.00 \\ 
   \hline
\end{tabular}
\end{table}

但是 Latex 不会接受。我猜这是因为 $1和 $等列表名称2。这个问题xtable output for a list of tables解释了一种方法,但我希望有一种不太复杂的方法吗?

4

1 回答 1

3

我犹豫发布这个,因为它不会增加你分享的链接问题......

只需更改llply(...)l_ply确保xtables 的块选项设置为类似<<echo=FALSE, results='asis'>>=

我能够创建一个包含以下内容的 Rnw 文件,效果很好:

\documentclass{article}

\begin{document}

<<echo=FALSE>>=
library(plyr)
library(xtable)
Data <- data.frame(a=rbinom(100,1,0.5), b=rbinom(100,1,0.3), c=rbinom(100,1,0.6))
combos <- combn(ncol(Data),2)
TabelFn <- function(x) {
  Table <- addmargins(table(Data[, x[1]], Data[, x[2]]))
  return(Table)
}
Table <- alply(.data=combos, .margins=2, .fun=TabelFn, .expand=TRUE)
@

<<echo=FALSE, results='asis'>>=
l_ply(Table, function(x) { print(xtable(x)) })
@

\end{document}

有几点需要注意:

  • $是 LaTeX 中的一个特殊字符,因此在输出中包含它们会产生问题
  • alply并将llply显示输出,但您不希望这样,因此您应该在适当的时候使用_版本 (a_plyl_ply)。从帮助文件到l_ply所有输出都被丢弃。这对于您纯粹因为其副作用(例如显示绘图或保存输出)而调用的函数很有用。
于 2013-04-13T19:10:59.633 回答