У меня есть функция, которая возвращает статистику и строит график, используя основную графику R. Я хочу запретить построение графиков из этой функции и вместо этого вернуть график как объект, чтобы можно было управлять графиком или нет извне функции.
Я пробовал:
Используя пакет gridGraphics
, я могу преобразовать базовый графический график в объект, как предложено в этом вопросе :
plot(1:10)
grid.echo()
a = grid.grab()
grid.draw(a)
Остается проблема в том, что команда plot()
рисует график, который я хочу подавить. Таким образом, я попытался подавить его, печатая на устройстве во временном файле, как ответ здесь предлагает. Код становится:
ff = tempfile()
svg(filename = ff)
plot(1:10)
grid.echo()
a = grid.grab()
dev.off()
unlink(ff)
но теперь, grid.echo()
не может найти графику для эха и выдает предупреждение:
Warning message:
In grid.echo.recordedplot(recordPlot(), newpage, prefix, device) :
No graphics to replay
Я проследил эту проблему до grid.echo()
, когда я не мог выводить графику с других устройств, кроме устройства по умолчанию Rstudio, независимо от того, находится он во временном файле или нет. Это само по себе странно, поскольку grid.echo()
docs говорит, что оно отображает графику с текущего устройства, не упоминая никаких ограничений.
Может ли кто-нибудь помочь мне решить проблему подавления базового графического сюжета и вернуть его как объект, либо предложив, как исправить мою неудачную попытку, либо другим способом?