2011-07-21 30 views
6

我開始使用lattice圖形包,但是我偶然發現了一個問題。我希望有人能幫助我。 我想用相應的函數繪製直方圖。如果使用源代碼運行R封裝格,將不會繪圖()

這裏是文件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

回答

15

它是在FAQ for R - 你需要print()周圍的格子函數調用:

7.22爲什麼格/格圖形不起作用?

最可能的原因是您忘記告訴R顯示 圖。像xyplot()這樣的格子函數會創建一個圖形對象,但 不顯示它(S-Plus中的ggplot2圖形和Trellis 圖形也是如此)。圖形對象的print()方法產生實際的顯示結果 。當您在 命令行中交互使用這些函數時,結果將自動打印,但在自己的函數中的source()或 中,您將需要一個顯式的print()語句。的情況下

+1

哇,那很快!我花了很多時間來找出實際問題所在。非常感謝! This works: '... print(histogram(〜RT | factor(Type),data = data))...' – woobert

+0

這應該適用於'graphics'包中的'plot()'函數?我看到類似的行爲,但這似乎並沒有解決它.. – naught101

+1

啊。 'plot'在沒有* print語句的情況下工作*,但在繪圖之前需要使用dev.new()或類似語句。 – naught101

0

  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)) 

現在輸出:預計產出想要的情節。