Для различных функций в моем пакете cowplot мне нужно иметь возможность конвертировать графики ggplot2 в grobs с помощью функции ggplotGrob()
. Известная проблема в этом контексте состоит в том, что ggplotGrob()
требуется открытое графическое устройство, и в зависимости от графического устройства, открытого в данный момент, вызов этой функции создает ложный пустой график. Примеры этой проблемы см. В проблеме ggplot2 № 809 или совсем недавно проблема cowplot № 82.
Можно решить проблему, открыв устройство с нулевым pdf. См. Следующий пример:
library(ggplot2)
# make a plot
p <- qplot(1:10, 1:10)
pdf(NULL) # open NULL pdf device to absorb empty page
grob <- ggplotGrob(p) # convert plot
dev.off()
Теперь вот мой вопрос: безопасна ли последовательность pdf(NULL); ggplotGrob(...); dev.off()
для использования в пакете R, или есть сценарии, при которых я не могу предположить, что pdf(NULL)
будет успешным / возможным? Если такие сценарии существуют, существуют ли другие графические устройства, о существовании которых я могу предположить, и могу ли я проверить их, когда я нахожусь в ситуации, когда pdf(NULL)
не будет хорошей идеей? В качестве альтернативы, как лучше всего сделать код устойчивым к потенциальному сбою вызова pdf(NULL)
?
Обновление: см. Также это сообщение SO, в котором обсуждается проблема пустых страниц, но не подробно описываются безопасные методы решения проблемы.
Обновление 2: В этом комментарии говорится, что некоторые установки R не имеют функционирующий pdf()
. Таким образом, кажется, что действительно не всегда возможно открыть устройство pdf NULL. Тогда возникает вопрос: как я могу обойти эту проблему?
egg
. Что вы делаете? Используйтеpdf(NULL)
и надеетесь на лучшее? - person Claus Wilke   schedule 03.12.2017