R包开发:如何为非语法名称函数编写文档并正确导出?
问题成因
你遇到的导出失败问题核心原因是R脚本文件名不符合R包的代码加载规则:
R包在加载R/目录下的代码文件时,默认只会加载文件名以字母开头、扩展名为.R/.r的文件,你将函数保存在名为+f.R的文件中,该文件在load_all()和包安装过程中会被直接跳过,导致+f函数根本没有被加载到包的命名空间中。
而NAMESPACE文件中的export(+f)是roxygen2扫描所有.R文件(包括未被加载的+f.R)生成的,因此会出现「导出声明存在,但对应对象不存在于命名空间」的不匹配警告。文档能正常生成也是同理:roxygen2扫描到了+f.R中的注释,正常生成了Rd文件,但函数本身没有被加载。
解决方法
按以下步骤调整即可正常导出并访问函数:
- 重命名R脚本文件:将
pac/R/+f.R改为合法文件名,例如pac/R/plus_f.R,只要保证文件名以字母开头即可。 - 调整roxygen2注释(可选优化,原注释也可正常运行):如果需要显式指定导出名,可在
@export后补充反引号包裹的函数名,修改后文件内容如下:
#' Add two objects #' #' @param x an object #' @param y an object #' @return A sum #' @export `+f` `+f` <- function(x, y) {x + y}
- 重新执行构建命令:
document() load_all()
此时运行`+f`(2, 2)即可正常返回结果4。
非语法名称函数的文档&导出规范
在R包中定义名称不符合语法规则的函数时,遵循以下规则即可正常生成文档并导出:
- 函数定义必须用反引号包裹非标准名称
- roxygen2的
@name、@export标签中涉及非标准函数名时,同样用反引号包裹 - 保存函数的
.R文件名必须符合R包加载规则:文件名开头为字母,仅包含字母、数字、下划线、减号、点号,不可用特殊符号开头
内容的提问来源于stack exchange,提问作者harisf
相关产品推荐
相关产品推荐

