2

我想在 R 中创建一个新类,它基本上应该类似于向量类,只是向量中的每个元素都有两个附加属性,分别是“开始时间”和“结束时间”。部分功能应该是各种常规索引。

我尝试过在这里至少提供一些代码:

  setClass(
      Class = "Intervals",
      representation = representation(
        start.time = "POSIXct",
        end-time = "POSIXct",
        numbers = "numeric"),
      contains = "vector"
    )

这显然不起作用,因为之后

iv <- function(start.time, end.time, numbers) {
  new(Class="Intervals", start.time = start.time, 
      end.time = end.time, numbers = numbers)
}

st <- seq(1,5)*3600+as.POSIXct("1970-01-01 01:00")
et <- seq(2,6)*3600+as.POSIXct("1970-01-01 01:00")
numbers <- c(1,2,3,4,5)
example <- iv(st,et,numbers)

示例 [1:3] 例如给我 NA NA NA。

还是让我自己写getter,从类似的东西开始

setMethod(
  f = "[",
  signature="Intervals",
  definition=function(x,i,j,drop){
...

? 当然我想避免这种情况,因为我不知道如何正确处理参数 x,i,j,drop。

我需要插槽“数字”吗?有没有一种从虚拟类向量继承的方法允许我省略它?此外,我不想将结构限制在包含数值的向量上。

我希望这个问题不是太微不足道,但是我阅读了书籍和 pdf 中的不同章节,却没有自己找到解决方案。

提前非常感谢。

米卡

4

1 回答 1

2

行。同时,我设法(在如何为 S4 类定义子集运算符的帮助下?)提出(经过一些重命名):

setMethod(
  f = "[",
  signature="Intervals",
  definition=function(x,i,j,...,drop=TRUE){ 
    initialize(x, from=x@from[i], to=x@to[i], values = x@values[i])
  }
)

只是如果有人感兴趣.. show 方法看起来像这样。

setMethod(
  f = "show",
  signature="Intervals",
  definition=function(object){
    rownames <- sapply(seq_along(object@to), 
                       function (i) paste(object@from[i], "--", object@to[i]))
    df.show <- data.frame(object@values, row.names = rownames)
    names(df.show) <- ifelse(length(names(object@values)) == 0,
                             "Values", names(object@values))
    print (df.show)
  }
)
于 2012-11-10T13:56:35.097 回答