同一R包中未导出函数的显式命名空间-最佳实践



我有一个R包(MyPackage(,它有一些导出的(使用@export(和一些未导出的函数。如果我从包中的其他地方调用一个未导出的函数,那么引用它的最合适方式是什么?例如,给定以下代码:

#' @export
f1 <- function(){
f2()
}
f2 <- function(){
print('hello')
}

当我在包裹上打短绒时,我收到警告:

no visible global function definition for 'f2'

我可以使用MyPackage:f2,但我的理解是这没有必要。对于同一个包中的函数,我不希望得到错误"没有可见的全局函数定义"。在这种情况下,最佳做法是什么?

正如我和其他人所提到的,您的代码不会产生这样的警告。

就最佳实践而言,不要使用MyPackage:::f2。如前所述。

函数未导出到NAMESPACE中不存在用户。如果您使用roxygen,只为您想要的函数放置@export标记出口就可以了。

正如您所做的那样,只对要提供的函数使用@export标记,而不对内部函数使用。您应该用一些roxygen注释来装饰您的内部函数,然后决定是否要为此函数创建一个手动页面。

如果不希望为f2创建手动页面,则应使用#' @noRd标记。(来源(

#' Internal function printing "hello"
#' @description A function that prints the text "hello".
#' @noRd
f2 <- function(){
print('hello')
}

如果你想为f2创建一个手册页面,但要将其从手册索引中排除,你可以使用@keywords internal,它甚至可以与f1或基本上任何你不希望在手册中太显眼的函数一起使用。

#' Internal function printing "hello"
#' @description A function that prints the text "hello".
#' @keywords internal
f2 <- function(){
print('hello')
}

最新更新