簡體   English   中英

從 R 數據幀生成 LaTeX 輸出

[英]Generating LaTeX output from R data frame

我在 Ubuntu 上運行 R v2.14.1。 我正在編寫一個腳本來生成一個數據框,它代表一個結果表。

我想將此“表格”輸出為 .tex 文件,以便我可以創建“學術出版物”質量表格以進行打印。 我聽說過 Sweave(並閱讀了一些關於 Sweave 的概述文檔) - 所以我認為這是繼續的方式。 但是,盡管說我實際上還沒有看到 Sweave 將數據幀作為 tex 文件輸出的示例 - 到目前為止我看到的所有 Sweave 示例似乎都是人為的,而不是我可以建立的東西。

是否有一些我可以遵循的指導方針,從數據幀輸出 tex? 另外,如果我直接從我的 R 腳本構建 TeX 字符串並將字符串保存到文件,它會更簡單(更直接)嗎? (我不清楚,除了“手動”手動構建 TeX 字符串之外,Sweave 還提供什么)。

xtable包中有一些關於如何生成表格的示例 - 請參閱小插圖。 編寫塊時,請確保將塊設置為<<results=tex>> 參見Sweave 示例,例如this

這就是我輸出 data.frame 的方式。

<<results=tex>>
    xtable(my.data.frame)
@

原始結果看起來像這樣:

> xtable(my.data.frame)
% latex table generated in R 2.14.1 by xtable 1.6-0 package
% Tue Feb 14 10:03:03 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rllr}
  \hline
 & p & q & r \\ 
  \hline
1 & condition\_a & grp\_1 &   3 \\ 
  2 & condition\_a & grp\_1 &   3 \\ 
  3 & condition\_a & grp\_1 &   4 \\ 
  4 & condition\_a & grp\_1 &   1 \\ 
  5 & condition\_b & grp\_1 &   4 \\ 
  6 & condition\_b & grp\_1 &   3 \\ 
  7 & condition\_b & grp\_1 &   5 \\ 
  8 & condition\_b & grp\_1 &   5 \\ 
  9 & condition\_a & grp\_2 &   4 \\ 
  10 & condition\_a & grp\_2 &   1 \\ 
  11 & condition\_a & grp\_2 &   1 \\ 
  12 & condition\_a & grp\_2 &   1 \\ 
  13 & condition\_b & grp\_2 &   5 \\ 
  14 & condition\_b & grp\_2 &   1 \\ 
  15 & condition\_b & grp\_2 &   5 \\ 
  16 & condition\_b & grp\_2 &   2 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}

我經常使用latexHmisc包中的describe函數,這允許進行大量微調。

library(Hmisc)
d <- data.frame(a=LETTERS[1:5], x=rnorm(5))
latex(d, file="")            # If you want all the data
latex(describe(d), file="")  # If you just want a summary

使用knitr包中的kable()將數據幀從 R 轉換為 LaTeX 表。kableExtra包允許進行更多微調。


# Toy example 
df <- tibble(x = c(1:3), 
             y = c(4:6))

# Plain latex output 
kable(df, "latex")

# With Booktabs 
kable(df, "latex", booktabs = TRUE)

就我個人而言,當我輸出匯總表而不是編寫報告時,我喜歡從 R 而不是 Rnw 文件中管理我的所有代碼,通過使用cat()sink()這允許您在當前環境中工作而不是每次需要重新運行文檔時,強制加載和重新加載所有內容。 此外,它使使用 R 來“復制”、“粘貼”或“循環”大量數據或數據列表變得更加容易。 不過應該注意的是,這在某種程度上打破了可重復研究的想法。

這是我將放入 R 文件的示例(記住,當然 \\ 需要轉義 \\:

dat <- list()
for(i in 1:15) {
  dat[[i]] <- sample(c("A","B"),1000,replace=TRUE) # Dummy data
}

sink("temp.Rnw")

cat("
\\documentclass{article}
\\usepackage{Sweave}
\\begin{document}
")

# Print a lot of tables
invisible(
  lapply(dat, 
       function(x) 
         print(xtable(table(x),caption=names(x)),table.placement="!htp"))
  ) 

cat("
\\end{document}
")

sink()
Sweave("temp.Rnw")
compilePdf("temp.Rnw")

我發現的最佳解決方案是使用 R 包 xtable。 你可以很容易地生成一個 LaTeX 格式的文件

x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
y <- c(10, 20, 30, 40, 50, 60, 70, 80, 90)
df <- data.frame("x"=x, "y"=y)
print.xtable(xtable(head(df)), file = "./Data.txt")

然后你可以將“Data.txt”的內容添加到你的 LaTeX 文件中

\input{./Data.txt}

簡單地重定向通常打印到控制台的文本輸出的更快速和骯臟的解決方案如下:

sink("./Output.txt")
head(data)
sink()

您也可以使用 cat() 添加個人評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM