R包使devtools :: check失败,因为即使在NAMESPACE中导入了“找不到函数”

时间:2019-06-08 18:21:33

标签: r dplyr devtools roxygen2 magrittr

尝试使用Rroxygen2构建我的第一个devtools软件包。我在%>%部分中添加了使用mutate@examples的函数。当我运行check()时,它失败了,因为它找不到函数%>%mutate

基于thisthisthis,我尝试了以下操作:

函数的#' importFrom magrittr %>%文件中有#' importFrom dplyr mutate.R。我在magrittr文件的dplyr下也有Imports:DESCRIPTION。运行document()后,我的NAMESPACE文件包含importFrom(dplyr,mutate)importFrom(magrittr,"%>%")

最小的R/test.R文件:

#' Conditional mutate
#'
#' \code{mutate_cond} mutates the \code{data.frame} only on the rows that
#' satisfy the condition.
#' 
#' @param .data \code{data.frame}
#' @param condition expression with the condition to be evaluated
#' @param ... arguments passed to \code{mutate}
#' @param envir environment inherited from \code{parent.frame()}
#'
#' @return \code{data.frame}
#' @importFrom dplyr mutate
#' @importFrom magrittr %>%
#'
#' @examples
#' data(iris)
#' iris %>%
#'    mutate(aux = 0) %>%
#'    mutate_cond(Petal.Length > 1.3,aux = 3)
#'
#' @export
mutate_cond <- function(.data, condition, ..., envir = parent.frame()) {
  condition <- eval(substitute(condition), .data, envir)
  .data[condition, ] <- .data[condition, ] %>% mutate(...)
  .data
}

最小的DESCRIPTION文件:

Package: test
Version: 0.1
Date: 2019-06-07
Title: Functions
Description: Some functions I use.
Author: me
Maintainer: me <myemail@email.com>
Encoding: UTF-8
License: GPL-3
Imports: dplyr, magrittr

NAMESPACEdocument()生成:

# Generated by roxygen2: do not edit by hand

export(mutate_cond)
importFrom(dplyr,mutate)
importFrom(magrittr,"%>%")

我希望此示例代码能够成功运行并传递check()。相反,我收到此错误消息:

❯ checking examples ... ERROR
  Running examples in ‘test-Ex.R’ failed
  The error most likely occurred in:

  > base::assign(".ptime", proc.time(), pos = "CheckExEnv")
  > ### Name: mutate_cond
  > ### Title: Conditional mutate
  > ### Aliases: mutate_cond
  > 
  > ### ** Examples
  > 
  > data(iris)
  > iris %>%
  +    mutate(aux = 0) %>%
  +    mutate_cond(Petal.Length > 1.3,aux = 3)
  Error in iris %>% mutate(aux = 0) %>% mutate_cond(Petal.Length > 1.3,  : 
    could not find function "%>%"
  Execution halted

1 error ✖ | 0 warnings ✔ | 0 notes ✔

此外,如果我将require(dplyr)require(magrittr)添加到@examples部分,则错误消失,或者如果我删除整个@examples部分,则错误消失。

为什么这个包裹不能通过check()

谢谢!

2 个答案:

答案 0 :(得分:2)

在控制台中运行usethis::use_pipe()也可以解决问题。

答案 1 :(得分:0)

添加

exportPattern("^[[:alpha:]]+")

在我的NAMESPACE文件中解决了我这方面的问题。