如果使用 source() 运行,R 包lattice将不会绘图

发布于 2024-11-25 16:11:26 字数 633 浏览 1 评论 0原文

我开始使用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

I started using the lattice graphic package but I stumbled into a problem. I hope somebody can help me out.
I want to plot a histogram using the corresponding function.

Here is the file 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()

When I run this code using R --vanilla < foo.r it works all fine.

However, if I use a second file bar.r with

source("bar")

and run R --vanilla < bar.r the code produces an erroneous pdf file.
Now I found out that source("bar", echo=TRUE) solves the problem. What is going on here? Is this a bug or am I missing something?

I'm using R version 2.13.1 (2011-07-08) with lattice_0.19-30

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

﹏雨一样淡蓝的深情 2024-12-02 16:11:26

它位于 常见问题解答中对于 R - 您需要在您调用的格子函数周围使用 print()

7.22 为什么点阵/网格图形不起作用?

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

It is in the FAQ for R -- you need print() around the lattice function you call:

7.22 Why do lattice/trellis graphics not work?

The most likely reason is that you forgot to tell R to display the
graph. Lattice functions such as xyplot() create a graph object, but
do not display it (the same is true of ggplot2 graphics, and Trellis
graphics in S-Plus). The print() method for the graph object produces
the actual display. When you use these functions interactively at the
command line, the result is automatically printed, but in source() or
inside your own functions you will need an explicit print() statement.

披肩女神 2024-12-02 16:11:26

案例示例

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

这里修复了 plot2this.r 中来自 return(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))

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

Example of the case

  1. visualise.r
    • calls plot2this.r
      • calls ggplot2 and returns p object

Here the fix in the function plot2this.r from return(p) to return(print(p)).

Initial plot2this.r

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

Fix

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

Output now: expected output with the wanted plot.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文