13

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

# package code
fnsmall <- function()
{
bla bla..
}

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

我试过导出fnsmall(). 一切正常,但它会乱扔命名空间。我尝试不导出,但是在使用or时fnsmall()它在内部不起作用。然后我尝试使用,它可以工作。但我读到不推荐使用。fnbig()x <- fnsmall()x <- foo::fnsmall()x <- foo:::fnsmall():::

这样做的最佳方法是什么?如何从导出的函数中调用内部函数?

4

1 回答 1

10

但我读到不推荐使用 :::。

我认为您根据R 编写软件包的手册中的以下陈述提到了这一点。

使用foo:::f而不是foo::f允许访问未导出的对象。通常不建议这样做,因为包作者在日常维护中可能会更改未导出对象的语义。

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

但是,由于您指的是您自己的未导出函数,因此您可以完全控制这些函数中发生的事情,因此这个反对意见不那么相关。

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

于 2017-09-12T08:53:35.317 回答