web-dev-qa-db-ja.com

RデータフレームからのLaTeX出力の生成

UbuntuでRv2.14.1を実行しています。結果のテーブルを表すデータフレームを生成するスクリプトを書いています。

この「テーブル」を.texファイルとして出力して、印刷用の「学術出版物」品質テーブルを作成できるようにしたいと思います。私はSweaveについて聞いたことがあります(そしてSweaveに関するいくつかの概要ドキュメントを読みました)-それで、これが続行する方法だと思います。ただし、Sweaveがデータフレームをtexファイルとして出力する例は実際には見たことがありません。これまでに見たすべてのSweaveの例は、不自然であり、構築できるものではありません。

データフレームからtexを出力するために従うことができるガイドラインはありますか?また、Rスクリプトから直接TeX文字列を作成し、その文字列をファイルに保存した場合、より簡単になりますか(より簡単になりますか)? (SweaveがTeXストリングを「手動で」手動で構築する以上に何を提供するかは私にはわかりません)。

19

xtable パッケージには、テーブルを生成する方法の例がいくつかあります。ビネットを参照してください。チャンクを作成するときは、チャンクを<<results=tex>>に設定してください。 Sweave example を参照してください。たとえば、 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}
29
Roman Luštrik

私はよく latex および describe パッケージの Hmisc 関数を使用します。多くの微調整を可能にします。

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
17

個人的には、cat()sink()を使用して、サマリーテーブルを出力し、レポートを作成しないときに、RnwファイルではなくR内からすべてのコードを管理するのが好きです。ドキュメントを再実行する必要があるたびにすべてを強制的にロードおよび再ロードするのではなく、現在の環境内から作業します。また、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")
4

私が見つけた最善の解決策は、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()を使用して個々のコメントを追加することもできます

0
MacNutter