Включая несколько таблиц в формате tex в мой основной документ - PullRequest
3 голосов
/ 21 марта 2012

Есть ли способ генерировать таблицы в формате tex в R и затем вызывать их в моем файле * .rnw Я должен создать много таблиц, используя некоторые пользовательские функции, а затем использовать их в моем латексном файле через sweave / knitr. Вот упрощенный пример, чтобы проиллюстрировать мою точку зрения ...

Данные:

x1 <- round(rnorm(10),2)
x2 <- sample(c('a','b','c'),10,replace=TRUE)

data1 <- cbind(x1,noquote(x2));data1 <- as.data.frame(data1)
names(data1)=c('X1','X2')

Теперь я хочу поместить это data1 в текстовый файл следующим образом

latex(data1,file='myfile.tex')

При запуске вышеупомянутого в моем простом документе R-studio застряла в том смысле, что процесс не закончится. Я получаю следующую ошибку

 No file file1170690e2c79.aux.
*geometry* driver: auto-detecting
*geometry* detected driver: dvips
[1] (C:\Users\~~~\AppData\Local\Temp\RtmpeuvW08\file1170690e2c79.aux) )
Output written on file1170690e2c79.dvi (1 page, 604 bytes).
Transcript written on file1170690e2c79.log.

Итак, я использовал следующее

sink('myfile.tex')
latex(data1,file='')
sink()

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


Вот мой файл Sweave

\documentclass{article}
\usepackage{ctable}
\title{Untitled}

\begin{document}

\maketitle


<<somechunk,results=tex,echo=FALSE>>=
x1 <- round(rnorm(10),2)
x2 <- sample(c('a','b','c'),10,replace=TRUE)
data1 <- cbind(x1,noquote(x2));data1 <- as.data.frame(data1)
names(data1)=c('X1','X2')
sink('myfile.tex')

latex(data1,file='')
sink()
@

Here is my table 1 \include{myfile}

\end{document}

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Как предлагается в других ответах, проще всего (с Hmisc::latex или xtable) обычно генерировать код LaTeX только при необходимости.

Если это невозможно, должно работать следующее:

tmp <- latex(data1,file='myfile.tex')

В результате latex создает файл и возвращает объект класса latex.Затем вызывается метод print, но он пытается скомпилировать файл и отобразить результаты, что нежелательно в вашем случае.Присвоение результата переменной (которая не будет использоваться) или перенос вызова в invisible подавляет вызов print.

invisible( latex(data1,file='myfile.tex') )
3 голосов
/ 21 марта 2012

Вы можете использовать пакет xtable:

\documentclass{article}
\usepackage{ctable}

\begin{document}

<<somechunk,results=tex,echo=FALSE,results=hide>>=
library(xtable)
x1 <- round(rnorm(10),2)
x2 <- sample(c('a','b','c'),10,replace=TRUE)
data1 <- cbind(x1,noquote(x2));data1 <- as.data.frame(data1)
names(data1)=c('X1','X2')
@

Here is my table 1:

<<results=tex, echo=FALSE>>=
xtable(data1)
@
\end{document}
...