簡體   English   中英

如何禁止將“S3 方法覆蓋”消息打印到用戶控制台

[英]how to suppress “S3 method overwritten” messages from being printed to user console

I have an R package called ggstatsplot ( https://indrajeetpatil.github.io/ggstatsplot/ ) which relies on a collection of packages that share a few S3 methods between each other. 因此,每次加載 package 時,用戶都會收到有關此問題的消息轟炸,這對大多數用戶來說沒有用。

> 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

有什么我可以在 package 內部實現的東西,以避免這些消息被打印到用戶的控制台? 也許使用.onAttach東西?

快速查看 GitHub 上 package 的代碼,在我看來,其中一些函數似乎應該從 NAMESPACE 中刪除。

您正在使用@importFrom()但是只需在DESCRIPTION 中添加一個“Imports:”聲明,然后通過指定命名空間來調用函數,即package::function就足夠了。 這樣一來,它們就不會附加到命名空間,也不會相互沖突。


仔細看了一下,似乎問題出在您導出的包上,而不是您的庫本身。 因此,例如簡單地調用library(broom.mixed)會產生沖突。 由於您導出了它的一些導入(來自broomExtra ),因此會出現相同的沖突。

似乎在他們的 GitHub 上已經存在一個問題:這里最好的情況是向他們發出拉取請求。 或者,也許您實際上並不需要首先導出這些功能。

因此,每次加載 package 時,用戶都會收到有關此問題的消息轟炸,這對大多數用戶來說沒有用。

作為一種“安心”的解決方法,用戶可以在加載任何受影響的包之前簡單地將環境變量_R_S3_METHOD_REGISTRATION_NOTE_OVERWRITES_設置0nofalse之一:

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

背景:對於任何對更多細節感興趣的人,在 rlang 的 GitHub 存儲庫中有一些關於使用 R 3.6 覆蓋 S3 方法變得冗長的指導性對話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM