Narzędzia do robienia tabel lateksowych w R [zamknięte]

268

Na ogólną prośbę, wiki społeczności na temat produkcji tabel lateksowych w R. W tym poście przedstawię przegląd najczęściej używanych pakietów i blogów z kodem do tworzenia tabel lateksowych z mniej prostych obiektów. Dodaj dowolne, które przegapiłem i / lub podaj wskazówki, porady i małe sztuczki na temat tworzenia ładnie sformatowanych stołów lateksowych z R.

Pakiety:

  • xtable : dla standardowych tabel najprostszych obiektów. Ładna galeria z przykładami można znaleźć tutaj .
  • memisc : narzędzie do zarządzania danymi ankietowymi, zawiera narzędzia do tabel lateksowych (podstawowych) oszacowań modelu regresji.
  • Hmisc zawiera funkcję, latex()która tworzy plik tex zawierający wybrany obiekt. Jest dość elastyczny i może również generować longtabletabele lateksowe. W pliku pomocy znajduje się wiele informacji?latex
  • miscFuncs ma zgrabną funkcję „lateksową”, która konwertuje dane macierzy z mieszanymi wpisami alfabetycznymi i numerycznymi do tabeli LaTeX i drukuje je na konsoli, aby można je było skopiować i wkleić do dokumentu LaTeX.
  • pakiet texreg ( papier JSS ) konwertuje dane wyjściowe modelu statystycznego na tabele LaTeX. Łączy wiele modeli. Może poradzić sobie z około 50 różnymi typami modeli, w tym modelami sieciowymi i modelami wielopoziomowymi (lme i lme4).
  • pakiet reporttools ( papier JSS ) to kolejna opcja dla statystyk opisowych dotyczących zmiennych ciągłych, jakościowych i zmiennych daty.
  • pakiet tabel jest prawdopodobnie najbardziej ogólnym pakietem tworzącym tabele LaTeX w R dla statystyk opisowych
  • pakiet stargazer tworzy ładne tabele podsumowań porównawczych modeli statystycznych

Blogi i fragmenty kodu

Powiązane pytania :

Joris Meys
źródło
4
W Cross Validated (stats.SE) czytelnicy zainteresują tutaj następujący wpis na blogu: Kilka uwag na temat tworzenia skutecznych tabel .
gung - Przywróć Monikę
2
Możesz także użyć ztable. To sprawia, że ​​tabele w paski zebry w formatach LaTeX i HTML są łatwe. Jest dość elastyczny i prosty: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
skan
Jaka jest sugerowana „procedura” do pracy z wieloma tabelami w R (lub RStudio) i korzystania z nich z zewnętrznego programu Latex, takiego jak TexStudio, w celu osadzenia ich w znacznie większym projekcie?
skan
1
@skan To jest specyficzne dla lateksu. Jeśli tworzenie dokumentów „dzieci”, należy utworzyć je jako dokumenty lateksowe i użyj includelub input. Możesz użyć, writeLines()który działa zarówno z, jak kable()i xtable(). Przechowuj jako pliki .tex i rozwiązany problem.
Joris Meys,
1
OTOH, jeśli używasz wielu dokumentów i chcesz je połączyć w jeden (nie masz jasności co do tego), tworzysz dokumenty i używasz, inputaby przenieść jeden dokument do pozostałych. Podręcznik lateksowy powie ci, że jest to to samo, co wpisanie treści dokumentu w tym miejscu, dlatego nie ma potrzeby kopiowania i wklejania całej konfiguracji wykonanej w preambule.
Joris Meys,

Odpowiedzi:

22

Chciałbym dodać wzmiankę o pakiecie „napar”. Możesz napisać plik szablonu parzenia, którym byłby LaTeX z symbolami zastępczymi, a następnie „zaparzyć” go, aby utworzyć plik .tex do \ include lub \ input w twoim LaTeX. Coś jak:

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

Składnia zaparzania może również obsługiwać pętle, dzięki czemu można utworzyć wiersz tabeli dla każdego wiersza ramki danych.

