web-dev-qa-db-ja.com

Rでラテックステーブルを作成するためのツール

一般的なリクエストに応じて、Rでのラテックステーブルの作成に関するコミュニティwiki。この投稿では、あまり一般的ではないオブジェクトからラテックステーブルを作成するためのコードを含む、最も一般的に使用されるパッケージとブログの概要を説明します。私が見逃したものを追加したり、Rでうまくフォーマットされたラテックステーブルを作成する方法に関するヒント、ヒント、小さなトリックをお気軽に追加してください.

パッケージ:

  • xtable :最も単純なオブジェクトの標準テーブル用。例のある素敵なギャラリーを見つけることができます こちら
  • memisc :調査データの管理用ツール。(基本)回帰モデル推定のラテックステーブル用のツールが含まれています。
  • Hmisc には、選択したオブジェクトを含むtexファイルを作成する関数latex()が含まれています。非常に柔軟で、longtable latexテーブルも出力できます。ヘルプファイル?latexには多くの情報があります。
  • miscFuncs には、アルファベットと数値が混在した行列データをLaTeXテーブルに変換し、コンソールに出力するすてきな関数「latextable」があり、それらをLaTeXドキュメントにコピーして貼り付けることができます。
  • texreg package( JSS paper )統計モデルの出力をLaTeXテーブルに変換します。複数のモデルをマージします。ネットワークモデルやマルチレベルモデル(lmeおよびlme4)など、約50の異なるモデルタイプに対応できます。
  • reporttools package( JSS paper )は、連続変数、カテゴリ変数、日付変数に関する記述統計の別のオプションです。
  • tables パッケージは、おそらく最も一般的なLaTeXテーブルで、記述統計用のRのパッケージを作成します。
  • stargazer パッケージは、ニースの比較統計モデルの要約表を作成します

ブログとコードスニペット

関連する質問:

269
Joris Meys

「brew」パッケージについての言及を追加したいと思います。 LaTeXのプレースホルダーを含むbrewテンプレートファイルを作成し、それを「醸造」して、.texファイルを作成し、LaTeXに\ includeまたは\ inputすることができます。何かのようなもの:

\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}

抽出構文はループも処理できるため、データフレームの各行にテーブル行を作成できます。

22
Spacedman

この質問を作成してくれたJorisに感謝します。うまくいけば、コミュニティwikiになります。

Latexのbooktabsパッケージは、見栄えの良いテーブルを生成します。 xtableを使用して booktabsを使用するラテックステーブルを作成する を使用する方法についてのブログ投稿があります

また、apsrtableパッケージをミックスに追加して、見栄えの良い回帰テーブルを作成します。

別のアイデア:これらのパッケージの一部(特にmemiscおよびapsrtable)を使用すると、コードを簡単に拡張して、さまざまな回帰オブジェクトのテーブルを作成できます。そのような例の1つは、質問に示されているlme4 memiscコードです。このようなコードスニペットを収集するためにgithubリポジトリを開始することは理にかなっているかもしれません。また、時間が経つにつれてmemiscパッケージに追加することもあります。受験者はいますか?

21
Ramnath

stargazer パッケージは別の良いオプションです。多くの一般的に使用される関数とパッケージ(lm、glm、svyreg、survival、pscl、AER)およびzeligからのオブジェクトをサポートします。回帰表に加えて、データフレームの要約統計を出力したり、データフレームの内容を直接出力したりすることもできます。

18
user1953965

ここで共有するxtableとLatexの興味深い「機能」にいくつかのトリックと回避策があります。

トリック#1:列の重複の削除とトリック#2:ブックタブの使用

最初に、パッケージをロードし、クリーン関数を定義します

<<label=first, include=FALSE, echo=FALSE>>= 
    library(xtable)
    library(plyr)

    cleanf <- function(x){     
        oldx <- c(FALSE, x[-1]==x[-length(x)])  
        # is the value equal to the previous?    
        res <- x
        res[oldx] <- NA
        return(res)} 

偽のデータを生成します

data<-data.frame(animal=sample(c("elephant", "dog", "cat", "fish", "snake"), 100,replace=TRUE),
            colour=sample(c("red", "blue", "green", "yellow"), 100,replace=TRUE),
            size=rnorm(100,mean=500, sd=150),
            age=rlnorm(100, meanlog=3, sdlog=0.5))

    #generate a table
    datatable<-ddply(data, .(animal, colour), function(df) {
                return(data.frame(size=mean(df$size), age=mean(df$age)))
            })

