Інструменти для виготовлення таблиць з латексу в R [закрито]


268

За загальним запитом, вікі спільноти щодо виготовлення таблиць з латексу в Р. У цій публікації я огляну найбільш часто використовувані пакети та блоги з кодом для створення таблиць з латексу з менш прямолінійних об'єктів. Будь ласка, не соромтесь додавати будь-які, які я пропустив, та / або давати поради, підказки та невеликі хитрощі щодо створення добре відформатованих таблиць з латексу за допомогою R.

Пакети:

  • xtable : для стандартних таблиць більшості простих об'єктів. Приємну галерею з прикладами можна знайти тут .
  • memisc : інструмент для управління даними опитування, містить деякі інструменти для латексних таблиць (базових) регресійних оцінок моделі.
  • Hmisc містить функцію, latex()яка створює текстовий файл, що містить об'єкт вибору. Він досить гнучкий, а також може виводити longtableтаблиці з латексу. У довідковому файлі багато інформації?latex
  • miscFuncs має чітку функцію 'latextable', яка перетворює матричні дані зі змішаними алфавітними та числовими записами в таблицю LaTeX і друкує їх на консоль, щоб вони могли бути скопійовані та вставлені в документ LaTeX.
  • Пакет texreg ( папір JSS ) перетворює статистичну модель моделі в таблиці LaTeX. Об’єднує кілька моделей. Може впоратися з приблизно 50 різними типами моделей, включаючи мережеві моделі та багаторівневі моделі (lme та lme4).
  • Пакет reporttools ( папір JSS ) - це ще один варіант описової статистики щодо постійних, категоричних змінних та змінних дат.
  • Пакет таблиць є, мабуть, найбільш загальним пакетом виготовлення таблиць LaTeX в R для описової статистики
  • Пакет stargazer складає приємні порівняльні статистичні зведені моделі зведення

Блоги та фрагменти коду

Пов’язані запитання:


4
На перехресній валідації (stats.SE) наступна публікація блогу зацікавить читачів тут: Деякі зауваження щодо створення ефективних таблиць .
gung - Відновіть Моніку

2
Ви також можете використовувати ztable. Це дозволяє легко робити таблиці з смужками зебри у форматах LaTeX та HTML. Це досить гнучко і просто: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
скан

Яка запропонована «процедура» працювати з багатьма таблицями в R (або RStudio) та використовувати їх із зовнішньої програми Latex, наприклад TexStudio, для вбудовування їх у значно більший проект?
скан

1
@skan Це специфічно для латексу. Якщо ви створюєте "дитячі" документи, ви створюєте їх як латексні документи та використовуєте includeабо input. Ви можете використовувати, writeLines()які працюють і з kable()і xtable(). Зберігати як .tex файли та вирішити проблему.
Joris Meys

1
OTOH, якщо ви використовуєте кілька документів і хочете об'єднати їх в один (вам це не зрозуміло), ви створюєте документи і використовуєте inputдля отримання одного документа в інший. Посібник з латексу скаже вам, що це те саме, що вводити вміст документа в цьому місці, отже, не потрібно копіювати і вставляти всю установку, яку ви зробили в преамбулі.
Joris Meys

Відповіді:


22

Я хотів би додати згадку про пакет "варити". Ви можете написати файл шаблону заварювання, який був би LaTeX з заповненнями, а потім "заварити" його, щоб створити .tex файл, щоб \ включити або \ ввести у свій LaTeX. Щось на зразок:

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

Синтаксис brew також може обробляти петлі, тому ви можете створити рядок таблиці для кожного рядка фрейму даних.


Пакет R.rsp та його функція rstring () схожий на brew :: brew (). Не впевнений, чи краще, але на упаковці, безумовно, є більше речей. У будь-якому випадку мені подобається такий підхід, оскільки він надає більше гнучкості в текстовому коді, не приносячи шкоди відтворюваності.
Річард Дісальво

21

Дякуємо Joris за створення цього питання. Сподіваємось, він буде перетворений на вікі спільноти.

Пакети книжкових ящиків в латексі створюють приємні на вигляд таблиці. Ось публікація в блозі про те, як використовувати xtable для створення таблиць латексу, які використовують закладки

Я також додав би apsrtableпакет до суміші, оскільки він створює гарні регресивні таблиці.

Інша ідея: Деякі з цих пакетів (особливо memisc і apsrtable) дозволяють легко розширювати код для створення таблиць для різних об'єктів регресії. Один із таких прикладів - код меміску lme4, показаний у запитанні. Можливо, має сенс запустити сховище github для збору таких фрагментів коду, а з часом, можливо, навіть додати його до пакета memisc. Хто-небудь, хто приймає?


18

Звіздар пакет ще один хороший варіант. Він підтримує об'єкти з багатьох часто використовуваних функцій та пакетів (lm, glm, svyreg, survival, pscl, AER), а також від zelig. Окрім таблиць регресії, вона також може виводити підсумкову статистику для кадрів даних або безпосередньо виводити вміст кадрів даних.


15

У мене є кілька хитрощів, і робота викликає цікаві «особливості» 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)))
            })

Тепер ми можемо генерувати таблицю та використовувати функцію очищення для видалення повторюваних записів у стовпцях міток.

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

це звичайний xtable, де спеціальна функція перетворила дублікати в NA

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

Ця таблиця використовує пакет закладки (і в заголовках потрібен \ 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 можна використовувати в концерті для створення багаторядкових таблиць вкладених ієрархій.

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 ()?
Thraupidae

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

Тепер виробляємо наш xtable, використовуючи функцію sanitize, щоб замінити назви стовпців правильними командами нового строку 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 все ще ставиться у фіналі \, тож ми закінчуємо порожній рядок під заголовком таблиці.)


5

Ви також можете використовувати функцію латексного меню з пакету R micsFuncs:

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

латекс (M), де M - матриця зі змішаними алфавітними та числовими записами, виводить основну таблицю LaTeX на екран, яку можна скопіювати та вставити в документ LaTeX. Там, де є невеликі числа, він також замінює їх нотацією індексу (наприклад, 1,2x10 ^ {- 3}).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.