我有一些麻烦从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类。那是我现在正在使用的黑客。
答案 0 :(得分:6)
您似乎需要setOldClass才能让方法相信日期是真正的类。
答案 1 :(得分:2)
我遇到了类似的问题,因为Gtk2对象(例如,Gtk2 :: GtkBuilder)不是S4类,而我想在我自己的代码中使用这样一个对象的一个实例。我认为我通过删除prototype()并使用“initialize()”方法来处理这种情况。