R'de lateks tablolar yapmak için araçlar [kapalı]


268

Genel istek üzerine, R'de lateks tabloları üretmeye dair bir topluluk wiki'si Bu yazıda, daha az düz nesnelerden lateks tabloları üretmek için kod içeren en yaygın kullanılan paketler ve bloglara genel bir bakış sunacağım. Lütfen kaçırdığım herhangi bir şeyi eklemekten çekinmeyin ve / veya R ile güzel biçimlendirilmiş lateks tabloların nasıl üretileceğine dair ipuçları, ipuçları ve küçük ipuçları verin.

Paketler:

  • xtable : en basit nesnelerin standart tabloları için. Örneklerle güzel bir galeri burada bulunabilir .
  • memisc : anket verilerinin yönetimi için bir araç, (temel) regresyon modeli tahminlerinin lateks tabloları için bazı araçlar içerir.
  • Hmisc , latex()seçilen nesneyi içeren bir tex dosyası oluşturan bir işlev içerir . Oldukça esnektir ve longtablelateks tabloları da çıktı alabilir . Yardım dosyasında çok fazla bilgi var?latex
  • miscFuncs , karışık alfabetik ve sayısal girişlere sahip matris verilerini bir LaTeX tablosuna dönüştüren ve bunları konsola yazdıran, böylece bir LaTeX belgesine kopyalanıp yapıştırılabilen düzgün bir 'latekslenebilir' fonksiyona sahiptir.
  • texreg paketi ( JSS kağıdı ) istatistiksel model çıktısını LaTeX tablolarına dönüştürür. Birden çok modeli birleştirir. Ağ modelleri ve çok düzeyli modeller (lme ve lme4) dahil olmak üzere yaklaşık 50 farklı model tipiyle başa çıkabilir.
  • reporttools paketi ( JSS kağıdı ), sürekli, kategorik ve tarih değişkenlerine ilişkin açıklayıcı istatistikler için başka bir seçenektir.
  • tablo paketi, tanımlayıcı istatistikler için R'deki en genel LaTeX tablo yapma paketidir
  • stargazer paketi güzel karşılaştırmalı istatistiksel model özet tabloları yapar

Bloglar ve kod snippet'leri

İlgili sorular :


4
Çapraz Doğrulanmış (stats.SE) konusunda, aşağıdaki blog yazısı burada okuyucuların ilgisini çekecektir: Etkili tablolar oluşturmaya ilişkin bazı notlar .
gung - Monica'yı

2
Ayrıca ztable kullanabilirsiniz. LaTeX ve HTML formatlarında zebra çizgili tabloları kolayca yapar. Oldukça esnek ve basit: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
skan

R (veya RStudio) içindeki birçok tabloyla çalışmak ve bunları çok daha büyük bir projeye yerleştirmek için bunları TexStudio gibi harici bir Lateks programından kullanmak için önerilen "prosedür" nedir?
skan

1
@skan Bu latekse özgüdür. "Alt" belgeler oluşturursanız, bunları lateks belgeler olarak oluşturur ve includeveya öğelerinden birini kullanırsınız input. Sen kullanabilirsiniz writeLines()ikisi ile çalıştığı kable()ve xtable(). .Tex dosyaları olarak saklayın ve problem çözüldü.
Joris Meys

1
OTOH, birden fazla belge kullanıyorsanız ve bunları bir belgede birleştirmek istiyorsanız (bu belgede net değilsiniz), belgeleri oluşturursunuz ve bir belgeyi inputdiğerine almak için kullanırsınız . Lateks kılavuzu size bunun belgenin içeriğini o yere yazmakla aynı olduğunu söyleyecektir, bu nedenle önsözde yaptığınız tüm kurulumu kopyalayıp yapıştırmaya gerek yoktur.
Joris Meys

Yanıtlar:


22

"Demlemek" paketinden bahsetmek istiyorum. Yer tutucularla LaTeX olacak bir demleme şablonu dosyası yazabilir ve daha sonra LaTeX'inize \ include veya \ input olarak bir .tex dosyası oluşturmak için "demleyebilirsiniz". Gibi bir şey:

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

