Подписи с помощью пакета R "таблиц" с форматированием kableExtra - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь добавить заголовок к выводу таблицы из пакета "таблицы" в R с последующим дополнительным форматированием с использованием kableExtra.

Хотя другие потоки нашли способы добавления заголовков заголовков с помощью дополнительного кода LaTeX ( Заголовок не отображается для таблицы LaTeX при вязании с использованием функции Hmisc LaTeX и Hmisc :: latex не печатает заголовок с / табличный объект ), эти решения не совместимы с более новой функцией toKable(), которая позволяет дополнительное форматирование с помощью kableExtra.

Обычно заголовок добавляется при использовании kable(x, caption = "mycaption"). Однако, когда он генерируется следующим образом, возникает ошибка (Error in toKable(., booktabs = T) : 'table' must be a 'tabular' object.). Появляется, если я пытаюсь добавить какое-либо дополнительное форматирование через latex(), такое как добавление заголовка, тип объекта изменится, делая его непригодным для использования с функцией toKable(). Буду очень признателен за понимание того, как использовать toKable() с дополнительным форматированием LaTeX, которое было передано через latex()!

library(tables)
library(magrittr)
library(kableExtra)

 tabular((Species + 1) ~ (n=1) + Format(digits=2)* (Sepal.Length + Sepal.Width)*(mean + sd), data=iris) %>%
   latex(., options = list(tabular = "longtable",
                           toprule = "\\caption{Table 1. My favorite caption}\\\\\\toprule")) %>%
   toKable(., booktabs = T)

Вывод LaTeX перед передачей на toKable():

\begin{longtable}{lccccc}
\caption{Table 1. My favorite caption}\\\toprule
 &  & \multicolumn{2}{c}{Sepal.Length} & \multicolumn{2}{c}{Sepal.Width} \\ 
Species  & n & mean & sd & mean & \multicolumn{1}{c}{sd} \\ 
\hline
setosa  & $\phantom{0}50$ & $5.01$ & $0.35$ & $3.43$ & $0.38$ \\
versicolor  & $\phantom{0}50$ & $5.94$ & $0.52$ & $2.77$ & $0.31$ \\
virginica  & $\phantom{0}50$ & $6.59$ & $0.64$ & $2.97$ & $0.32$ \\
All  & $150$ & $5.84$ & $0.83$ & $3.06$ & $0.44$ \\
\hline 
\end{longtable}

1 Ответ

0 голосов
/ 11 апреля 2019

Немного покопавшись в коде и попытавшись понять, как работает каждый из них ... Я попытался вставить список параметров прямо в toKable.Кажется, это работает, и кажется, что toKable имеет общие параметры, аналогичные latex().

tabular((Species + 1) ~ (n=1) + Format(digits=2)* (Sepal.Length + Sepal.Width)*(mean + sd),
        data=iris) %>%
  toKable(., booktabs = T,
          options = list(tabular = "longtable",
                                          toprule = "\\caption{My favorite caption}\\\\\\toprule"))

. Это корректно выводит следующий код LaTex, как указано выше:

\begin{longtable}{lccccc}
\caption{Table 1. My favorite caption}\\\toprule
 &  & \multicolumn{2}{c}{Sepal.Length} & \multicolumn{2}{c}{Sepal.Width} \\ \cmidrule(lr){3-4}\cmidrule(lr){5-6}
Species  & n & mean & sd & mean & \multicolumn{1}{c}{sd} \\ 
\midrule
setosa  & $\phantom{0}50$ & $5.01$ & $0.35$ & $3.43$ & $0.38$ \\
versicolor  & $\phantom{0}50$ & $5.94$ & $0.52$ & $2.77$ & $0.31$ \\
virginica  & $\phantom{0}50$ & $6.59$ & $0.64$ & $2.97$ & $0.32$ \\
All  & $150$ & $5.84$ & $0.83$ & $3.06$ & $0.44$ \\
\bottomrule 
\end{longtable}

Код LaTeX может быть представлен по мере необходимости в отчетах или иным образом.В документе Rmarkdown, преобразованном в PDF, это может выглядеть (не забудьте назвать пакеты tables и kableExtra):

enter image description here

...