R从包内的导出函数调用内部函数

R Calling internal function from an exported function inside package

我正在 RStudio 中创建一个 R 包。假设我的包 foo 中有两个函数 fnbig()fnsmall()fnbig() 是使用该包的用户必须可以访问的功能。 fnsmall() 是一个内部函数,用户不能访问但应该可以在 fnbig().

内部访问
# package code
fnsmall <- function()
{
bla bla..
}

#' @export
fnbig <- function()
{
bla bla..
x <- fnsmall()
bla..
}

我试过导出 fnsmall()。一切正常,但它乱丢了 NAMESPACE。我尝试不导出 fnsmall(),但是当使用 x <- fnsmall()x <- foo::fnsmall() 时它在 fnbig() 内部不起作用。然后我尝试使用 x <- foo:::fnsmall(),它起作用了。但我读到不推荐使用 :::

执行此操作的最佳方法是什么?如何从导出函数调用内部函数?

But I read that using :::is not recommended.

我认为你是根据 manual for writing packages by R.

中的以下陈述提到这一点的

Using foo:::f instead of foo::f allows access to unexported objects. This is generally not recommended, as the semantics of unexported objects may be changed by the package author in routine maintenance.

不推荐这样做的原因是未导出的函数没有文档,因此包作者无法保证他们会继续做他们现在做的事情。

但是,由于您指的是您自己未导出的函数,您可以完全控制这些函数中发生的事情,因此这个异议并不重要。

因此将其称为 foo:::fnsmall 是一个不错的选择。