【发布时间】: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 上发布答案。