2016-09-28 6 views
0

현재 S3 동물원 오브젝트를 사용하는 새로운 S4 클래스를 작성 중입니다. 나는 클래스를 생성 할 수있다.R S3 속성을 가진 S4 오브젝트의 인스턴스

setOldClass("zoo") 
setClass("rollingSD", slot = c(rollPeriod = "numeric", tsOutput = "zoo")) 

이 코드는 정상적으로 작동한다. 이제 개체를 만들려는 경우

riskSD <- new("rollingSD") 

이 또한 제대로 작동합니다. 그러나, 다음과 같은 오류

riskSD <- new("rollingSD", rollPeriod = 12) 
Error in validObject(.Object) : 
invalid class “rollingSD” object: invalid object for slot "tsOutput" in class 
"rollingSD": got class "S4", should be or extend class "zoo" 

이 동물원 클래스의 기본 객체가 inititated되지 않는 이유 나를 위해 분명하지를 생성합니다. 나는 또한 이것을 고치는 방법을 모른다.

답변

1

R의 클래스 메커니즘이 새로운 zoo 개체를 만드는 방법을 알지 못하기 때문에 문제가 발생합니다. 당신은 "프로토 타입"을 지정하여이 문제를 해결할 수 있습니다 some_zoo_object 클래스 zoo이다

setClass(
    "rollingSD", 
    slot = c(rollPeriod = "numeric", tsOutput = "zoo"), 
    prototype=prototype(
    tsOutput=some_zoo_object 
) 
) 

. numeric 슬롯의 기본 프로토 타입은 numeric()이지만 (S4) 클래스 zoo을 직접 정의했기 때문에 기본값은 new("zoo")이며 정의되지 않았습니다.

+0

답장을 보내 주셔서 감사합니다. 그것은 실제로 의미가 있습니다. 'some_zoo_object = zoo()'를 사용하도록 제안합니다. 이것이 바로 zoo 클래스가있는 기본 객체에서 가장 가까운 것입니다. –