如何在R中创建一个允许类似矢量索引的S4类?

时间:2012-11-10 10:45:47

标签: r oop s4

我想在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。

或者让我自己从像

这样的东西开始写吸气剂
setMethod(
  f = "[",
  signature="Intervals",
  definition=function(x,i,j,drop){
...

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

我需要插槽'号码'吗?有没有一种继承虚拟类向量的方法,允许我省略它?另外,我不想限制包含数值的向量的结构。

我希望这个问题不是太微不足道,但我读了书中的不同章节,并且我自己也找到了解决方案。

提前多多感谢。

米卡

1 个答案:

答案 0 :(得分:2)

确定。同时我管理(在How to define the subset operators for a S4 class?的帮助下)(在重新命名之后):

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)
  }
)