如何创建一个将 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 日创建
我对 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 日创建