Я пытаюсь создавать таблицы в R (не в RMarkdown, поскольку этот вопрос помогает ответить) с помощью modelsummary
, и мне трудно добавлять метки Справка (например, tab:hello
). Как указывает Винсент в этот ответ, дополнительные аргументы для modelsummary
должны автоматически передаваться вперед, но, похоже, это не работает с метками LaTeX. Вот пример:
library(modelsummary)
library(kableExtra)
x <- rnorm(100)
y <- rnorm(100)
modelsummary(lm(y ~ x),
output = "latex",
caption = "test",
label = "hello")
Это производит:
\begin{table}
\caption{test}
\centering
\begin{tabular}[t]{lc}
\toprule
& Model 1\\
\midrule
(Intercept) & \num{-0.143}\\
& (\num{0.100})\\
x & \num{-0.023}\\
& (\num{0.092})\\
\midrule
Num.Obs. & \num{100}\\
R2 & \num{0.001}\\
R2 Adj. & \num{-0.010}\\
AIC & \num{283.4}\\
BIC & \num{291.2}\\
Log.Lik. & \num{-138.698}\\
F & \num{0.061}\\
\bottomrule
\end{tabular}
\end{table}
Между тем, это прекрасно работает с вызовом kable
:
df <- cbind.data.frame(x, y)
kable(head(df), "latex",
caption = "test",
label = "hello")
Что производит:
\begin{table}
\caption{\label{tab:hello}test}
\centering
\begin{tabular}[t]{r|r}
\hline
x & y\\
\hline
0.8078318 & -0.0219732\\
\hline
0.4660209 & -0.9973773\\
\hline
-1.0620694 & -0.1360954\\
\hline
0.5639881 & 0.0185161\\
\hline
0.3459854 & 0.1333345\\
\hline
-0.8035314 & -0.0759982\\
\hline
\end{tabular}
\end{table}
Странно, этот работает только при указании подписи тоже. Определение только label
в kable
не создает ярлык.
В идеале я хотел бы создать только метку, но если мне также нужно добавить подпись, я могу справиться с этим (поскольку похоже, что это проблема и с kable
, или просто с таблицами LaTeX в целом ).
Заранее спасибо за помощь! Это очень ценится.
Я считаю, что это ограничение самого LaTeX, которое требует подписи для правильной нумерации таблиц и ссылок. См. этот ответ для обсуждения и альтернативного механизма:
https://tex.stackexchange.com/a/438267/16188
Кроме того, я думаю, полезно отметить, что это не специфическая проблема modelsummary
. Как вы, возможно, знаете, modelsummary
поддерживает несколько пакетов для создания таблиц, которые создают разные выходные форматы: kableExtra
, gt
, flextable
или huxtable
. Создателем таблиц по умолчанию для LaTeX является kableExtra
.
Вот минимальный пример в kableExtra
, который воспроизводит ту же проблему:
library(kableExtra)
dat <- mtcars[1:3, 1:3]
Ярлык не появляется:
kbl(dat, format = "latex", label = "fig:test") |>
kable_styling()
#> \begin{table}
#> \centering
#> \begin{tabular}[t]{l|r|r|r}
#> \hline
#> & mpg & cyl & disp\\
#> \hline
#> Mazda RX4 & 21.0 & 6 & 160\\
#> \hline
#> Mazda RX4 Wag & 21.0 & 6 & 160\\
#> \hline
#> Datsun 710 & 22.8 & 4 & 108\\
#> \hline
#> \end{tabular}
#> \end{table}
Появляется ярлык:
kbl(dat, format = "latex", caption = "", label = "fig:test") |>
kable_styling()
#> \begin{table}
#>
#> \caption{\label{tab:fig:test}}
#> \centering
#> \begin{tabular}[t]{l|r|r|r}
#> \hline
#> & mpg & cyl & disp\\
#> \hline
#> Mazda RX4 & 21.0 & 6 & 160\\
#> \hline
#> Mazda RX4 Wag & 21.0 & 6 & 160\\
#> \hline
#> Datsun 710 & 22.8 & 4 & 108\\
#> \hline
#> \end{tabular}
#> \end{table}
Как бы то ни было, в modelsummary
я обычно вставляю заголовок непосредственно в аргумент title
, используя \\
, чтобы «избежать» обратной косой черты. Например:
library(modelsummary)
mod <- lm(mpg ~ hp, mtcars)
modelsummary(mod, title = "\\label{fig:test}", output = "latex")
#> \begin{table}
#>
#> \caption{\label{fig:test}}
#> \centering
#> \begin{tabular}[t]{lc}
#> \toprule
#> & Model 1\\
#> \midrule
#> (Intercept) & \num{30.099}\\
#> & (\num{1.634})\\
#> hp & \num{-0.068}\\
#> & (\num{0.010})\\
#> \midrule
#> Num.Obs. & \num{32}\\
#> R2 & \num{0.602}\\
#> R2 Adj. & \num{0.589}\\
#> AIC & \num{181.2}\\
#> BIC & \num{185.6}\\
#> Log.Lik. & \num{-87.619}\\
#> F & \num{45.460}\\
#> RMSE & \num{3.86}\\
#> \bottomrule
#> \end{tabular}
#> \end{table}