从S4类定义中的包中识别S3(?)类

时间:2010-12-09 16:51:04

标签: class r definition s4

我有一些麻烦从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 个答案:

答案 0 :(得分:6)

您似乎需要setOldClass才能让方法相信日期是真正的类。

答案 1 :(得分:2)

我遇到了类似的问题,因为Gtk2对象(例如,Gtk2 :: GtkBuilder)不是S4类,而我想在我自己的代码中使用这样一个对象的一个​​实例。我认为我通过删除prototype()并使用“initialize()”方法来处理这种情况。