如何创建一个将 S4 classes B 列表作为其属性的 S4 class A?

How to create an S4 class A that will have a list of S4 classes B as its attribute?

我对 R 很陌生,所以我的问题可能有一个明显的答案。

我正在尝试创建这样的东西

A {
  list: B []
}

其中A和B都是S4类。如何实现?

编辑

此时我实际上并不关心 list 属性是数组还是实际列表。对于我的用例,它是相当无关紧要的。

您使用 setClass 定义 S4 classes,并在其中使用 representation 来声明成员及其类型。

在这种情况下,class A 只需要包含一个 list 类型的成员来容纳 S4 class B 的对象集合。

setClass("A", representation(List = "list"))
setClass("B", representation(value = "numeric"))

您使用函数 new 声明新的 S4 对象,其中首先指定 class 名称并将其成员指定为命名参数:

my_object <- new("A", List = list(new("B", value = 1), new("B", value = 2)))
my_object
#> An object of class "A"
#> Slot "List":
#> [[1]]
#> An object of class "B"
#> Slot "value":
#> [1] 1
#> 
#> 
#> [[2]]
#> An object of class "B"
#> Slot "value":
#> [1] 2

我们可以使用 @ 运算符获取 List 成员:

my_object@List
#> [[1]]
#> An object of class "B"
#> Slot "value":
#> [1] 1
#> 
#> 
#> [[2]]
#> An object of class "B"
#> Slot "value":
#> [1] 2

我们可以从中直接访问列表成员及其 S4 插槽:

my_object@List[[1]]
#> An object of class "B"
#> Slot "value":
#> [1] 1

my_object@List[[1]]@value
#> [1] 1

reprex package (v0.3.0)

于 2020 年 3 月 16 日创建