You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:52:03