在 R 参考 class 中,如何将字段定义为 "xts" 对象

In R reference class, how to define fields as "xts" objects

我正在定义一个参考 class 如下:

test = setRefClass(
  Class = "test",
  fields = c(
    edata = "data.frame"
  )
)
test$methods(
  getdata = function(newdata,...){
    edata <<- newdata
  }
)

然后我使用以下代码:

test1 = test$new()
x = xts(data.frame(val=1, val2=2), order.by=as.Date("2015-01-02"))
test1$getdata(x)

"zoo" "cannot assign data.frame" class 有一条错误消息 然后我修改了代码:

test = setRefClass(
  Class = "test",
  fields = c(
    edata = "zoo"
  )
)

但是,在 library(zoo) 或 library(xts) 之后,我会收到以下消息:

 Error in as(value, fieldClass, strict = FALSE) : 
  internal problem in as(): “xts” is(object, "zoo") is TRUE, but the metadata asserts that the 'is' relation is FALSE 

我真的需要在这个 class 中将 edata 用作 "xts" 对象,因为我会使用很多已经为 xts 编写的函数!

有什么办法可以解决这个问题吗?

可以将 class 指定为 "ANY"

test = setRefClass(
  Class = "test",
  fields = c(
    edata = "ANY"
  )
)

然后可以将 "xts" 对象分配给 "edata"。