2013-04-05 18 views
2

首先,你需要effectslme4軟件包如果我運行的腳本來運行下面的腳本與運行v功能時,如何暫停對每個情節

library(effects) 
library(lme4) 

我有以下腳本

devAskNewPage(ask=TRUE) 

fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), sleepstudy, 
      REML = 0, verbose = TRUE) 
plot(effect("Day",fm8)) 
qqmath(ranef(fm8)) 

手動,R在每張圖之後詢問Click or ENTER for next page。但是,當我運行以下功能時,

somefunc<-function() 
{ 
devAskNewPage(ask=TRUE) 
fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), sleepstudy, 
      REML = 0, verbose = TRUE) 
plot(effect("Day",fm8)) 
qqmath(ranef(fm8)) 

} 

R只會要求Click or ENTER for next page爲最後的情節。我怎樣才能讓它在函數中詢問每個圖?

+1

它們是否必須按順序顯示,或者您是否願意將它們放在一起放在同一設備上? – joran 2013-04-05 21:05:02

+0

@joran一個好點。無論哪種方式對我來說都很好。我想知道爲什麼devAskNewPage不工作,雖然。 – 2013-04-05 21:10:18

+3

我認爲這可能是http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f的一個相當微妙的例子; 'plot(effect(...))'調用'xyplot'。嘗試在'plot(effect(...))'語句周圍放置一個'print()'? – 2013-04-05 21:28:08

回答

3

如果繪製在一起是可以接受的,你可以試試這個:

library(gridExtra) 
somefunc<-function() 
{ 
fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), sleepstudy, 
      REML = 0, verbose = TRUE) 
p1 <- plot(effect("Day",fm8)) 
p2 <- qqmath(ranef(fm8))$Subject 
class(p1) <- 'trellis' 
grid.arrange(p1,p2,nrow = 2) 
} 

影響與類所產生的情節包裝混亂,混淆了grid.arrange,所以我不得不改回。我覺得grid.arrange應該更聰明。

我只能推測devAskNewPage出了什麼問題。繪製代碼的effect非常精細。它很可能會以覆蓋該設置的方式操作圖形設備。

編輯

我有點驚訝,但本Bolker的評論是正確的(即這是R FAQ 7.22版本/例如,「爲什麼格/網格顯卡不行?」,因爲effects包內部呼叫lattice::xyplot)。這與OP的問題一致:

somefunc<-function() 
{ 
devAskNewPage(ask=TRUE) 
fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), sleepstudy, 
      REML = 0, verbose = TRUE) 
p1 <- plot(effect("Day",fm8)) 
p2 <- qqmath(ranef(fm8))$Subject 
print(p1) 
print(p2) 
}