使用roxygen2记录文档参考类及其方法

3

我正在尝试使用roxygen2记录一个参考类:

#' test class
#' 
#' @name myclass
#' @export 
#' @field x A number
#' @field y A number
#' @method print Print x and y
myclass = setRefClass("myclass",
                      fields = list(
                          x = "numeric",
                          y = "numeric"
                      ))


myclass$methods(
    print = function() {
        if (.self$x > 10) {
            stop("x is too large!")
        }
        message(paste("x: ", .self$x))
        message(paste("y: ", .self$y))
    }
)

myclass$methods(
    initialize = function(x=NULL, y=NULL, obj=NULL) {
        if(is.null(obj)) {
            .self$x = x
            .self$y = y
        }
        else {
            .self$x = obj$x
            .self$y = obj$y
        }
    }
)

?myclass的结果:

test class

Description

test class

Fields

x
A number

y
A number

我有四个问题:

  • @name 的含义是什么?
  • 为什么在这里 @methods 指令没有效果?
  • @export@exportClass 有什么区别?
  • 如何记录方法的参数?

我也尝试了这个:

myclass$methods(
#' Print two numbers
#' 
#' @param msg A message to prepend
    print = function(msg) {
        if (.self$x > 10) {
            stop("x is too large!")
        }
        message(paste(msg, .self$x))
        message(paste(msg, .self$y))
    }
)

然后得到了这个:

> ?myclass$print
Error in .helpForCall(topicExpr, parent.frame()) : 
  no documentation for function ‘$’ and signature ‘x = "refObjectGenerator"

再试一次:

#' test class
#' 
#' @name myclass
#' @export 
#' @field x A number
#' @field y A number
#' @method print Print two numbers
#' @method initialize Initialize the class
myclass = setRefClass("myclass",
                      fields = list(
                          x = "numeric",
                          y = "numeric"
                      ), 
                      methods = list(
                          print = function(msg) {
                              if (.self$x > 10) {
                                  stop("x is too large!")
                              }
                              message(paste(msg, .self$x))
                              message(paste(msg, .self$y))
                          },
                          initialize = function(x=NULL, y=NULL, obj=NULL) {
                              if(is.null(obj)) {
                                  .self$x = x
                                  .self$y = y
                              }
                              else {
                                  .self$x = obj$x
                                  .self$y = obj$y
                              }
                          }
                      )
)

仍然没有好运。

1
这是一个好问题,可惜没有太多的兴趣。你最终决定采取什么方法? - Konrad
我认为根据 https://r-pkgs.org/man.html#man-rc,`@method` 应该实际上是一个文档字符串,我理解文档字符串是方法函数体第一行的字面字符串。 - MichaelChirico
1个回答

1
在引用类的情况下,我非常确定@export将公开由setRefClass返回的生成器函数,而@exportClass将公开实际类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接