什么会导致 devtools::document() 和 devtools::lint() 停止识别导入?
What can cause devtools::document() and devtools::lint() to stop recognizing imports?
我正在修改我的 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)
^~~~~~~~~~
调用 roxygen2::roxygenize()
成功创建了一个新的 NAMESPACE
文件。通常 devtools::document()
通常可以做到这一点,但显然不是我的情况。但是,document()
之后会按预期工作。
我正在修改我的 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)
^~~~~~~~~~
调用 roxygen2::roxygenize()
成功创建了一个新的 NAMESPACE
文件。通常 devtools::document()
通常可以做到这一点,但显然不是我的情况。但是,document()
之后会按预期工作。