如何在示例中使用导入函数
How to use imported functions in examples
我有一个从另一个包导入函数的包。我可以在常规代码中使用那些没有限定符的函数,但在示例中似乎不行。演示:
这是我的低级包,它将导出函数 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
但这会使阅读变得笨拙。
有没有办法在示例中使用导入的函数而不限定它们的名称?
导入一个函数的目的是让它对包中的其他函数可用,这就是为什么在包代码中使用 a
没有问题。
如果您想在示例中使用该函数,则必须使该函数在全局环境中对用户可用,即您需要将其导出或使用 library(lowlevel)
.
按照 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
我有一个从另一个包导入函数的包。我可以在常规代码中使用那些没有限定符的函数,但在示例中似乎不行。演示:
这是我的低级包,它将导出函数 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
但这会使阅读变得笨拙。
有没有办法在示例中使用导入的函数而不限定它们的名称?
导入一个函数的目的是让它对包中的其他函数可用,这就是为什么在包代码中使用 a
没有问题。
如果您想在示例中使用该函数,则必须使该函数在全局环境中对用户可用,即您需要将其导出或使用 library(lowlevel)
.
按照 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