Sar*_*kar 3 inheritance r r-s4
我正在创建两个 S4 类,其中 Employee 类继承自另一个 Person 类。
\n\n这两个类的定义如下:
\n\nsetClass("Person", slots = list(name="character", age="numeric"))\n\nsetClass("Employee", slots = list(boss="Person"))\nRun Code Online (Sandbox Code Playgroud)\n\n我正在为这两个类创建一个实例,
\n\nalice <- new("Person", name="Alice", age = 40)\nRun Code Online (Sandbox Code Playgroud)\n\n这效果很好,但是当我尝试使用以下命令创建 Employee 实例时:
\n\njohn <- new("Employee", name = "John", age = 20, boss= alice)\nRun Code Online (Sandbox Code Playgroud)\n\n它给出的错误如下:
\n\nError in initialize(value, ...) : \n invalid names for slots of class \xe2\x80\x9cEmployee\xe2\x80\x9d: name, age\nRun Code Online (Sandbox Code Playgroud)\n\n我不能以这种方式创建对象吗?
\n根据恩罗塞尔的评论:
contains函数的参数setClass涉及继承。您希望该类Employee继承该类Person(即雇员是一种特殊类型的人)。所以
setClass("Person", slots = list(name="character", age="numeric"))
setClass("Employee", slots = list(boss="Person"), contains = "Person")
Run Code Online (Sandbox Code Playgroud)
会成功的。
> 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |