gpt4 book ai didi

r - 为什么 ggplot 不允许抑制其 geoms 生成的消息?

转载 作者:行者123 更新时间:2023-12-02 01:26:54 27 4
gpt4 key购买 nike

来自ggridges包的geom_密度_ridges geom创建了山脊线,如果未指定带宽,它会尝试找到一个合理的值。然后,它使用 base R message 函数报告该值(请参阅 https://twitter.com/ClausWilke/status/921363157553172480)。

base R 函数 suppressMessages 函数旨在抑制此类消息。例如,此代码输出一条消息:

message('This is a message');

这段代码没有输出任何内容:

suppressMessages(message('This is a message'));

但是,由于某种原因,当将此几何图形添加到 ggplot 时,消息的抑制似乎被抑制了。以下代码确实仍然会生成一条消息:

require('ggplot2');
require('ggridges');
suppressMessages(ggplot(Orange, aes(x=age,y=Tree)) + geom_density_ridges());

(具体来说,“选择 319 的联合带宽”。)

这是为什么呢? ggplot 是否会采取一些措施来确保无论用户的规范如何,消息都会通过?或者这实际上是明智的行为,只是我碰巧不知道?

生成 RMarkdown 报告时,可以将 block 选项 message 设置为 message=FALSE,这会抑制渲染级别的所有消息。由于这是我的用例,我的问题就解决了。

正如 ggridges 包的作者 Claus Wilke 所建议的,您始终可以手动设置 带宽 以避免出现消息 ( https://twitter.com/ClausWilke/status/921361195231215616 )。

但是为什么suppressMessages首先抑制消息?

这是我碰巧不知道的预期行为吗?

最佳答案

当您调用ggplot()时,该命令实际上并不绘制绘图 - 它创建一个 ggplot 对象。只有当该对象被打印时,才会真正绘制出绘图。当您在 R 控制台中键入表达式时,默认行为是调用 print()结果这就是为什么它看起来像 ggplot()绘制一个图。

请注意,您遇到的警告不会在创建 ggplot 对象期间发生;它们发生在该对象的打印过程中。所以如果你运行

suppressMessages(ggplot(...))

本质上与

相同
print(suppressMessages(ggplot(...)))

在交互模式下运行 R 时。但由于 ggplot() 没有生成消息,没有任何内容被抑制,并且在打印结果对象时这些消息仍然出现。要抑制打印期间创建的消息,您需要包装实际的 print()声明 suppressMessages() .

suppressMessages(print(ggplot(...)))

关于r - 为什么 ggplot 不允许抑制其 geoms 生成的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com