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文件:
    knitr
    默认情况下模拟交互式命令行wrt的行为<代码>打印ing。请注意,
    knitr
    也可以指定为R包渐晕图的旋转引擎

这是我最初的答案。但是请注意,这种解决方法现在已经完全过时了(而且它只适用于一个小的懒惰利基)

这是著名的

对于网格图形(如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()
您可以并且需要应用相同的策略。