66

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

例子1.r

plot(1:10,1:10)

例子2.r

qplot(1:10,1:10)

当我获取 example1.r 时,会绘制图表。但是,当我获取 example2.r 时,它不会。这里的解决方案是什么?

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

4

1 回答 1

79

更新

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

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

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


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

这是著名的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)。

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

于 2011-07-13T07:40:59.983 回答