Инструменты для изготовления латексных столов в R

По общей просьбе, вики сообщества по созданию латексных таблиц в R. В этой статье я дам обзор наиболее часто используемых пакетов и блогов с кодом для создания латексных таблиц из менее простых объектов. Пожалуйста, не стесняйтесь добавлять все, что я пропустил, и / или давать советы, подсказки и маленькие хитрости о том, как производить красиво отформатированные латексные таблицы с R.

Пакеты:

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

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

Смежные вопросы:

8 ответов

Я хотел бы добавить упоминание о пакете "варево". Вы можете написать файл шаблона brew, который будет LaTeX с заполнителями, а затем "заварить" его, чтобы создать файл.tex для \ include или \ input в вашем LaTeX. Что-то вроде:

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

Синтаксис brew также может обрабатывать циклы, поэтому вы можете создать строку таблицы для каждой строки кадра данных.

Спасибо Joris за создание этого вопроса. Надеюсь, это будет сделано в вики сообщества.

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

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

Другая идея: некоторые из этих пакетов (особенно memisc и apsrtable) позволяют легко расширять код для создания таблиц для различных объектов регрессии. Одним из таких примеров является код memis lme4, показанный в вопросе. Возможно, имеет смысл запустить репозиторий github для сбора таких фрагментов кода, а со временем, возможно, даже добавить его в пакет memisc. Любой берущий?

Пакет Stargazer является еще одним хорошим вариантом. Он поддерживает объекты из многих часто используемых функций и пакетов (lm, glm, svyreg,74, 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
    )
@ 

это нормальная xtable, где пользовательская функция превратила дубликаты в NA

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

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

пример таблицы вывода

... и трюк #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 для замены имен столбцов правильными командами перевода строки латекса (включая двойную обратную косую черту, чтобы 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 все равно вставляет окончательный \, поэтому в итоге мы имеем пустую строку под заголовком таблицы.)

Еще один пакет R для объединения моделей множественной регрессии в таблицы LaTeX - это texreg.

Вы также можете использовать функцию latextable из пакета R micsFuncs:

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

latextable (M), где M - матрица со смешанными буквенными и числовыми записями, выводит на экран базовую таблицу LaTeX, которую можно скопировать и вставить в документ LaTeX. Там, где есть небольшие числа, он также заменяет их индексной нотацией (например, 1.2x10^{-3}).

Другие вопросы по тегам