我对阅读gamm4包的源代码时注意到的一个事实感到困惑。
\n它在两个地方从mgcv导入内部函数。
\n一处位于函数中(此处gamm4.setup链接到代码)
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)\nRun Code Online (Sandbox Code Playgroud)\n另一个地方是 gamm4 函数(此处链接到代码):
\n var.summary <- mgcv:::variable.summary(gp$pf,dl,nrow(mf)) ## summarize the input data\nRun Code Online (Sandbox Code Playgroud)\n在描述文件中,它在“取决于”下列出了 mgcv(在此处链接到完整的描述文件):
\nDepends: R (>= 2.9.0), methods, Matrix, lme4 (>= 1.0), mgcv (>= 1.7-23)\nRun Code Online (Sandbox Code Playgroud)\n此外,在 NAMESPACE 中它导入了 mgcv,尽管我认为这与我的问题无关。此处链接到命名空间。
\n如果我在正在开发的包中执行完全相同的操作,则使用另一个包中的内部函数会导致警告,并留下以下警告R CMD check:
\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\nRun Code Online (Sandbox Code Playgroud)\n然而,gamm4 在 CRAN 上没有注释或警告,我可以通过下载源代码并运行来确认R CMD checkgamm4 一切正常。
现在我的问题是:
\n注意:我知道使用内部仍然可能不是好的做法,例如,如 中所述help(":::"),所以我的问题主要是关于为什么R CMD check接受这一点。
编辑:感谢 @GaborCsardi 的评论,我了解到,:::如果您也是使用该函数的包的维护者,那么在包中使用不会引发警告。
例如,如果您是该包的维护者foo,则可以foo:::在另一个包中使用foo2而不会出现此警告。Maintainer请注意,只有当您在中的字段中使用相同的电子邮件地址时,这才有效DESCRIPTION。
gamm4在您的示例中,Simon Wood 是和的维护者mgcv。