2017-03-16 14 views
1

두 개의 S4 클래스를 만들고 있는데, 여기서 Employee 클래스는 다른 클래스 Person으로부터 상속을받습니다.S4 클래스를 다른 S4 클래스에서 올바르게 상속하는 방법은 무엇입니까?

다음과 같이 클래스 모두에 대한 정의는 다음과 같습니다이 잘 작동하지만,

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

나는이 두 클래스의 각 인스턴스에 한 번 만드는 오전

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

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

을, 나는를 만들려고 할 때 직원의 인스턴스 사용 :

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

아래와 같은 오류 메시지가 표시됩니다.

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

이 방식으로 개체를 만들 수 없습니까? nrussel의 코멘트 당

+3

'Employee'의 기본 클래스를 지정하는 것을 잊었습니다. setClass ("Employee", slots = list (boss = "Person"), contains = "Person")'을 사용하면됩니다. – nrussell

+0

@ 여전히 질문이 업데이트되었습니다. – Sarang

+2

@Sarang'contains'는'setClass'의 매개 변수이며 목록 외부에 있어야합니다. nrussell의 주석에있는 괄호를주의 깊게 연구하십시오. – Roland

답변

2

:

인수 상속 기능 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