10

我有一个名为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

4

2 回答 2

5

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

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


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

似乎他们的 GitHub 上已经存在一个关于它的问题:HERE所以最好的情况是向他们发出拉取请求。或者,也许您实际上并不需要首先导出这些功能。

于 2020-05-12T12:01:26.607 回答
3

因此,每次加载包时,用户都会收到关于此问题的消息轰炸,这对大多数用户来说没有用处。

作为一种“安心”的解决方法,用户可以简单地将环境变量设置_R_S3_METHOD_REGISTRATION_NOTE_OVERWRITES_其中一个0no或者false 加载任何受影响的包之前:

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

背景:对于任何对更多细节感兴趣的人,在 rlang 的 GitHub 存储库中有一些关于用 R 3.6 覆盖 S3 方法变得冗长的有启发性的对话。

于 2020-11-04T23:49:04.157 回答