ggplot 的 qplot 不会在采购时执行

ggplot's qplot does not execute on sourcing

提问人:Grega Kešpret 提问时间:7/13/2011 最后编辑:Julius VainoraGrega Kešpret 更新时间:11/27/2016 访问量:23083

问:

假设我有 2 个源文件,第一个命名,第二个(如下)。example1.rexample2.r

例子1.r

plot(1:10,1:10)

例子2.r

qplot(1:10,1:10)

当我获取 example1.r 时,绘制了图形。但是,当我获取 example2.r 时,它没有。这里的解决方案是什么?

(example2.r 中的 qplot 是 ggplot2 的函数)

GGPLOT2 R-常见问题

评论


答:

80赞 cbeleites unhappy with SX 7/13/2011 #1

更新

  • 。R files: 的选项将导致打印评估结果的行为,就像在交互式命令行中一样。sourceprint.eval=TRUE

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

  • 。Rnw 文件:默认情况下模拟交互式命令行 wrt 的行为。正在。请注意,也可以将其指定为 R 包小插图的 Sweaving 引擎。knitrprintknitr


这是我最初的答案。但请注意,恕我直言,这种解决方法现在已经完全过时了(而且它总是只适合小型懒惰的利基市场)。

这就是著名的FAQ 7.22:为什么格子/格子图形不起作用?

对于像 ggplot2 或 lattice 这样的网格图形,您需要打印图形对象才能实际绘制它。

在命令行上以交互方式,这是自动完成的。在其他任何地方(在要获取的文件、循环、函数、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)。

我在小插曲中使用这种方法,在这些小插曲中,我想完全按照交互式会话中的用户键入代码来编写代码。

评论

0赞 Richie Cotton 7/13/2011
小点:你不需要,因为退货。invisible(p)print(p)p
0赞 cbeleites unhappy with SX 7/15/2011
谢谢 Richie,实际上返回 - 这就是我想要的(如果它是可见的,从命令行使用它会产生两次绘图)。相应地编辑了代码。print (p)invisible (p)
0赞 Aleksandr Blekh 5/24/2014
谢谢你的回答(+1)!我快要疯了,试图弄清楚这个问题几个小时。如果您不介意,我还有两个额外的相关问题:1) 上面显示的重新定义是否与分层函数配合得很好?2)对于另一个函数,产生输出-,是否有必要进行类似的重新定义?qplot()ggplot2ggplot2ggplot()
2赞 cbeleites unhappy with SX 5/24/2014
@AleksandrBlekh:到目前为止,我使用这种方法的地方,它奏效了。但我使用它的次数越来越少,因为我几乎从未使用过.R 文件,但改用 .Rnw 文件。我几乎完全改用 代替 ,并且默认模拟 R 命令行的行为,所以答案对我来说已经过时了。sourceknitrSweaveknitrprint
2赞 cbeleites unhappy with SX 5/24/2014
哦,我明白。是的,如果您使用代替,您可以并且需要应用相同的策略。ggplot ()qplot ()