脚本中的ggplot图不在Rstudio中显示

我有一个奇怪的问题与Rstudio:如果一个脚本调用ggplot2函数显示一个情节,然后使用源运行脚本不会产生的情节。如果我用Ctrl A选择整个脚本,则运行当前行或选择(Ctrl Enter),然后绘图显示。同样,将绘图命令输入控制台会产生正确的输出。

例如:

library(ggplot2)

p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()

只有产生输出,如果粘贴到控制台,而不是如果源。

有关于此的其他问题,但两者都不有帮助:

> ggplot2 ggsave function causes graphics device to not display plots falsely声称问题是在较新版本中修复,它没有。
> RStudio – ggplot not saving first plot when printing and saving multiple plots in a script关闭作为重复,但不仅不是一个重复,但dev.off()解决方法不工作(“dev.off()中的错误:无法关闭设备1(空设备) )

如何让Rstudio在脚本源代码时显示绘图?我使用Rstudio 0.98.1062和R 3.1.1。

解决方案是在ggplot对象上显式调用print():

library(ggplot2)

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
print(p)

ggplot函数返回类ggplot的对象; ggplot2通过重载打印函数来对类ggplot的对象执行不同的操作 – 而不是将它们打印到STDOUT,它创建图表。

一切都在交互模式下工作良好,因为R假设大多数命令通过print()函数运行。这是为了我们的方便,并允许我们键入rnorm(1)并获得任何可见的输出。当使用运行当前选择命令(Ctrl Enter)时,RStudio的行为就像每个选定的行都以交互模式输入并运行。您可以在运行少数选定的行后通过在控制台窗格中检查命令历史记录来验证。

但是当通过source()读取文件时,这种方便的模式被放弃。由于此函数旨在运行(可能长且计算成本高)的R脚本,因此不希望使用低优先级消息来污染STDOUT。这就是为什么source()默认情况下将只输出错误消息。如果你想要什么,你必须明确要求。

http://stackoverflow.com/questions/26643852/ggplot-plots-in-scripts-do-not-display-in-rstudio

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:脚本中的ggplot图不在Rstudio中显示