es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

kableExtra: No se puede guardar una tabla HTML con expresiones matemáticas y no se puede mostrar un histograma en línea junto a una tabla Latex.

Quiero guardar una tabla en R como imagen que incluya tanto expresiones matemáticas en los nombres de las columnas como un histograma en línea de la función spec_hist() en kableExtra. Idealmente, me gustaría que la tabla esté formateada como una tabla de Latex, pero HTML también serviría.

El problema que tengo es que cuando intento guardar una tabla HTML kable, las expresiones matemáticas no se interpretan correctamente, pero el histograma en línea se muestra bien.

Mientras tanto, si intento guardar una tabla Latex kable, las expresiones matemáticas se interpretan correctamente, pero el histograma no aparecerá.

¿Podría ser esto un error (¿dos errores?) en kableExtra? ¿O me estoy perdiendo algo?

Tenga en cuenta que la tabla HTML kable se ve perfectamente bien (expresiones matemáticas y trama en línea) en R Studio/R Markdown. Pero quiero guardar y reutilizar la imagen.

La tabla Latex kable, sin embargo, nunca muestra el histograma en línea, ya sea que se muestre en R o se guarde en un archivo.

Aquí hay un ejemplo reproducible:

library(knitr)
library(kableExtra)

df <- mtcars[1:6,] %>% 
          mutate(`$\\theta_{boot}$` = "") %>% # agregar una columna vacía donde irán los histogramas en línea
          rename(`$mpg$` = mpg, # renombrar algunas columnas a expresiones matemáticas
                 `$\\bar{cyl}$` = cyl, 
                 `$\\bar{disp}$` = disp,
                 `$hp$` = hp, 
                 `$drat$` = drat)

# crear datos ficticios para los histogramas en línea

hist_dat <- list(runif(20), runif(20), runif(20), runif(20), runif(20), runif(20))

# crear tabla HTML

kbl(df, escape = FALSE, booktabs = T, format = "html") %>%
  add_header_above(c("Some Header" = 6, "Some Other Header" = 7)) %>% # agregar encabezado
  kable_styling(latex_options = c("repeat_header"), font_size = 12) %>%
  column_spec(12, image = spec_hist(hist_dat)) %>% # agregar histogramas en línea
  pack_rows("Group 1", 1, 3) %>%
  pack_rows("Group 2", 4, 6) %>%
  kable_paper() %>%
  as_image(file = 'temp.png')
  #guardar kable (file = 'temp.png')

# crear tabla Latex

kbl(df, escape = FALSE, booktabs = T, format = "latex") %>%
  add_header_above(c("Some Header" = 6, "Some Other Header" = 7)) %>% 
  kable_styling(latex_options = c("repeat_header"), font_size = 12) %>%
  column_spec(12, image = spec_hist(hist_dat)) %>% 
  pack_rows("Group 1", 1, 3) %>%
  pack_rows("Group 2", 4, 6) %>%
  kable_paper(full_width = TRUE) %>%
  as_image(file = 'temp_latex.png')
  #guardar kable (file = 'temp.png')

La imagen guardada en HTML es:

La columna con las expresiones matemáticas se imprime como el valor literal en lugar de las expresiones matemáticas interpretadas.

La imagen guardada en Latex es:

Ahora las expresiones matemáticas se interpretan correctamente, pero los histogramas no se trazan.

También encontré ninguna diferencia si usé as_image() o save_kable() para guardar las imágenes.

¿Alguna idea?

¡Gracias!

EDITAR:
Notas de hardware: estoy en una Mac con una instalación de LaTeX. Los gráficos funcionan bien, aunque todas las llamadas que implican latex fallaron en mi máquina con Windows (mismo código, instalado MikTeX, Ghostscript y Magick).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que kableExtra actualmente no admite guardar una tabla de Latex con un histograma en línea como una imagen. Esto se debe probablemente al hecho de que Latex requiere la generación de un archivo de imagen separado e incluido en el documento, mientras que HTML puede incrustar la imagen directamente en la tabla.

    Una solución sería generar la tabla de Latex como de costumbre, y luego generar por separado las imágenes del histograma usando spec_hist() y ggsave(). Estas imágenes pueden luego ser incluidas en el documento de Latex usando \includegraphics{}.

    Por ejemplo:

    En el código anterior, primero generamos la tabla de Latex como de costumbre usando kbl(). Luego iteramos sobre las columnas de la tabla, generamos un histograma usando ggplot2 y guardamos la imagen resultante usando ggsave(). Note que damos a cada imagen un nombre de archivo único basado en el nombre de la columna correspondiente en la tabla.

    Una vez generadas las imágenes, podemos incluirlas en el documento de Latex de la siguiente manera:

    Aquí, primero incluimos la tabla de Latex usando \input{mytable.tex}, donde mytable.tex es el archivo de Latex generado por kbl(). Luego incluimos las imágenes del histograma usando \includegraphics{}, donde cada imagen recibe su correspondiente nombre de archivo basado en el nombre de la columna.

    Esto debería generar un documento de Latex con tanto la tabla formateada como los histogramas en línea incluidos. Note que puede ser necesario ajustar el tamaño y el formato de los histogramas para que coincidan con el estilo de su documento.

Comments are closed.