Alat untuk membuat tabel lateks dalam R [ditutup]

268

Atas permintaan umum, wiki komunitas tentang pembuatan tabel lateks di R. Dalam posting ini saya akan memberikan tinjauan umum tentang paket dan blog yang paling umum digunakan dengan kode untuk membuat tabel lateks dari objek yang tidak terlalu lurus. Silakan menambahkan apa pun yang saya lewatkan, dan / atau memberikan kiat, petunjuk, dan sedikit trik tentang cara membuat tabel lateks yang diformat dengan baik dengan R.

Paket:

  • xtable : untuk tabel standar objek paling sederhana. Galeri yang bagus dengan contoh-contoh dapat ditemukan di sini .
  • memisc : alat untuk pengelolaan data survei, berisi beberapa alat untuk tabel lateks estimasi model regresi (dasar).
  • Hmisc berisi fungsi latex()yang membuat file tex yang berisi objek pilihan. Ini cukup fleksibel, dan juga dapat menampilkan longtabletabel lateks. Ada banyak info di file bantuan?latex
  • miscFuncs memiliki fungsi rapi 'latextable' yang mengubah data matriks dengan entri alfabet dan numerik campuran menjadi tabel LaTeX dan mencetaknya ke konsol, sehingga dapat disalin dan ditempelkan ke dokumen LaTeX.
  • paket texreg ( kertas JSS ) mengubah output model statistik menjadi tabel LaTeX. Menggabungkan banyak model. Dapat mengatasi sekitar 50 jenis model yang berbeda, termasuk model jaringan dan model bertingkat (lme dan lme4).
  • paket reporttools ( kertas JSS ) adalah pilihan lain untuk statistik deskriptif tentang variabel kontinu, kategorikal, dan tanggal.
  • paket tabel mungkin adalah paket pembuatan tabel LaTeX paling umum dalam R untuk statistik deskriptif
  • paket stargazer membuat tabel ringkasan model statistik komparatif yang bagus

Blog dan cuplikan kode

Pertanyaan-pertanyaan Terkait :

Joris Meys
sumber
4
Pada Cross Validated (stats.SE), posting blog berikut akan menarik bagi pembaca di sini: Beberapa catatan tentang membuat tabel yang efektif .
gung - Reinstate Monica
2
Anda juga dapat menggunakan ztable. Itu membuat tabel bergaris zebra dalam format LaTeX dan HTML dengan mudah. Ini cukup fleksibel dan sederhana: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
skan
Apa "prosedur" yang disarankan untuk bekerja dengan banyak tabel dalam R (atau RStudio) dan menggunakannya dari program Lateks eksternal, seperti TexStudio, untuk menanamkannya dalam proyek yang jauh lebih besar?
skan
1
@skan Itu khusus untuk lateks. Jika Anda membuat dokumen "anak-anak", Anda membuatnya sebagai dokumen lateks dan menggunakan salah satu includeatau input. Anda dapat menggunakan writeLines()yang berfungsi baik dengan kable()dan xtable(). Simpan sebagai file .tex dan masalah terpecahkan.
Joris Meys
1
OTOH, jika Anda menggunakan banyak dokumen dan ingin menggabungkannya menjadi satu (Anda tidak jelas pada yang itu), Anda membuat dokumen dan Anda gunakan inputuntuk memasukkan satu dokumen ke yang lain. Manual lateks akan memberi tahu Anda bahwa ini sama dengan mengetik konten dokumen di tempat itu, maka tidak perlu menyalin-tempelkan seluruh pengaturan yang Anda lakukan di pembukaan.
Joris Meys

Jawaban:

22

Saya ingin menambahkan menyebutkan paket "brew". Anda dapat menulis file templat pembuatan yang akan menjadi LaTeX dengan placeholder, dan kemudian "menyeduh" untuk membuat file .tex untuk \ include atau \ input ke dalam LaTeX Anda. Sesuatu seperti:

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

Sintaks buatan juga dapat menangani loop, sehingga Anda dapat membuat baris tabel untuk setiap baris dari kerangka data.

