Признавая класс S3 (?) Из пакета в определении класса S4
-
25-09-2019 - |
Вопрос
У меня есть некоторые проблемы, получающие класс со старых пакетов были распознаны определением класса 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
Пакет по крайней мере особенный, но у меня есть веские причины использования этого. Кроме того, проблема, вероятно, произойдет с другими пакетами. Смотрите это как пример для общего вопроса. Поэтому, пожалуйста, не говорите мне, чтобы использовать дату или классы POSIXT. Это взлома, я использую сейчас.
Решение
Кажется, что вам нужно setoldclass. Чтобы сделать методы считают, что даты реального класса.
Другие советы
У меня похожая проблема, потому что объекты GTK2 (например, GTK2 :: GTKBuilder) не являются классами S4, тогда как я хотел один экземпляр такого объекта в моем собственном коде. Я думаю, что я работал в целую ситуацию, удалив прототип () вещи и используя метод «инициализации ()».