これで、テーブルを生成し、clean関数を使用してラベル列の重複エントリを削除できます。

cleandata<-datatable
cleandata$animal<-cleanf(cleandata$animal)
cleandata$colour<-cleanf(cleandata$colour)
@ 

これは通常のxtableです

<<label=normal, results=tex, echo=FALSE>>=
print(
    xtable(
        datatable
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

これは、カスタム関数が重複をNAに変換した通常のxtableです

<<label=cleandata, results=tex, echo=FALSE>>=
print(
    xtable(
        cleandata
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

このテーブルはbooktabパッケージを使用します(ヘッダーに\ usepackage {booktabs}が必要です)

\begin{table}[!h] 
        \centering
        \caption{table using booktabs.}
        \label{tab:mytable}
<<label=booktabs, echo=F,results=tex>>= 
            mat <- xtable(cleandata,digits=rep(2,ncol(cleandata)+1))
            foo<-0:(length(mat$animal))
            bar<-foo[!is.na(mat$animal)]
            print(mat, 
                  sanitize.text.function = function(x){x},
                  floating=FALSE,
                  include.rownames=FALSE,
                  hline.after=NULL, 
                  add.to.row=list(pos=list(-1,bar,nrow(mat)), 
                  command=c("\\toprule ", "\\midrule ", "\\bottomrule ")))
  #could extend this with \cmidrule to have a partial line over
  #a sub category column and \addlinespace to add space before a total row
@ 
15
PaulHurleyuk

パッケージtaRifxの2つのユーティリティを組み合わせて使用​​すると、ネストされた階層の複数行のテーブルを作成できます。

library(datasets)
library(taRifx)
library(xtable)

test.by <- bytable(ChickWeight$weight, list( ChickWeight$Chick, ChickWeight$Diet) )
colnames(test.by) <- c('Diet','Chick','Mean Weight')
print(latex.table.by(test.by), include.rownames = FALSE, include.colnames = TRUE, sanitize.text.function = force)
#   then add \usepackage{multirow} to the preamble of your LaTeX document
#   for longtable support, add ,tabular.environment='longtable' to the print command (plus add in ,floating=FALSE), then \usepackage{longtable} to the LaTeX preamble

sample table output

12
Ari B. Friedman

RパッケージmicsFuncsのlatextable関数も使用できます。

http://cran.r-project.org/web/packages/miscFuncs/index.html

latextable(M)ここで、Mはアルファベットと数字が混在した行列であり、LaTeXドキュメントにコピーして貼り付けることができる基本的なLaTeXテーブルを画面に出力します。小さい数字がある場合は、これらをインデックス表記(たとえば、1.2x10 ^ {-3})に置き換えます。

5
Benjamin Taylor

複数の回帰モデルをLaTeXテーブルに集約する別のRパッケージは、 texreg です。

5
Philip Leifeld

...およびXtableのトリック#3複数行エントリ

さらにデータを生成する

moredata<-data.frame(Nominal=c(1:5), n=rep(5,5), 
        MeanLinBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        LinCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""),
        MeanQuadBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        QuadCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""))

names(moredata)<-c("Nominal", "n","Linear Model \nBias","Linear \nCI", "Quadratic Model \nBias", "Quadratic \nCI")

次に、サニタイズ関数を使用してxtableを作成し、列名を正しいLatex改行コマンドで置き換えます(二重バックスラッシュを含めてRを満足させます)。

<<label=multilinetable, results=tex, echo=FALSE>>=
foo<-xtable(moredata)
align(foo) <- c( rep('c',3),'p{1.8in}','p{2in}','p{1.8in}','p{2in}' )
print(foo, 
            floating=FALSE, 
            include.rownames=FALSE,
            sanitize.text.function = function(str) {
                str<-gsub("\n","\\\\", str, fixed=TRUE)

                return(str)
            }, 
            sanitize.colnames.function = function(str) {
                str<-c("Nominal", "n","\\centering Linear Model\\\\ \\% Bias","\\centering Linear \\\\ 95\\%CI", "\\centering Quadratic Model\\\\ \\%Bias", "\\centering Quadratic \\\\ 95\\%CI \\tabularnewline")
                return(str)
            })
@  

(これは完璧ではありませんが、テーブルを正しくフォーマットするために\ tabularnewlineが必要であり、Xtableはまだ最後の\を入れるため、テーブルヘッダーの下に空白行ができます。)

5
PaulHurleyuk