我对Rstudio有一个奇怪的问题:如果脚本调用ggplot2函数来显示一个图,那么使用 Source 来运行脚本不会产生图。如果我使用Ctrl+A
选择整个脚本,则运行当前行或选择(Ctrl+Enter
),然后显示 图。同样,在控制台中键入绘图命令会产生正确的输出。
例如:
library(ggplot2)
p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()
只有在粘贴到控制台时才会生成输出,而不是源代码。
还有其他问题,但两者都没有帮助:
dev.off()
解决方法不起作用(“Error in dev.off() : cannot shut down device 1 (the null device)
”)如何在获取脚本时让Rstudio显示绘图?我使用的是Rstudio 0.98.1062和R 3.1.1。
答案 0 :(得分:102)
解决方案是在ggplot对象上显式调用print()
:
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
print(p)
ggplot
函数返回类ggplot的对象; ggplot2通过重载print
函数来对ggplot类的对象表现不同 - 而不是将它们打印到STDOUT,它创建了图表。
一切都在交互模式下运行良好,因为R假设大多数命令都是通过print()
函数运行的。这是为了方便我们,允许我们输入rnorm(1)
并获得任何可见的输出。当使用“运行当前选择”命令(Ctrl+Enter
)时,RStudio的行为就好像每个选定的行都以交互模式键入并运行。您可以在运行几条选定的行后,通过检查Console
窗格中的命令历史记录来验证这一点。
但是source()
读取文件时会放弃这种方便的模式。由于此函数旨在运行(可能长且计算成本高)R脚本,因此不希望用低优先级消息污染STDOUT。这就是默认情况下source()
仅输出错误消息的原因。如果你还需要其他任何东西,你必须明确要求。
答案 1 :(得分:15)
虽然这是一个很老的问题。我有同样的问题并找到了一个快速的解决方案,如果你想使用&#34; source&#34; R工作室编辑框上的按钮。
你可以简单地打开&#34;来源回声&#34; (Ctrl + Shift + Enter),图表显示为预期
答案 2 :(得分:0)
我最近遇到了这个问题,并意识到最新的方法是在创建情节后调用show(p)
。
答案 3 :(得分:0)
我在搜索类似问题时发现了这个问题(图未显示在RStudio中)。我试图通过部分运行它来解决一个复杂的ggplot2块的问题,但无法在图窗口中显示任何内容。
原因:我先前打开的tiff()
函数没有关闭。
解决方案:我运行了dev.off()
几次,直到所有先前的tiff()
函数都完成了,然后我才能够在RStudio中创建图并在图窗口中查看结果。