Примените xtable() к списку таблиц и создайте PDF-файл с помощью Knitr в R-studio.

Я хочу преобразовать список таблиц в Latex с помощью xtable() и создать PDF-файл с помощью Knitr в R-studio.

Я пытался использовать 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}

Но Латекс этого не примет. Я предполагаю, что это из-за имен списков, таких как $1 и $2 и так далее. Этот вопрос xtable output для списка таблиц объясняет способ сделать это, но я надеялся, что есть менее сложный способ сделать это?


person Rasmus Larsen    schedule 13.04.2013    source источник
comment
Я делаю это прямо в Knitr.   -  person Rasmus Larsen    schedule 13.04.2013


Ответы (1)


Я не решаюсь опубликовать это, потому что это мало что добавляет к связанному вопросу, которым вы поделились...

Просто измените llply(...) на l_ply и убедитесь, что параметры чанка для xtable установлены на что-то вроде <<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_ply и l_ply), когда это уместно. От файла справки до l_ply Все выходные данные отбрасываются. Это полезно для функций, которые вы вызываете исключительно из-за их побочных эффектов, таких как отображение графиков или сохранение выходных данных.
person A5C1D2H2I1M1N2O1R2T1    schedule 13.04.2013
comment
Спасибо, но я не могу заставить его работать. Когда я вставляю ваш код в документ R-sweave в R-studio и нажимаю «Скомпилировать PDF», я просто получаю пустой PDF-файл (он пустой, кроме asdf, который я добавил после \begindocument, чтобы он мог скомпилироваться). Можете ли вы создать PDF с этим? - person Rasmus Larsen; 13.04.2013
comment
Отличная идея! Это сработало с командой print()! Я читал на странице Knitr, что print() не нужен, но, видимо, иногда он все еще нужен :) - person Rasmus Larsen; 14.04.2013
comment
@RasmusLarsen, print требуется здесь l_ply, чтобы заставить результирующий вывод быть printed в обычном сеансе R, поэтому он потребуется knitr - person mnel; 15.04.2013
comment
@mnel, я думаю, что мои первоначальные успехи без print могли быть как-то связаны с файлами, лежащими в моем каталоге. Спасибо за разъяснения. - person A5C1D2H2I1M1N2O1R2T1; 15.04.2013