Кто-нибудь еще заметил, что tableGrob работает медленно?

Я рисую данные о производительности базы данных, в основном с помощью ggplot2. Есть 8 страниц относительно сложных сюжетов и 2 страницы tableGrobs. Я только что настроил свой код, чтобы выяснить, где я провожу время, и из 25 секунд всего 13 из этих секунд приходится на последние 2 страницы, которые являются tableGrobs. Эти 25 секунд включают в себя загрузку данных, серьезный анализ с помощью stringR и т. д. Вот пример вывода: https://www.dropbox.com/s/3s6bi70py5pgpdm/PSPROD-259-341-1-plot.pdf , хотя последняя страница для этих таймингов имеет 75 строк и 17 столбцы.

Итак, это то, что видят другие? Есть ли альтернатива tableGrob, которая может быть быстрее?

Код, который я использую для создания таблицы SQL:

sqlSummaryText1 <- tableGrob(head(subset(main$DF_SQL_SUMMARY, 
                                         select=-c(PX_EXEC,LOG_READS)),75),
                             show.rownames = FALSE, 
                             gpar.coretext = gpar(fontsize=5),
                             gpar.coltext = gpar(fontsize=5),
                             padding.v = unit(1, "mm"),
                             padding.h = unit(1, "mm"),
                             show.colnames = TRUE,
                             col.just = "left", 
                             gpar.corefill = gpar(fill=NA,col=NA),
                             h.even.alpha = 0 )
grid.arrange(sqlSummaryText1,ncol = 1, widths=c(1))

person Tyler Muth    schedule 29.08.2013    source источник
comment
Кстати, здесь вам не нужен grid.arrange; используйте grid.draw или grid.table напрямую   -  person baptiste    schedule 29.08.2013


Ответы (1)


Трудно представить что-то медленнее, чем grid.table, почти любая альтернатива была бы намного быстрее. Вы можете использовать textplot или addtable2plot в базовой графике или различные параметры для создания таблиц в pdf-документах, обработанных Sweave/knitr и т. д.

Основная причина, по которой grid.table работает медленно, заключается в том, что каждая ячейка содержит отдельный textGrob; Было бы гораздо быстрее, но менее универсально и более громоздко реализовать один textGrob для всех меток (см. пример 2 из этот документ). Базовая реализация показана здесь.

person baptiste    schedule 29.08.2013
comment
баптист: отличный ответ! textplot сократил время с ~ 13-15 секунд для последних двух страниц до 1 секунды! Конечно, это не так красиво, но это просто дополнительные данные, которые не обязательно должны быть красивыми. - person Tyler Muth; 29.08.2013