如何从R6方法继承Roxygen文档?
如何在R6方法中继承Roxygen文档
首先明确:完全可以实现R6方法间的Roxygen文档继承,你遇到的警告是因为使用了不正确的继承语法。
问题原因分析
你用了@inheritParams Person$initialize,但Roxygen处理R6类的参数继承时,不支持Class$method这种格式的引用。这就导致两个警告:
- 第一个警告说
set_hair()的hair参数未被文档化——因为Roxygen没识别到你要继承的参数定义; - 第二个警告说没有可继承的参数——因为它找不到
Person$initialize这个有效的参数来源。
正确的解决方案
在同一个R6类的方法间继承文档,直接使用方法名即可,不需要加上类名和$符号。
修改后的代码示例
#' R6 Class representing a person #' #' A person has a name and a hair color. Person <- R6::R6Class("Person", public = list( #' @field name First or full name of the person. name = NULL, #' @field hair Hair color of the person. hair = NULL, #' @description #' Create a new person object. #' @param name Name. #' @param hair Hair color. #' @return A new `Person` object. initialize = function(name = NA, hair = NA) { self$name <- name self$hair <- hair self$greet() }, #' @description #' Change hair color. #' @inheritParams initialize # 这里直接写方法名即可 #' @examples #' P <- Person("Ann", "black") #' P$hair #' P$set_hair("red") #' P$hair set_hair = function(hair) { self$hair <- hair } ) )
进阶:指定继承特定参数
如果你的目标方法有多个参数,而你只需要继承其中某一个,可以在方法名后加上参数名:
#' @inheritParams initialize hair
这样Roxygen会明确只继承initialize方法中hair参数的文档,避免不必要的匹配,代码可读性也更强。
跨类继承的补充(如果需要)
如果要从另一个R6类的方法继承参数文档,需要用下划线连接类名和方法名的格式,比如:
#' @inheritParams AnotherClass_initialize
运行修改后的代码,你之前遇到的两个警告就会消失,set_hair方法的hair参数会正确继承initialize方法里的文档说明。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

