使用roxygen2编写自定义类「+」S3方法文档的问题
解决R包中S3「+」运算符方法的roxygen2文档问题
问题场景
在R包中给class1、class2两个类实现了支持**单目(+x)和双目(x + y)**的自定义S3「+」方法,用roxygen2生成帮助文档时踩了几个坑:
- 不写
@usage:自动生成的用法展示混乱,没法清晰体现两种调用形式 - 手动加
@usage:触发「未定义别名」的警告 - 补
@aliases +:因为两个类都用了这个别名,直接报「重复别名」的错误
最终解决方案
在@usage里用\special{+x}和\special{x + y}标记运算符的特殊用法,完美解决所有问题:
示例代码(roxygen2文档块)
#' 自定义「+」运算符 #' #' 为class1、class2类实现支持单/双操作数的「+」运算 #' #' @param x class1或class2类型的对象 #' @param y 可选,双目运算时的右操作数 #' @usage \special{+x} #' @usage \special{x + y} #' @return 运算后的结果对象 #' @export "+.class1" <- function(x, y) { if (missing(y)) { # 处理单目运算 +x structure(x, class = paste0("plus_", class(x))) } else { # 处理双目运算 x + y x$value + y$value } } #' @rdname +.class1 #' @export "+.class2" <- function(x, y) { if (missing(y)) { structure(x, class = paste0("plus_", class(x))) } else { x$data + y$data } }
原理说明
\special{}是roxygen2专门用于处理特殊运算符的标记,它会:
- 正确渲染单目/双目运算符的用法格式,不会出现混乱
- 不需要额外添加
@aliases +,避免了多类重复别名的问题 - 消除「未定义别名」的警告,因为roxygen2会识别这是运算符的特殊用法
内容的提问来源于stack exchange,提问作者Odin
相关产品推荐
相关产品推荐

