我可以创建一个包含对象的父类
setRefClass("img",fields=list(name="character"))
setRefClass("imgs",fields=list(img="img"))
但是,我想创建一个带有其他RefClass对象数组的RefClass对象。 我可以使用“列表”作为占位符并手动填写,但有更好的方法吗?
例如,是否可以指定“list”类型来保存其中的某个对象? 假设,这样的事情:(但不起作用)
setRefClass("img",fields=list(name="character"))
setRefClass("imgs",contains=list(imgList=list("img")))
我希望当我在“imgList”上调用一个方法时,它知道为每个“img”元素调用方法。
答案 0 :(得分:0)
您可以使用setValidity
来确保list
中的每个元素都是某个类。
img <- setRefClass("img", fields = list(name = "character"))
imgs <- setRefClass("imgs", fields = list(imgList = "list"))
validImgs <- function(object) {
if (length(object$imgList) == 0) {
stop("`imgs` must contain at least one object of class `img`.")
}
sapply(object$imgList, function(x) {
if (class(x)[1] != "img") {
stop("Each element in `imgList` must be of class `img`")
}
})
T
}
setValidity("imgs", validImgs)
这是imgs
验证失败的两个示例。
# An invalid image object.
imgs$new(imgList = list())
validityMethod(object)中的错误:
imgs
必须包含至少一个 类img
的对象。
# Another invalid image object.
imgs$new(imgList = list(1))
FUN(X [[i]],...)中的错误:
imgList
中的每个元素必须为 类img
这里是imgs
通过验证的示例。
# A valid image object.
imgs$new(imgList = list(img$new()))
Reference class object of class "imgs"
Field "imgList":
[[1]]
Reference class object of class "img"
Field "name":
character(0)