在 Latex 表中生成包含 R 输出的 PDF

在 Latex 表中生成包含 R 输出的 PDF

我编写了一个脚本,该脚本从 2 个 for 循环生成 4 个变量,每个变量都包含大量数据。我想将这些变量放在数据框中,然后创建一个 latex 表,以便可以将其输出为 PDF。

t <- read.table("data.txt", stringsAsFactors=FALSE)
uni <- unique(c(t$V9))

testresult <- function(column, datacol) {    
  if(column=="PP") {
    for (xp in uni) { 
      for(yp in uni) {
        testx <- subset(t, V9==xp)
        testy <- subset(t, V9==yp)
        zz <- wilcox.test(testx[[datacol]],jitter(testy[[datacol]]))
        p.value <- zz$p.value
      }
    }
  } 
}

我希望表包含 2 个 for 循环中每个 xp 和 yp 的这 4 列(xp、yp、p 值、重要性)。

关于我的函数中的抖动是否合适的问题已被转至 stats.stackexchange.com: 在进行 Wilcox 测试之前进行抖动是否错误

答案1

要用结果制作数据框,请使用rbind将结果按行添加到循环内的输出对象,如out下面的对象所示。

要从数据框中获取 LaTeX 表,请使用xtable

实现这一切的最简单方法是使用 Sweave 文档,如下所示。如果您不想使用 Sweave,您可以运行 R 代码并将生成的 LaTeX 表格复制/粘贴到您自己的 LaTeX 文档中。

\documentclass{article}
\begin{document}
<<echo=FALSE, results=hide>>=
# make up some data
set.seed(5)
N <- 15
t <- data.frame(a=round(runif(N)*100), 
                b=round(runif(N)*100),
                V9=rep(LETTERS[1:3],N/3), 
                stringsAsFactors=FALSE)
uni <-  unique(c(t$V9))

# function to get result for a particular data column
testresult<- function(column, datacol) {    
  out <- NULL
  if(column=="PP") {
    for (xp in uni) { 
      for(yp in uni) {
        testx <- subset(t, V9==xp)
        testy <- subset(t, V9==yp)
        zz <- wilcox.test(testx[[datacol]],jitter(testy[[datacol]]))
        out <- rbind(out, data.frame(xp=xp, yp=yp, p.value=zz$p.value))
      }
    }
  } 
  out
}

# get results for columns a and b
ta <- testresult("PP","a")
tb <- testresult("PP","b")

# load xtable library for output
library(xtable)
@ 

\section*{a results}
<<results=tex, echo=FALSE>>=
print(xtable(ta), include.rownames=FALSE, floating=FALSE)
@ 

\section*{b results}
<<results=tex, echo=FALSE>>=
print(xtable(tb), include.rownames=FALSE, floating=FALSE)
@ 

\end{document}

如果您不想使用 Sweave,您可以执行类似于latex函数的操作Hmisc,在 R 中创建 .tex 文件,然后对 pdflatex 进行系统调用。以下函数将在 table 上执行此操作tab,并将结果输出到具有 basename 的文件中file

pdfit <- function(tab, file) {
  texfile <- paste(file, ".tex", sep="")
  cat("\\documentclass{article}\n\\begin{document}\n", file=texfile)
  print(xtable(tab), include.rownames=FALSE, floating=FALSE, 
        file=texfile, append=TRUE)
  cat("\\end{document}\n", file=texfile, append=TRUE)
  sys(paste("pdflatex", texfile))
}
pdfit(ta, "ta")

答案2

如果您可以将表格保存到文本文件,我认为您可以使用 pgfplotstable 包将其导入 LaTeX。摘自其文档:

PgfplotsTable 是 pgfplots 的一个轻量级子包,它采用其表格输入方法和数字格式化技术将制表符分隔的表格转换为表格。

它的输入是一个文本文件,其中包含空格分隔的行,可能以列名开头。它的输出是一个 LaTeX 表格,其中包含文本表的选定列,四舍五入到所需的精度,以所需的数字格式(定点、整数、科学计数法等)打印。

相关内容