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

268

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

Пакеты:

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

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

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

Joris Meys
источник
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
1
OTOH, если вы используете несколько документов и хотите объединить их в один (вы не уверены в этом), вы создаете документы и используете их inputдля переноса одного документа в другие. Руководство по латексу скажет вам, что это то же самое, что печатать содержимое документа в этом месте, поэтому нет необходимости копировать и вставлять всю настройку, которую вы сделали в преамбуле.
Йорис

Ответы:

22

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

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

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

Spacedman
источник
Пакет R.rsp и его функция rstring () аналогичны brew :: brew (). Не уверен, что это лучше, но в пакете, конечно, больше вещей. В любом случае мне нравится этот подход, так как он дает большую гибкость в коде tex, не жертвуя воспроизводимостью.
Ричард ДиСальво,
21

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

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

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

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

Ramnath
источник
18

звездочет является еще одним хорошим вариантом. Он поддерживает объекты из многих часто используемых функций и пакетов (lm, glm, svyreg ,74, pscl, AER), а также из zelig. Помимо таблиц регрессии, он также может выводить сводную статистику для фреймов данных или напрямую выводить содержимое фреймов данных.

user1953965
источник
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)))
            })

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

PaulHurleyuk
источник
5

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

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

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

Бенджамин Тейлор
источник
5

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

Филип Лейфельд
источник