【发布时间】: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