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




r 行列 (3)

私はしばしばlatexを使い、 Hmiscパッケージの関数を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

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

この「表」を.texファイルとして出力して、印刷用の「学術出版物」品質表を作成することができます。 私はSweaveのことを聞いたことがあります(Sweaveについての概要文書を読んでいます)。これが、proeeedの方法だと思います。 しかし、Sweaveがデータフレームをtexファイルとして出力する例は実際には見ていないと言いました。これまで見たSweaveの例はすべて私が構築できるものではなく、人工的なものです。

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


xtableパッケージには、テーブルの生成方法の例がいくつかありますxtable参照してください。 チャンクを書くときは、チャンクを<<results=tex>>設定してください。 たとえばSweaveの例を参照してください。

これが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}

個人的には、サマリーテーブルを出力していてレポートを書いていないときは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")




sweave