我试图将一个简单的自定义S4
- 对象放入data.frame
,matrix
或data.table
这样的容器中。在尝试将Course
- 类的实例分配到matrix
之类的
slots <- matrix(NA, ncol = 5, nrow = 5)
slots[1,1] <- new(Class="Course", ATTRIBUTES GO HERE...)
我收到以下错误:
number of items to replace is not a multiple of replacement length
呼叫length(MYOBJECTINSTANCE)
会返回1。
多数民众赞成我的班级
setClass(
Class="Course",
representation=representation(
tutor = "character"
#other attributes...
)
)
我还试图实现一个虚假validate
方法,该方法始终返回true
,但效果不佳。
setValidity("Course", function(object) {
return(TRUE)
})
所以现在我的问题是:
是否有一种简单的方法可以将S4
- 对象添加到matrix
或同等容器中?
答案 0 :(得分:2)
您可以通过将项目放在列表中来创建一个以S4对象作为元素的矩阵。
slots <- list(
new(Class="Course"),
new(Class="Course"),
new(Class="Course"),
new(Class="Course"))
然后只需相应地设置dim
属性即可获得矩阵:
dim(slots) <- c(2,2)
示例:
slots # don't bother
## [,1] [,2]
## [1,] ? ?
## [2,] ? ?
slots[[1,1]] # element access
## An object of class "Course"
## Slot "tutor":
## character(0)
答案 1 :(得分:0)
您可以更新代码以使用
slots <- matrix(list(), ncol = 5, nrow = 5)
slots[[1,1]] <- new(Class="Course")
请注意在矩阵初始化中添加list()
。列表矩阵有点特殊。因此,要在(1,1)
处提取实际对象,请使用[[1,1]]
,而[1,1]
将是包含(1,1)
元素的列表。