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

标签 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 会在每个图表后询问单击或按 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/

相关文章:

r - 如何使 Shiny 的 selectInput 下拉列表在多个数据帧之间进行选择

r - 从虚拟编码观察创建共现矩阵

R 函数,用于在两条垂直线上绘制标签和定量数据,在这些点之间绘制线条

r - 在 R 中加载多个 RDS 文件作为自定义函数中的多个对象

r - 从 knitr 中的相同 block /语句生成两个图

r - data() 从哪里获取数据集描述?

重新排列数据框 - R

r - 绘制光栅文件

python - 是否有与 R 中的 smooth.spline 函数等效的 Python

R(和 dplyr?) - 按组从数据帧中采样,最大样本量为 n