По общему запросу, wiki сообщества по созданию латексных таблиц в R. В этом посте я расскажу о наиболее часто используемых пакетах и блогах с кодом для создания латексных таблиц из менее простых объектов. Пожалуйста, не стесняйтесь добавлять какие-либо пропущенные и/или давать советы, подсказки и небольшие трюки о том, как создавать красиво отформатированные латексные таблицы с R.
latex()
, которая создает файл tex, содержащий выбранный объект. Он довольно гибкий и может также выводить таблицы longtable
латекса. Там много информации в файле справки ?latex
Я хотел бы добавить упоминание пакета "brew". Вы можете написать файл шаблона brew, который будет LaTeX с заполнителями, а затем "brew", чтобы создать .tex файл для \include или\input в ваш LaTeX. Что-то вроде:
\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}
Синтаксис brew также может обрабатывать циклы, поэтому вы можете создать строку таблицы для каждой строки фрейма данных.
Пакет stargazer - еще один хороший вариант. Он поддерживает объекты из многих часто используемых функций и пакетов (lm, glm, svyreg, survival, pscl, AER), а также от zelig. В дополнение к регрессионным таблицам он также может выводить сводную статистику для фреймов данных или напрямую выводить содержимое фреймов данных.
Спасибо Джорису за создание этого вопроса. Надеюсь, что это будет сделано в вики сообщества.
Пакеты booktabs в латексе создают красивые таблицы. Вот сообщение в блоге о том, как использовать xtable для создавать латексные таблицы, которые используют booktabs
Я бы также добавил пакет apsrtable
в микс, поскольку он создает красиво выглядящие таблицы регрессии.
Другая идея. Некоторые из этих пакетов (например, memisc и apsrtable) позволяют легко расширять код для создания таблиц для разных объектов регрессии. Одним из таких примеров является код lme4 memisc, показанный в вопросе. Возможно, было бы целесообразно запустить репозиторий github для сбора таких фрагментов кода, и со временем может даже добавить его в пакет memisc. Любые участники?
У меня есть несколько трюков и работы вокруг интересных "функций" xtable и Latex, которые я расскажу здесь.
Trick # 1: Удаление дубликатов в столбцах и трюке # 2: Использование Booktabs
Сначала загрузите пакеты и определите мою чистую функцию
<<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
)
@
это нормальный xxtable, где пользовательская функция превратила дубликаты в 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
Еще один пакет R для объединения нескольких моделей регрессии в таблицы LaTeX texreg.
Вы также можете использовать латентную функцию из пакета R micsFuncs:
http://cran.r-project.org/web/packages/miscFuncs/index.html
latextable (M), где M - матрица со смешанными алфавитными и числовыми записями, выводит на экран базовую таблицу LaTeX, которую можно скопировать и вставить в документ LaTeX. Там, где есть небольшие числа, он также заменяет их на индексные обозначения (например, 1.2x10 ^ {- 3}).
... и Trick # 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 по-прежнему помещается в final \, поэтому в итоге мы получаем пустую строку под заголовком таблицы.)