我正在RStudio中创建一个R包。假设我的名为fnbig()
的包中有两个函数fnsmall()
和foo
。 fnbig()
是使用该包必须可供用户访问的函数。 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()
,它有效。但我读到不建议使用:::
。
这样做的最佳方法是什么?如何从导出的函数调用内部函数?
答案 0 :(得分:5)
但我读到使用:::不推荐使用。
我想你基于manual for writing packages by R中的以下陈述提到了这一点。
使用
foo:::f
代替foo::f
可以访问未导出的对象。通常不建议这样做,因为包装作者在日常维护中可能会更改未导出对象的语义。
不推荐这样做的原因是未导出的功能没有文档,因此不能保证包装作者方面他们会继续做他们现在所做的事情。
但是,由于您指的是您自己的未导出函数,因此您可以完全控制这些函数中发生的事情,因此该异议并不相关。
因此,foo:::fnsmall
是一个不错的选择。