如何使 S4 class 从另一个 S4 class 正确继承?
How to make an S4 class inherit correctly from another S4 class?
我正在创建两个 S4 classes,其中 class Employee 继承自另一个 class Person。
两个class的定义如下:
setClass("Person", slots = list(name="character", age="numeric"))
setClass("Employee", slots = list(boss="Person"))
我正在为这两个 class 中的每一个创建一个实例,
alice <- new("Person", name="Alice", age = 40)
这很好用,但是当我尝试使用以下方法创建 Employee 实例时:
john <- new("Employee", name = "John", age = 20, boss= alice)
它给出如下错误:
Error in initialize(value, ...) :
invalid names for slots of class “Employee”: name, age
我不能以这种方式创建对象吗?
根据 nrussel 的评论:
函数 setClass
的参数 contains
处理继承。您希望 class Employee
从 class Person
继承(即员工是一种特殊类型的人)。所以
setClass("Person", slots = list(name="character", age="numeric"))
setClass("Employee", slots = list(boss="Person"), contains = "Person")
会成功的。
> alice <- new("Person", name="Alice", age = 40)
> john <- new("Employee", name = "John", age = 20, boss= alice)
> john
An object of class "Employee"
Slot "boss":
An object of class "Person"
Slot "name":
[1] "Alice"
Slot "age":
[1] 40
Slot "name":
[1] "John"
Slot "age":
[1] 20
我正在创建两个 S4 classes,其中 class Employee 继承自另一个 class Person。
两个class的定义如下:
setClass("Person", slots = list(name="character", age="numeric"))
setClass("Employee", slots = list(boss="Person"))
我正在为这两个 class 中的每一个创建一个实例,
alice <- new("Person", name="Alice", age = 40)
这很好用,但是当我尝试使用以下方法创建 Employee 实例时:
john <- new("Employee", name = "John", age = 20, boss= alice)
它给出如下错误:
Error in initialize(value, ...) :
invalid names for slots of class “Employee”: name, age
我不能以这种方式创建对象吗?
根据 nrussel 的评论:
函数 setClass
的参数 contains
处理继承。您希望 class Employee
从 class Person
继承(即员工是一种特殊类型的人)。所以
setClass("Person", slots = list(name="character", age="numeric"))
setClass("Employee", slots = list(boss="Person"), contains = "Person")
会成功的。
> alice <- new("Person", name="Alice", age = 40)
> john <- new("Employee", name = "John", age = 20, boss= alice)
> john
An object of class "Employee"
Slot "boss":
An object of class "Person"
Slot "name":
[1] "Alice"
Slot "age":
[1] 40
Slot "name":
[1] "John"
Slot "age":
[1] 20