R ggplot&x27;s qplot不在寻源时执行
假设我有两个源文件,第一个名为R ggplot&x27;s qplot不在寻源时执行,r,ggplot2,r-faq,R,Ggplot2,R Faq,假设我有两个源文件,第一个名为example1.r,第二个名为example2.r(如下所示) 示例1.r plot(1:10,1:10) qplot(1:10,1:10) 示例2.r plot(1:10,1:10) qplot(1:10,1:10) 当我将example1.r作为源代码时,将绘制该图。然而,当我源代码example2.r时,它不是。这里的解决方案是什么 (示例2中的qplot.r is的函数)更新: .R文件:source的选项print.eval=TRUE将导致计算
example1.r
,第二个名为example2.r
(如下所示)
示例1.r
plot(1:10,1:10)
qplot(1:10,1:10)
示例2.r
plot(1:10,1:10)
qplot(1:10,1:10)
当我将example1.r作为源代码时,将绘制该图。然而,当我源代码example2.r时,它不是。这里的解决方案是什么
(示例2中的qplot.r is的函数)更新:
- .R文件:
的选项source
将导致计算结果的打印行为,就像在交互式命令行中一样print.eval=TRUE
source(“Script.R”,print.eval=TRUE)
- .Rnw文件:
默认情况下模拟交互式命令行wrt的行为<代码>打印ing。请注意,knitr
也可以指定为R包渐晕图的旋转引擎knitr
这是我最初的答案。但是请注意,这种解决方法现在已经完全过时了(而且它只适用于一个小的懒惰利基) 这是著名的 对于网格图形(如ggplot2或lattice),需要打印图形对象才能实际绘制它 在命令行上以交互方式自动完成此操作。在其他任何地方(在源文件、循环、函数、swave块中),您都需要显式地打印它
print (qplot (1 : 10, 1 : 10))
或者,您可以重新定义qplot
以进行打印:
qplot <- function (x, y = NULL, z = NULL, ...) {
p <- ggplot2::qplot (x = x, y = y, z = z, ...)
print (p)
}
qplot小点:你不需要invisible(p)
,因为print(p)
返回p
。谢谢Richie,print(p)
返回实际的invisible(p)
——这是我想要的(如果它是可见的,从命令行使用它会生成两次绘图)。相应地编辑了代码。感谢您的回答(+1)!我花了几个小时想弄明白这件事,真是疯了。如果您不介意的话,我还有两个相关的问题:1)上面显示的重新定义qplot()
是否可以很好地与ggplot2
的分层功能配合使用?2) 对于另一个ggplot2
函数,是否需要类似的重新定义,以产生输出-ggplot()
?@AleksandrBlekh:到目前为止,我一直在使用这种方法,它是有效的。但是我越来越少地使用它,因为我几乎从不使用源文件.R文件,而是使用.Rnw文件。我几乎完全改为使用knitr
而不是swave
,默认情况下knitr
模拟R命令行的print
行为,因此答案对我来说是非常过时的。哦,我明白了。是的,如果您使用ggplot()
而不是qplot()
您可以并且需要应用相同的策略。