【问题标题】:What can cause devtools::document() and devtools::lint() to stop recognizing imports?什么会导致 devtools::document() 和 devtools::lint() 停止识别导入?
【发布时间】:2018-01-25 21:37:41
【问题描述】:

我正在修改我的 R 包,突然 document() 停止识别我使用 @importFrom 获得的功能。我可以使用我的包的唯一方法是为包名添加前缀(例如stringr::str_detect)。由于我有很多这些,这花了很长时间。这在我删除我的NAMESPACE 文件后开始发生,因为我不小心留下了@importFrom 空白。 devtools::document() 似乎仍然适用于我的其他项目。我注意到lint() 也看到了这些假问题。

我将包文件保存在版本控制中,但还没有看到它停止工作的任何明显原因。什么样的文本错误会导致这种情况?

一些例子:

我有以下代码块在我的包中定义了一个实用函数:

#' Check if string ends with y.
#' @param x String.
#' @param y String Scalar.
#' @importFrom stringr str_sub str_length
str_ends_with <- function(x, y) {
  stopifnot(length(y) == 1)
  leny <- str_length(y)
  lenx <- str_length(x)
  ifelse(lenx < leny, FALSE,
         str_sub(x, start = lenx - leny + 1) == y)
}

然而,lint() 看到了

R/util.R:69:11: warning: no visible global function definition for 'str_length'
  leny <- str_length(y)
          ^~~~~~~~~~
R/util.R:70:11: warning: no visible global function definition for 'str_length'
  lenx <- str_length(x)
          ^~~~~~~~~~

【问题讨论】:

  • devtools::document() 现在输出什么?
  • 它给出了一个错误,指出函数不在范围内。它似乎会选择 lint 找到的每个函数并一次告诉我一个。
  • 你能分享你的命名空间吗?现在没什么好去的了。可能尝试清理并重建,然后再次记录
  • 在包目录上运行 royxgen2::roxygenize() 解决了这个问题。之后,我可以正常运行devtools::document()
  • 太棒了!也许您可以在您的 qn 上发布答案。

标签: r devtools


【解决方案1】:

调用roxygen2::roxygenize() 成功创建了一个新的NAMESPACE 文件。通常devtools::document() 通常可以做到这一点,但显然不是我的情况。但是,document() 之后会按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2014-09-06
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多