我在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()
,它的工作原理.但我读到:::
不推荐使用.
这样做的最佳方法是什么?如何从导出的函数调用内部函数?
但我读到不建议使用:::。
我认为您是根据R编写软件包的手册中的以下陈述提到这一点的。
使用
foo:::f
而不是foo::f
允许访问未导出的对象。通常不建议这样做,因为软件包作者可以在日常维护中更改未导出对象的语义。
不建议这样做的原因是未导出的函数没有文档,因此包编写者无法保证它们将继续做现在的工作。
但是,由于您引用的是自己的未导出功能,因此您可以完全控制这些功能中发生的事情,因此该异议并不那么重要。
foo:::fnsmall
因此,将其称为一个不错的选择。