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

如何从R6方法继承Roxygen文档?

如何在R6方法中继承Roxygen文档

首先明确:完全可以实现R6方法间的Roxygen文档继承,你遇到的警告是因为使用了不正确的继承语法。

问题原因分析

你用了@inheritParams Person$initialize,但Roxygen处理R6类的参数继承时,不支持Class$method这种格式的引用。这就导致两个警告:

  1. 第一个警告说set_hair()的hair参数未被文档化——因为Roxygen没识别到你要继承的参数定义;
  2. 第二个警告说没有可继承的参数——因为它找不到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:37:39