【问题标题】:Delayed warning messages using suppressWarnings in R script when resetting par()重置 par() 时使用 R 脚本中的 suppressWarnings 延迟警告消息
【发布时间】:2016-12-29 10:19:06
【问题描述】:

问题:我正在尝试为 R 包编写脚本,为了对我的用户尽心尽责,我在绘制任何内容之前保存了他们的图形参数,以便我可以在脚本的结尾。我知道在执行此操作时收到警告消息是正常的,因为其中一些无法重置,但我使用suppressWarnings() 试图避免该输出到达用户。这是一个简化的示例:

Plot4Things <- function(){

    # suppress warnings when saving parameters
    suppressWarnings(opar <- par())

    # adjust parameter
    par(mfrow = c(2,2))

    plot(seq(1,20), pch = 16)
    plot(seq(1,20), pch = 17)
    plot(seq(1,20), pch = 18)
    plot(seq(1,20), pch = 19)

    # suppress warnings while restoring original parameters
    suppressWarnings(par(opar))
}

第一次调用此函数不会给我任何警告消息或控制台输出。只是一个漂亮的图表,我验证mfrow 选项是否已使用par() 正确重置。但是,以后每次调用Plot4Things() 函数时,都会得到以下输出:

Plot4Things()
Plot4Things()
# There were 12 warnings (use warnings() to see them)

警告是关于无法重置的图形参数的无害的事情(这很好,因为我不想这样做)。我完全不依赖这种保存/重置参数的方法,那么有没有更好的方法来做到这一点?有没有办法让警告消息停止延迟出现?在内心深处,我真的只是想了解这种行为,以便将来改进我的写作。

提前致谢!

【问题讨论】:

  • 一般情况下,将重置放入on.exit。这可以保证即使您的函数中存在导致提前中止的错误,它也会运行。这应该为 all 清理完成。

标签: r plot


【解决方案1】:

要设置参数并保存旧参数以进行恢复,请使用no.readonly

opar <- par(no.readonly = TRUE)

那么你可以完全避免使用suppressWarnings

并且,如评论中所述,将清理放入您在函数开头保存par 后直接声明的on.exit

opar <- par(no.readonly = TRUE)
on.exit(par(opar))

作为警告,文档的示例警告说,关于使用 no.readonly

……这不是一般的好习惯

……但它没有继续解释为什么。因此,我会简单地忽略这个警告。

【讨论】:

  • 感谢您的帮助-我已经完成并更改了所有脚本,并且不再遇到问题(尽管仍然对 suppressWarnings() 的行为感到困惑)
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多