4

从 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 类。这是我现在正在使用的 hack。

4

2 回答 2

6

似乎您需要setOldClass使方法相信日期是一个真正的类。

于 2010-12-09T17:48:17.943 回答
2

我遇到了类似的问题,因为 Gtk2 对象(例如,Gtk2::GtkBuilder)不是 S4 类,而我希望在我自己的代码中有一个这样的对象的实例。我想我通过删除原型()事物并使用“初始化()”方法来解决这种情况。

于 2011-08-29T14:20:46.227 回答