【发布时间】:2019-03-21 15:16:20
【问题描述】:
我有一个函数,它既可以返回一些统计数据,又可以使用 R 基础图形绘制图表。我想抑制该函数的绘图,而是将绘图作为对象返回,以便可以从函数外部控制绘图与否。
我试过了:
使用gridGraphics 包,我可以按照this question 中的建议将基本图形转换为对象:
plot(1:10)
grid.echo()
a = grid.grab()
grid.draw(a)
剩下的问题是plot() 命令绘制了我想要抑制的情节。因此,我试图通过绘制到像answer here 建议的临时文件中的设备来抑制它。代码变成:
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 说它与当前设备的图形相呼应,没有提及任何限制。
谁能帮助我解决抑制基本图形绘图并将其作为对象返回的问题,无论是通过建议如何修复我的失败尝试,还是通过其他方法?
【问题讨论】: