【问题标题】:R package lattice won't plot if run using source()如果使用 source() 运行,R package lattice 将不会绘图
【发布时间】:2011-07-21 21:36:22
【问题描述】:

我开始使用lattice 图形包,但我偶然发现了一个问题。我希望有人可以帮助我。 我想使用相应的函数绘制直方图。

这里是文件foo.r

library("lattice")

data <- data.frame(c(1:2),c(2:3))
colnames(data) <- c("RT", "Type")

pdf("/tmp/baz.pdf")
histogram( ~ RT | factor(Type), data = data)
dev.off()

当我使用R --vanilla &lt; foo.r 运行此代码时,一切正常。

但是,如果我使用第二个文件 bar.r

source("bar")

并运行 R --vanilla &lt; bar.r 代码会生成错误的 pdf 文件。 现在我发现source("bar", echo=TRUE) 解决了这个问题。这里发生了什么?这是一个错误还是我错过了什么?

我正在使用带有 lattice_0.19-30 的 R 版本 2.13.1 (2011-07-08)

【问题讨论】:

    标签: r graphics plot lattice


    【解决方案1】:

    它在FAQ for R 中——你需要print() 围绕你调用的格函数:

    7.22 为什么格子/格子图形不起作用?

    最可能的原因是您忘记告诉 R 显示 图形。诸如 xyplot() 之类的格函数创建一个图形对象,但是 不显示(ggplot2 图形也是如此,Trellis S-Plus 中的图形)。图形对象的 print() 方法产生 实际显示。当您在 命令行,自动打印结果,但在 source() 或 在您自己的函数中,您将需要一个显式的 print() 语句。

    【讨论】:

    • 哇,真快!我花了很多时间来找出真正的问题是什么。非常感谢!这有效:... print(histogram( ~ RT | factor(Type), data = data)) ...
    • 这应该适用于graphics 包中的plot() 函数吗?我看到了类似的行为,但这似乎无法解决它..
    • 啊。 plot 不使用 print 语句,但您需要在绘图前使用 dev.new() 或类似方法。
    • 我在stackoverflow.com/a/44098042/54964这里添加了一个例子,因为我认为答案是存根。
    【解决方案2】:

    案例示例

    1. visualise.r
      • 致电plot2this.r
        • 调用ggplot2并返回p对象

    这里修复了函数 plot2this.rreturn(p)return(print(p))

    初始plot2this.r

    p <- ggplot(dat.m, aes(x = Vars, y = value, fill=variable)) 
    return(p)
    

    修复

    p <- ggplot(dat.m, aes(x = Vars, y = value, fill=variable)) 
    return(print(p))
    

    现在输出:期望的输出与想要的情节。

    【讨论】:

      猜你喜欢
      • 2017-04-11
      • 2016-02-03
      • 2015-12-10
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多