为什么它不会导致 gamm4 使用 mgcv 的内部函数的警告?

Øys*_*n S 8 r mgcv

我对阅读gamm4包的源代码时注意到的一个事实感到困惑。

\n

它在两个地方从mgcv导入内部函数。

\n

一处位于函数中(此处gamm4.setup链接到代码)

\n
  G <- mgcv:::gam.setup(formula,pterms,\n                 data=data,knots=knots,sp=NULL,\n                 min.sp=NULL,H=NULL,absorb.cons=TRUE,sparse.cons=0,gamm.call=TRUE)\n
Run Code Online (Sandbox Code Playgroud)\n

另一个地方是 gamm4 函数(此处链接到代码):

\n
  var.summary <- mgcv:::variable.summary(gp$pf,dl,nrow(mf)) ## summarize the input data\n
Run Code Online (Sandbox Code Playgroud)\n

在描述文件中,它在“取决于”下列出了 mgcv(在此处链接到完整的描述文件):

\n
Depends: R (>= 2.9.0), methods, Matrix, lme4 (>= 1.0), mgcv (>= 1.7-23)\n
Run Code Online (Sandbox Code Playgroud)\n

此外,在 NAMESPACE 中它导入了 mgcv,尽管我认为这与我的问题无关。此处链接到命名空间。

\n

如果我在正在开发的包中执行完全相同的操作,则使用另一个包中的内部函数会导致警告,并留下以下警告R CMD check

\n
\xe2\x9d\xaf checking dependencies in R code ... WARNING\n  Unexported objects imported by \':::\' calls:\n    \xe2\x80\x98mgcv:::gam.setup\xe2\x80\x99 \xe2\x80\x98mgcv:::variable.summary\xe2\x80\x99\n    See the note in ?`:::` about the use of this operator.\n    Including base/recommended package(s):\n    \xe2\x80\x98mgcv\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

然而,gamm4 在 CRAN 上没有注释或警告,我可以通过下载源代码并运行来确认R CMD checkgamm4 一切正常。

\n

现在我的问题是:

\n
    \n
  • 我缺少什么?gamm4 的作者做了什么技巧,以便使用另一个包中的内部函数不会导致警告?
  • \n
\n

注意:我知道使用内部仍然可能不是好的做法,例如,如 中所述help(":::"),所以我的问题主要是关于为什么R CMD check接受这一点。

\n

bre*_*auv 9

编辑:感谢 @GaborCsardi 的评论,我了解到,:::如果您也是使用该函数的包的维护者,那么在包中使用不会引发警告。

例如,如果您是该包的维护者foo,则可以foo:::在另一个包中使用foo2而不会出现此警告。Maintainer请注意,只有当您在中的字段中使用相同的电子邮件地址时,这才有效DESCRIPTION

gamm4在您的示例中,Simon Wood 是和的维护者mgcv

  • 为什么不将两个维护者电子邮件更改为您的,然后您会看到只要两个电子邮件地址相同,就允许使用`:::`。AFAICT 没有白名单。 (3认同)
  • 我还没有看到这个记录,但我不确定。FWIW在代码中:https://github.com/wch/r-source/blob/fed508dfd0bc45887be29c5a11f9b1e5b68c22f9/src/library/tools/R/QC.R#L6226 (2认同)