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


268

一般的なリクエストに応じて、Rでのラテックステーブルの作成に関するコミュニティウィキ。この投稿では、あまり一般的ではないオブジェクトからラテックステーブルを作成するためのコードを含む、最も一般的に使用されるパッケージとブログの概要を紹介します。私が見逃したものを自由に追加したり、Rを使用して適切にフォーマットされたラテックステーブルを作成する方法についてのヒント、ヒント、ちょっとしたトリックを追加したりしてください。

パッケージ:

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

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

関連する質問:


4
Cross Validated(stats.SE)については、次のブログ投稿が読者の関心を引くでしょう。効果的なテーブルの作成に関する注意点
gung-モニカを2013年

2
ztableを使用することもできます。LaTeXおよびHTML形式のゼブラストライプテーブルを簡単に作成できます。それは非常に柔軟かつ簡単です: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
SKAN

R(またはRStudio)で多くのテーブルを操作し、それらをTexStudioなどの外部Latexプログラムから使用して、はるかに大きなプロジェクトに埋め込むための「手順」はどのようなものですか?
skan 2017

1
@skanそれはラテックス固有です。「子」ドキュメントを作成する場合は、それらをラテックスドキュメントとして作成し、includeまたはを使用しますinput。あなたは使用することができwriteLines()、両方で動作しているkable()xtable()。.texファイルとして保存し、問題を解決します。
Joris Meys、2017

1
OTOH、複数のドキュメントを使用し、それらを1つに結合したい場合(そのドキュメントは明確ではありません)、ドキュメントを作成し、input1つのドキュメントを他のドキュメントに取り込むために使用します。Latexのマニュアルでは、ドキュメントのコンテンツをその場所に入力するのと同じであるため、プリアンブルで行った設定全体をコピーして貼り付ける必要はありません。
Joris Meys

回答:


22

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

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

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


パッケージR.rspとその関数rstring()はbrew :: brew()に似ています。それが良いかどうかはわかりませんが、パッケージには確かにより多くのものがあります。どちらの場合でも、再現性を犠牲にすることなくtexコードの柔軟性を高めるため、このアプローチが好きです。
Richard DiSalvo 2016年

21

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

ラテックスのブックタブパッケージは見栄えの良いテーブルを生成します。これは、xtableを使用して使用するラテックステーブル作成するです。

私も追加します apsrtable見栄えのよい回帰表を作成するのでパッケージミックスにます。

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


18

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


15

ここでは、xtableとLatexの興味深い「機能」についていくつかのトリックと回避策を紹介します。

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

まず、パッケージをロードして、クリーンな関数を定義します

<<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
@ 

12

パッケージ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

テーブル出力のサンプル


2
同様のことをする方法はありますが、bytable()で入力される1つのベクトルだけではなく、データフレーム全体を使用しますか?
Thraupidae 2012

5

...とトリック#3 Xtableの複数行エントリ

さらにデータを生成する

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")

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

<<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

RパッケージのmicsFuncsからlatextable関数を使用することもできます。

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.