Spacedman
sumber
Paket R.rsp dan fungsinya rstring () mirip dengan brew :: brew (). Tidak yakin apakah itu lebih baik, tetapi paket itu tentu memiliki lebih banyak barang. Dalam kedua kasus saya suka pendekatan ini karena memberikan lebih banyak fleksibilitas dalam kode tex sambil tidak mengorbankan reproduktifitas.
Richard DiSalvo
21

Terima kasih Joris untuk membuat pertanyaan ini. Semoga itu akan dibuat menjadi komunitas wiki.

Paket-paket booktabs dalam lateks menghasilkan tabel yang terlihat bagus. Berikut adalah posting blog tentang cara menggunakan xtable untuk membuat tabel lateks yang menggunakan booktab

Saya juga akan menambahkan apsrtablepaket ke dalam campuran karena menghasilkan tabel regresi yang tampak bagus.

Ide lain: Beberapa paket ini (khususnya memisc dan apsrtable) memungkinkan ekstensi kode yang mudah untuk menghasilkan tabel untuk objek regresi yang berbeda. Salah satu contohnya adalah kode memme lme4 yang ditunjukkan dalam pertanyaan. Mungkin masuk akal untuk memulai repositori github untuk mengumpulkan potongan kode seperti itu, dan seiring waktu mungkin bahkan menambahkannya ke paket memisc. Ada yang mengambil?

Ramnath
sumber
18

The stargazer paket pilihan yang baik. Ini mendukung objek dari banyak fungsi dan paket yang umum digunakan (lm, glm, svyreg, survival, pscl, AER), serta dari zelig. Selain tabel regresi, itu juga dapat menampilkan statistik ringkasan untuk frame data, atau langsung menampilkan konten dari frame data.

pengguna1953965
sumber
15

Saya punya beberapa trik dan bekerja untuk 'fitur' xtable dan Lateks yang menarik yang akan saya bagikan di sini.

Trik # 1: Menghapus Duplikat di Kolom dan Trik # 2: Menggunakan Booktabs

Pertama, muat paket dan tentukan fungsi bersih saya

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

Sekarang hasilkan beberapa data palsu

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

Sekarang kita dapat menghasilkan tabel, dan menggunakan fungsi bersih untuk menghapus entri duplikat di kolom label.

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

ini adalah xtable normal

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

ini adalah xtable normal di mana fungsi kustom telah mengubah duplikat menjadi NA

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

Tabel ini menggunakan paket booktab (dan membutuhkan \ usepackage {booktabs} di header)

\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
@ 
PaulHurleyuk
sumber
12

Dua utilitas dalam paket taRifx dapat digunakan dalam konser untuk menghasilkan tabel multi-baris pusaka bersarang.

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

output tabel sampel

Ari B. Friedman
sumber
2
Apakah ada cara untuk melakukan hal serupa tetapi dengan seluruh kerangka data, bukan hanya satu vektor seperti input dengan bytable ()?
Thraupidae
5

... dan Trik # 3 Entri multiline dalam Xtable

Hasilkan lebih banyak data

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

Sekarang, hasilkan xtable kami, gunakan fungsi sanitize untuk mengganti nama kolom dengan perintah baris Lateks yang benar (termasuk double backslash sehingga R senang)

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

(walaupun ini tidak sempurna, karena kita memerlukan \ tabularnewline sehingga tabel diformat dengan benar, dan Xtable masih menempatkan di final \, jadi kita berakhir dengan baris kosong di bawah header tabel.)

PaulHurleyuk
sumber
5

Anda juga dapat menggunakan fungsi latextable dari paket R micsFuncs:

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

latextable (M) di mana M adalah matriks dengan entri alfabet dan numerik campuran menampilkan tabel LaTeX dasar ke layar, yang dapat disalin dan ditempelkan ke dokumen LaTeX. Di mana ada angka kecil, itu juga menggantikan ini dengan notasi indeks (misalnya 1.2x10 ^ {- 3}).

Benjamin Taylor
sumber
5

Paket R lain untuk menggabungkan beberapa model regresi ke dalam tabel LaTeX adalah texreg .

Philip Leifeld
sumber