2

首先,你需要effectslme4包来运行下面的脚本

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最后一个情节。我怎样才能让它询问函数中的每个情节?

4

1 回答 1

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应该更聪明一点。

我只能推测出了什么问题devAskNewPageeffect绘图代码非常精细。它很可能以覆盖该设置的方式操纵图形设备。

编辑

我有点惊讶,但 Ben 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)
}
于 2013-04-05T21:20:57.160 回答