【问题标题】:How to use imported functions in examples如何在示例中使用导入的函数
【发布时间】:2015-10-02 15:35:14
【问题描述】:

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

这是我的低级包,它将导出函数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 来使示例工作,但这会使阅读变得笨拙。

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

【问题讨论】:

    标签: r dependencies package


    【解决方案1】:

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

    如果您想在示例中使用该函数,则必须使该函数在全局环境中对用户可用,即您需要将其导出或使用library(lowlevel)

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        • 2022-01-24
        • 2016-09-22
        • 2019-10-04
        • 1970-01-01
        相关资源
        最近更新 更多