将S4对象存储在矩阵中

时间:2014-05-27 20:47:21

标签: r s4

我试图将一个简单的自定义S4 - 对象放入data.framematrixdata.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或同等容器中?

2 个答案:

答案 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)元素的列表。