2017-03-16 107 views
1

我正在創建兩個S4類,其中類Employee從另一個類Person繼承。如何讓S4類從另一個S4類正確繼承?

兩個類的定義如下:

setClass("Person", slots = list(name="character", age="numeric")) 

setClass("Employee", slots = list(boss="Person")) 

我創建一次實例這些兩類,

alice <- new("Person", name="Alice", age = 40) 

這工作得很好,但是當我嘗試創建一個員工的情況下使用:

john <- new("Employee", name = "John", age = 20, boss= alice) 

它給出如下錯誤:

Error in initialize(value, ...) : 
    invalid names for slots of class 「Employee」: name, age 

我不能以這種方式創建對象嗎?

+3

你忘了指定'Employee'的基類;使用'setClass(「Employee」,slots = list(boss =「Person」),contains =「Person」)'這應該可以工作。 – nrussell

+0

@更新了問題,仍然是相同的錯誤 – Sarang

+2

@Sarang'contains'是'setClass'的一個參數,並且必須在列表之外。仔細研究nrussell評論中的括號。 – Roland

回答

2

每nrussel的評論:

的說法與傳承功能setClass交易contains。您希望類Employee繼承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