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

时间:2016-01-04 10:53:14

标签: r r-package

我正在RStudio中创建一个R包。假设我的名为fnbig()的包中有两个函数fnsmall()foofnbig()是使用该包必须可供用户访问的函数。 fnsmall()是一个内部函数,用户无法访问,但应该可以在fnbig()内访问。

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

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

我已尝试导出fnsmall()。所有的作品,但它都是NAMESPACE。我尝试不导出fnsmall(),但在使用fnbig()x <- fnsmall()时,它在x <- foo::fnsmall()内无效。然后我尝试使用x <- foo:::fnsmall(),它有效。但我读到不建议使用:::

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

1 个答案:

答案 0 :(得分:5)

  

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

我想你基于manual for writing packages by R中的以下陈述提到了这一点。

  

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

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

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

因此,foo:::fnsmall是一个不错的选择。