Распознавание класса S3 (?) Из пакета в определении класса S4 - PullRequest
4 голосов
/ 09 декабря 2010

У меня проблемы с получением класса из более старых пакетов, которые были определены по определению класса S4. Я продолжаю получать сообщение об ошибке

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", я получаю ту же ошибку без предупреждающего сообщения.

У меня такое чувство, что я упускаю что-то очевидное, но я пока не смог найти это в документации. У кого-нибудь есть указатели?

PS: я знаю, что пакет chron, по крайней мере, необычен, но у меня есть веские причины использовать это. Кроме того, проблема может возникнуть с другими пакетами. Смотрите это как пример для общего вопроса. Поэтому, пожалуйста, не говорите мне использовать классы Date или POSIXt. Это хак, которым я пользуюсь сейчас.

Ответы [ 2 ]

6 голосов
/ 09 декабря 2010

Похоже, вам нужно setOldClass , чтобы методы полагали, что даты - это реальный класс.

2 голосов
/ 29 августа 2011

У меня похожая проблема, потому что объекты Gtk2 (например, Gtk2 :: GtkBuilder) не являются классами S4, в то время как я хотел один экземпляр такого объекта в своем собственном коде. Я думаю, что я работал вокруг ситуации, удалив функцию prototype () и используя метод "initialize ()".

...