Reputation: 23114
I am trying to document a reference class with 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
}
}
)
Result of ?myclass
:
test class
Description
test class
Fields
x
A number
y
A number
I have 4 questions:
@methods
directive have no effect here?@export
and @exportClass
?I also tried this:
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))
}
)
And got this:
> ?myclass$print
Error in .helpForCall(topicExpr, parent.frame()) :
no documentation for function ‘$’ and signature ‘x = "refObjectGenerator"’
Another try:
#' 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
}
}
)
)
Still no luck.
Upvotes: 3
Views: 782
Reputation: 512
In the case of reference classes I am pretty sure @export will expose the generator function returned by setRefClass and @exportClass will expose the actual class.
Upvotes: 1