我正在尝试使用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
}
}
)
)
仍然没有好运。