运行R函数时如何暂停每个图

时间:2013-04-05 20:45:56

标签: r

首先,您需要使用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最后一个情节。如何让它询问函数中的每个图?

1 个答案:

答案 0 :(得分: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绘图代码非常精细。它很可能以一种覆盖该设置的方式操纵图形设备。

修改

我有点惊讶,但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)
}