Demleme sözdizimi de döngülerle başa çıkabilir, böylece bir veri çerçevesinin her satırı için bir tablo satırı oluşturabilirsiniz.


R.rsp paketi ve işlevi rstring (), brew :: brew () işlevine benzer. Emin değilim daha iyi, ama paket kesinlikle daha fazla şey var. Her iki durumda da bu yaklaşımı sevdim çünkü tekrarlanabilirlikten ödün vermeden tex kodunda daha fazla esneklik sağlıyor.
Richard DiSalvo

21

Bu soruyu yarattığın için teşekkürler Joris. Umarım, bir topluluk wiki haline getirilir.

Lateks kitaplıklar paketleri hoş görünümlü tablolar üretir. Burada, kitap tabloları kullanan lateks tablolar oluşturmak için xtable'ı nasıl kullanacağınıza dair bir blog yazısı

Ayrıca apsrtablegüzel görünümlü regresyon tabloları ürettiği için karışıma da paket ekleyeceğim .

Başka Bir Fikir: Bu paketlerden bazıları (özellikle memisc ve apsrtable), farklı regresyon nesneleri için tablolar üretmek üzere kodun kolay uzantılarına izin verir. Böyle bir örnek, soruda gösterilen lme4 memisc kodudur. Bu tür kod parçacıklarını toplamak için bir github deposunu başlatmak mantıklı olabilir ve zamanla memisc paketine ekleyebilirsiniz. Arayan var mı?


18

Bestesi, paket başka iyi bir seçenektir. Yaygın olarak kullanılan birçok işlev ve paketten (lm, glm, svyreg, hayatta kalma, pscl, AER) ve zelig'den nesneleri destekler. Regresyon tablolarına ek olarak, veri çerçeveleri için özet istatistikler çıkarabilir veya doğrudan veri çerçeveleri içeriğini çıkarabilir.


15

Birkaç püf noktası var ve burada paylaşacağım xtable ve Latex'in ilginç 'özelliklerine' çalışıyorum.

1. Numara: Sütunlardaki Yinelenenleri Kaldırma ve 2. Numara: Kitap Sekmelerini Kullanma

İlk olarak, paketleri yükleyin ve temiz fonksiyonumu tanımlayın

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

Şimdi bazı sahte veriler oluşturun

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

Şimdi bir tablo oluşturabilir ve etiket sütunlarındaki yinelenen girdileri kaldırmak için clean işlevini kullanabiliriz.

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

bu normal bir xtable

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

bu, özel bir işlev yinelemeleri NA'ya çevirdiğinde normal bir xtable

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

Bu tablo booktab paketini kullanır (ve başlıklarda \ usepackage {booktabs} gerekir)

\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 paketindeki iki yardımcı program, iç içe heirarchilerin çok sıralı tablolarını üretmek için birlikte kullanılabilir.

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

örnek tablo çıktısı


2
Benzer bir şey yapmanın bir yolu var mı ama bytable () ile girdi olarak sadece bir vektör yerine tüm veri çerçevesiyle?
Thraupidae

5

... ve Hile # 3 Bir Xtable içindeki çok satırlı girişler

Biraz daha veri oluşturun

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

Şimdi, sütun adlarını doğru Lateks satırsonu komutlarıyla değiştirmek için sterilize etme işlevini kullanarak xtable'ımızı üretin (çift ters eğik çizgi dahil, böylece R mutludur)

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

(bu mükemmel olmasa da, tablonun doğru şekilde biçimlendirilmesi için \ tabularnewline'a ihtiyacımız var ve Xtable yine de bir final koyuyor \, bu yüzden tablo başlığının altında boş bir çizgi ile sonuçlanıyoruz.)


5

Latekslenebilir işlevi R paketi micsFuncs öğesinden de kullanabilirsiniz:

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

latekslenebilir (M), burada M, karışık alfabetik ve sayısal girişlere sahip bir matristir, ekrana bir LaTeX tablosu kopyalar ve bir LaTeX belgesine yapıştırılabilir. Küçük sayılar olduğunda, bunları indeks gösterimi ile de değiştirir (örneğin 1.2x10 ^ {- 3}).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.