如何在示例中使用导入的函数

时间:2015-07-14 06:23:19

标签: r dependencies package

我有一个从另一个包导入函数的包。我可以在常规代码中使用那些没有限定符的函数,但似乎不是在示例中。为了证明:

这是我的低级包,它将导出函数a

library(devtools)
library(roxygen2)

create("lowlevel")
cat(
  "#' A function in lowlevel pacakge.
#' 
#' Nothing interesting.
#' @return 1
#' @export
a <- function() 1
",
  file = "lowlevel/R/a.R"
)

这是我的高级软件包,希望在示例中使用a

create("highlevel")
cat(
  "#' A function in highlevel package.
#' 
#' Nothing interesting.
#' @return 2
#' @examples
#' a() + b()
#' @importFrom lowlevel a
#' @export
b <- function() 2
",
  file = "highlevel/R/b.R"
)

现在我们构建并安装软件包:

roxygenize("lowlevel")
roxygenize("highlevel")
install.packages(build("lowlevel"), repos = NULL, type = "source")
install.packages(build("highlevel"), repos = NULL, type = "source")

当我运行该示例时,我收到错误。

library(highlevel)
example(b)
## Error in eval(expr, envir, enclos) : could not find function "a"

highlevel确实了解该功能,因为NAMESPACE文件包含以下行:

importFrom(lowlevel,a)

我可以通过提供一个完全限定的名称lowlevel::a来使该示例正常工作,但这使得它看起来很笨拙。

有没有办法在示例中使用导入的函数而不限定其名称?

2 个答案:

答案 0 :(得分:2)

导入函数的目的是让它可用于包中的其他函数,这就是为什么在包代码中使用a时没有问题。

如果要在示例中使用该功能,则必须在全局环境中为用户提供该功能,即您需要将其导出或使用library(lowlevel)

答案 1 :(得分:1)

按照Heather和by Jenny的建议,出口似乎是前进的方向。

您还需要在highlevel包中为重新导出的功能创建一个虚拟帮助页面。 good example是重新导出tidyr管道运营商的magrittr包。

#' Pipe operator
#'
#' See \code{\link[magrittr]{\%>\%}} for more details.
#'
#' @name %>%
#' @rdname pipe
#' @keywords internal
#' @export
#' @importFrom magrittr %>%
#' @usage lhs \%>\% rhs
NULL