【问题标题】:Document reference class and its methods with roxygen2roxygen2 的文档引用类及其方法
【发布时间】:2014-09-01 21:45:19
【问题描述】:

我正在尝试用 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

我有 4 个问题:

  • @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
                              }
                          }
                      )
)

还是没有运气。

【问题讨论】:

  • 这是一个很好的问题,可惜没有太多的兴趣。你最后决定的方法是什么?
  • 我认为根据r-pkgs.org/man.html#man-rc@method 实际上应该是一个文档字符串,我理解它是方法函数体第一行中的文字字符串

标签: r roxygen2 reference-class


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 2013-09-24
    • 2016-02-01
    • 2018-09-16
    • 2014-10-18
    • 1970-01-01
    • 2022-12-14
    • 2016-04-18
    相关资源
    最近更新 更多