如果使用source()运行R包格子将不会绘制

时间:2011-07-21 21:36:23

标签: r graphics plot lattice

我开始使用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 < foo.r运行此代码时,它可以正常运行。

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

source("bar")

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

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

2 个答案:

答案 0 :(得分:20)

它位于FAQ for R - 你需要print()围绕你调用的格子函数:

  

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

     

最可能的原因是你忘了告诉R显示   图形。诸如xyplot()之类的格子函数创建了一个图形对象,但是   不显示它(ggplot2图形和Trellis也是如此)   S-Plus中的图形)。生成图形对象的print()方法   实际显示。当您以交互方式使用这些功能时   命令行,结果会自动打印,但在source()或   在你自己的函数中,你需要一个显式的print()语句。

答案 1 :(得分:1)

案例

  1. visualise.r
    • 致电plot2this.r
      • 调用ggplot2并返回p对象
  2. 此处修复了从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))
    

    现在输出:具有所需图的预期输出。