【问题标题】:Including several tables in tex format in my main document在我的主文档中包含几个 tex 格式的表格
【发布时间】:2012-04-05 09:27:06
【问题描述】:

有没有办法在 R 中生成 tex 格式的表格,然后在我的 *.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 放在一个 tex 文件中,如下所示

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

在我的 sweave 文档中运行上述内容时,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}

【问题讨论】:

  • 为什么不直接latex(data1, file='')?我的意思是为什么你必须先创建 tex 文件,然后手动创建\include{yourfile}?这会给您带来维护麻烦,因为您必须同时处理源代码和输出

标签: r knitr tex


【解决方案1】:

正如其他答案中所建议的,最简单的 (Hmisc::latexxtable) 通常是只在需要时才生成 LaTeX 代码。

如果这是不可能的,以下应该可以工作:

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

会发生什么是latex 创建文件 并返回类latex 的对象。 然后调用print 方法,但它会尝试编译文件 并显示结果,这在您的情况下是不需要的。 将结果分配给一个变量(不会使用), 或将调用包装在invisible 中,抑制对print 的调用。

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

【讨论】:

  • 没错。您必须防止 print.latex 当您隐式打印 latex() 返回的乳胶对象时调用它。
【解决方案2】:

你可以使用 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}

【讨论】:

  • 我知道 xtable 可以在这个简化的例子中工作,但我需要生成的表需要 Latex 函数。谢谢@EDi
猜你喜欢
  • 2020-08-15
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多