如何禁止将 "S3 method overwritten" 消息打印到用户控制台

how to suppress "S3 method overwritten" messages from being printed to user console

我有一个名为 ggstatsplot (https://indrajeetpatil.github.io/ggstatsplot/) 的 R 程序包,它依赖于一组相互共享一些 S3 方法的程序包。因此,每次加载包时,用户都会收到有关此问题的消息轰炸,这对大多数用户来说没有用。

> library(ggstatsplot)
Registered S3 method overwritten by 'broom.mixed':
  method      from 
  tidy.gamlss broom
Registered S3 methods overwritten by 'car':
  method                          from
  influence.merMod                lme4
  cooks.distance.influence.merMod lme4
  dfbeta.influence.merMod         lme4
  dfbetas.influence.merMod        lme4

有什么我可以在内部包中实现的,以避免将这些消息打印到用户的控制台吗?也许使用 .onAttach?

快速查看了 GitHub 上的包代码,在我看来,其中一些功能似乎应该从 NAMESPACE 中删除。

您正在使用 @importFrom(),但只需在 DESCRIPTION 中添加一个 "Imports:" 声明,然后通过指定命名空间调用函数,即 package::function 就足够了。这样一来,它们就不会附加到命名空间,也不会相互冲突。


仔细看了一下,问题似乎出在您导出的包上,而不是您的库本身。因此,例如简单地调用 library(broom.mixed) 会产生冲突。由于您导出了它的一些导入(来自 broomExtra),因此出现了相同的冲突。

他们的 GitHub: HERE 似乎已经有一个问题,所以最好的情况是向他们发出拉取请求。或者,也许您真的不需要首先导出这些函数。

Therefore, every time the package is loaded, the user is bombarded with messages about this issue, which is not useful for the most users.

作为一种“安心”的解决方法,用户 可以简单地将环境变量 _R_S3_METHOD_REGISTRATION_NOTE_OVERWRITES_ 设置为 one of 0, no or false before 加载任何受影响的包:

Sys.setenv(`_R_S3_METHOD_REGISTRATION_NOTE_OVERWRITES_` = "false")

背景:有一些关于用 R 3.6 覆盖 S3 方法变得冗长的有益对话 over at rlang's GitHub repo 对于任何对更多细节感兴趣的人。