假设我有2个源文件,第一个文件名为example1.r,第二个文件名为example2.r(如下所示)。


plot(1:10,1:10)


example2.r

qplot(1:10,1:10)


当我获得example1.r的源代码时,便会绘制图形。但是,当我获取example2.r时却没有。这里有什么解决方案?

(example2.r中的qplot是ggplot2的功能)

#1 楼

更新:



.R文件:source的选项print.eval=TRUE将导致评估结果的打印行为,如在交互式命令行中一样。


source("Script.R", print.eval=TRUE)




.Rnw文件:knitr默认情况下模拟交互式命令行wrt的行为。 printing。请注意,对于R包小插图,knitr也可以指定为Sweaving引擎。




这是我的原始答案。但是请注意,这种解决方法现在已经完全过时了,恕我直言(它总是只对小型的懒惰利基有利)。

这是著名的常见问题解答7.22:为什么晶格/格子图形不起作用? br />
对于ggplot2或点阵之类的网格图形,需要打印图形对象才能实际绘制它。

在命令行上,这是自动完成的。您需要在其他所有地方(内部文件,循环,函数,Sweave块)进行显式打印。

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)
}


(这会将轴标签更改为x和y)。

我在要编写代码的小插图中使用这种方法就像用户在交互式会话中输入的一样。

评论


或者在源代码中使用echo = T

–哈德利
2011年7月13日在12:43



次要点:因为print(p)返回p,所以不需要invisible(p)。

– Richie Cotton
2011年7月13日在13:38

谢谢Richie,print(p)返回实际上不可见的(p)-这就是我想要的(如果可以看到,则在命令行中使用它会产生两次绘图)。相应地编辑了代码。

–塞班族人对SX不满意
2011年7月15日在9:47

@AleksandrBlekh:到目前为止,我一直在使用这种方法。但是我使用它的方式越来越少,因为我几乎从不使用.R文件,而是使用.Rnw文件。我几乎完全更改为使用knitr而不是Sweave,并且knitr默认情况下模拟R命令行的打印行为,因此答案对我来说bigyl已过时。

–塞班族人对SX不满意
2014年5月24日13:00

哦,我懂了。是的,如果您使用ggplot()而不是qplot(),则可以并且需要应用相同的策略。

–塞班族人对SX不满意
2014年5月24日13:27