Spacedman
źródło
Pakiet R.rsp i jego funkcja rstring () są podobne do brew :: brew (). Nie jestem pewien, czy jest lepiej, ale pakiet z pewnością zawiera więcej rzeczy. W obu przypadkach podoba mi się to podejście, ponieważ daje ono większą elastyczność w kodzie tex, nie rezygnując z odtwarzalności.
Richard DiSalvo,
21

Dzięki Joris za utworzenie tego pytania. Mamy nadzieję, że zostanie przekształcony w wiki społeczności.

Opakowania booktabs z lateksu dają ładne stoły. Oto post na blogu o tym, jak używać xtable do tworzenia tabel lateksowych wykorzystujących tabulatory

Dodałbym również apsrtablepakiet do miksu, ponieważ tworzy on ładnie wyglądające tabele regresji.

Kolejny pomysł: niektóre z tych pakietów (zwłaszcza memisc i apsrtable) pozwalają na łatwe rozszerzenia kodu w celu utworzenia tabel dla różnych obiektów regresji. Jednym z takich przykładów jest kod meme lme4 pokazany w pytaniu. Rozsądne może być uruchomienie repozytorium github w celu gromadzenia takich fragmentów kodu, a z czasem może nawet dodanie go do pakietu memisc. Jacyś chętni?

Ramnath
źródło
18

Stargazer pakiet jest kolejnym dobrym rozwiązaniem. Obsługuje obiekty z wielu często używanych funkcji i pakietów (lm, glm, svyreg, survival, pscl, AER), a także z zelig. Oprócz tabel regresji może również generować statystyki podsumowujące dla ramek danych lub bezpośrednio wyprowadzać zawartość ramek danych.

użytkownik1953965
źródło
15

Mam kilka sztuczek i obejmuję ciekawe „cechy” xtable i lateksu, które tu podzielę.

Trik 1: Usuwanie duplikatów w kolumnach i Trik 2: Korzystanie z Booktabs

Najpierw załaduj pakiety i zdefiniuj moją czystą funkcję

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

Teraz wygeneruj fałszywe dane

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

Teraz możemy wygenerować tabelę i użyć funkcji czyszczenia, aby usunąć zduplikowane wpisy w kolumnach etykiet.

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

to jest normalny xtable

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

jest to normalny xtable, w którym funkcja niestandardowa zmieniła duplikat na NA

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

Ta tabela korzysta z pakietu booktab (i potrzebuje \ usepackage {booktabs} w nagłówkach)

\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
źródło
12

Dwa narzędzia w pakiecie taRifx mogą być używane łącznie do tworzenia wielorzędowych tabel zagnieżdżonych dziedziczeń.

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

przykładowe dane wyjściowe z tabeli

Ari B. Friedman
źródło
2
Czy istnieje sposób na zrobienie czegoś podobnego, ale z całą ramką danych zamiast tylko jednego wektora, jak jest wprowadzane za pomocą bytable ()?
Thraupidae
5

... i Trick # 3 Multiline wpisów w Xtable

Wygeneruj więcej danych

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

Teraz stwórz nasz xtable, używając funkcji odkażania do zastąpienia nazw kolumn prawidłowymi poleceniami nowej linii lateksowej (w tym podwójnymi odwrotnymi ukośnikami, więc R jest szczęśliwy)

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

(chociaż nie jest to idealne, ponieważ potrzebujemy \ tabularnewline, aby tabela była poprawnie sformatowana, a Xtable nadal wstawia końcowy \, więc kończymy pustą linią pod nagłówkiem tabeli).

PaulHurleyuk
źródło
5

Możesz także użyć funkcji lateksowej z pakietu mikrofonów pakietu R

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

latextable (M), gdzie M jest macierzą z mieszanymi wpisami alfabetycznymi i numerycznymi, wyświetla na ekranie podstawową tabelę LaTeX, którą można skopiować i wkleić do dokumentu LaTeX. Tam, gdzie są małe liczby, zastępuje je również notacją indeksu (np. 1,2x10 ^ {- 3}).

Benjamin Taylor
źródło
5

Innym pakietem R do agregowania modeli wielu regresji w tabele LaTeX jest texreg .

Philip Leifeld
źródło