例如:
Mycls = setRefClass(
"Mycls",
fields = list(
# this is just a mock up
colorvec = "numeric" | "factor" | "matrix"
)
)
在这个例子中,我想允许colorvec
为数字或因子或矩阵。
有没有办法做到这一点?
答案 0 :(得分:5)
三种可能性。
使用ANY
类型。
m2 = setRefClass("m2",
fields = list(x="ANY")
)
,如名称所示,建议允许您使用任何类型。
创建另一个只接受numerics
/ factors
/ matrices
的课程:
setClass("mult", representation(x="ANY"))
setValidity("mult",
function(object)
is.numeric(object@x) || is.factor(object@x) || is.matrix(object@x)
)
m3 = setRefClass("m3", fields = list(x="mult"))
所以
bit = new("mult", x=10)
m3$new(x=bit)
将功能作为输入并检查类型。请注意,x
字段实际上并不存储任何数据,只是检查并返回internal
值。您可以创建一个简单的show
方法来隐藏internal
字段。
m4 = setRefClass("m4",
fields=list(x = function(y){
if(!missing(y) && !is.null(y)) {
if(!(is.numeric(y))){
stop("Wrong type")
}
internal <<- y
} else internal}
,
internal="ANY"
))
m4$new(x=10)
m4$new(x="10")