一般的なリクエストに応じて、Rでのラテックステーブルの作成に関するコミュニティwiki。この投稿では、あまり一般的ではないオブジェクトからラテックステーブルを作成するためのコードを含む、最も一般的に使用されるパッケージとブログの概要を説明します。私が見逃したものを追加したり、Rでうまくフォーマットされたラテックステーブルを作成する方法に関するヒント、ヒント、小さなトリックをお気軽に追加してください.
latex()
が含まれています。非常に柔軟で、longtable
latexテーブルも出力できます。ヘルプファイル?latex
には多くの情報があります。「brew」パッケージについての言及を追加したいと思います。 LaTeXのプレースホルダーを含むbrewテンプレートファイルを作成し、それを「醸造」して、.texファイルを作成し、LaTeXに\ includeまたは\ inputすることができます。何かのようなもの:
\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}
抽出構文はループも処理できるため、データフレームの各行にテーブル行を作成できます。
この質問を作成してくれたJorisに感謝します。うまくいけば、コミュニティwikiになります。
Latexのbooktabsパッケージは、見栄えの良いテーブルを生成します。 xtableを使用して booktabsを使用するラテックステーブルを作成する を使用する方法についてのブログ投稿があります
また、apsrtable
パッケージをミックスに追加して、見栄えの良い回帰テーブルを作成します。
別のアイデア:これらのパッケージの一部(特にmemiscおよびapsrtable)を使用すると、コードを簡単に拡張して、さまざまな回帰オブジェクトのテーブルを作成できます。そのような例の1つは、質問に示されているlme4 memiscコードです。このようなコードスニペットを収集するためにgithubリポジトリを開始することは理にかなっているかもしれません。また、時間が経つにつれてmemiscパッケージに追加することもあります。受験者はいますか?
stargazer パッケージは別の良いオプションです。多くの一般的に使用される関数とパッケージ(lm、glm、svyreg、survival、pscl、AER)およびzeligからのオブジェクトをサポートします。回帰表に加えて、データフレームの要約統計を出力したり、データフレームの内容を直接出力したりすることもできます。
ここで共有する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
@
パッケージ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
RパッケージmicsFuncsのlatextable関数も使用できます。
http://cran.r-project.org/web/packages/miscFuncs/index.html
latextable(M)ここで、Mはアルファベットと数字が混在した行列であり、LaTeXドキュメントにコピーして貼り付けることができる基本的なLaTeXテーブルを画面に出力します。小さい数字がある場合は、これらをインデックス表記(たとえば、1.2x10 ^ {-3})に置き換えます。
複数の回帰モデルをLaTeXテーブルに集約する別のRパッケージは、 texreg です。
...および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はまだ最後の\を入れるため、テーブルヘッダーの下に空白行ができます。)