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
是一个不错的选择。
我正在 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 offoo::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
是一个不错的选择。