roxygen2为何将自定义函数在NAMESPACE中声明为S3method?
问题原因与解决方法
问题原因
roxygen2会将带点的函数名(形如generic.class)默认识别为S3方法,你的函数名wrap.it被误判为S3泛型函数wrap的it类实现,因此NAMESPACE里生成了S3method(wrap,it)而非导出该函数的语句。
解决办法
有两种可行方案:
方案1:明确指定导出的函数名
在roxygen注释中把@export替换为@export wrap.it,强制roxygen2将其作为普通函数导出:
#' @title core text wrapping function #' @param x the text input #' @param len the maximum length for each of line #' @return the wrapped text #' @examples wrap.it("a long string bla bla bla", 10) #' @export wrap.it wrap.it <- function(x, len) { sapply(x, function(y) paste(strwrap(y, len), collapse = "\n"), USE.NAMES = FALSE) }
重新运行devtools::document("./XX")后,NAMESPACE会生成正确的导出语句:
# Generated by roxygen2: do not edit by hand export(wrap.it)
方案2:修改函数名避免S3方法误判
将函数名中的点替换为下划线(R社区更推荐的命名风格),比如改为wrap_it,此时普通的@export即可正常工作:
#' @title core text wrapping function #' @param x the text input #' @param len the maximum length for each of line #' @return the wrapped text #' @examples wrap_it("a long string bla bla bla", 10) #' @export wrap_it <- function(x, len) { sapply(x, function(y) paste(strwrap(y, len), collapse = "\n"), USE.NAMES = FALSE) }
重新生成文档后,NAMESPACE会导出wrap_it。
内容的提问来源于stack exchange,提问作者StringAech
相关产品推荐
相关产品推荐

