我有一个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')
}