2010-12-09 3 views
4

S4 패키지 정의에서 인식되는 이전 패키지의 클래스를 가져 오는 데 문제가 있습니다. 나는 오류S4 클래스 정의의 패키지에서 S3 (?) 클래스를 인식합니다.

Error in makePrototypeFromClassDef(properties, ClassDef, immediate, where) : 
    in making the prototype for class "Tsvmm" elements of the prototype failed to 
    match the corresponding slot class: dates (class "dates") 
In addition: Warning message: 
undefined slot classes in definition of "Tsvmm": dates(class "dates") 

을 재현 예를 받고 계속 :

require(chron) 

setClass(
    Class="Tsvmm", 
    representation=representation(
     data = "data.frame", 
     dates = "dates" 
), 
    prototype=prototype(
     data = data.frame(), 
     dates = chron(0) 
) 
) 

class(chron(0))을 시도하고, 대답은 "dates" "times"입니다. is.numeric(chron(0))을 사용하면 대답은 TRUE입니다. 그러나 슬롯 날짜 클래스를 "numeric"으로 설정하면 경고 메시지없이 같은 오류가 발생합니다.

나는 분명히 뭔가를 간과하고 있다는 느낌이 들지만, 아직 문서에서 찾을 수 없습니다. 누구 포인터?

추신 : 나는 chron 패키지가 적어도 특이하다고 알고 있지만, 이것을 사용하는 좋은 이유가 있습니다. 또한이 문제는 다른 패키지에서도 발생할 수 있습니다. 이것을 일반적인 질문의 예로서 보아라. 제발, 나 Date 또는 POSIXt 클래스를 사용하지 말아주세요. 그건 내가 지금 사용하고있는 해킹입니다.

+2

wowThatFunctionNameIsLong() –

답변

6

setOldClass은 날짜가 실제 클래스라고 판단하는 것으로 보입니다.

+1

빙고! 감사합니다 –

2

Gtk2 개체 (예 : Gtk2 :: GtkBuilder)는 S4 클래스가 아니기 때문에 비슷한 문제가 있습니다. 반면 자신의 코드에서 이러한 개체의 인스턴스 하나를 원했습니다. prototype()을 제거하고 "initialize()"메서드를 사용하여 상황을 해결했다고 생각합니다.