首先,您需要 effects
和 lme4
软件包来运行下面的脚本
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 会在每个图表后询问单击或按 ENTER 进入下一页
。但是当我运行以下函数时,
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 仅要求单击或按 ENTER 进入下一页
查看最后一个图。我怎样才能让它询问函数中的每个图?
最佳答案
如果将它们绘制在一起可以接受,您可以尝试以下操作:
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)
}
effects 包与结果图的类混淆,混淆了 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)
}
关于r - 运行 R 函数时如何暂停每个绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15843243/