2

ベクトルのすべての要素に「開始時間」と「終了時間」の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)

example[1:3] たとえば、 NA NA NA が得られます。

または、次のようなものから始まるゲッターを自分で作成する必要があります

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

? もちろん、引数 x,i,j,drop を正しく処理する方法がわからないため、これを避けたかったのです。

スロット「番号」は必要ですか? 省略できる仮想クラス ベクトルから継承する方法はありますか? さらに、数値を含むベクトルの構造を制約したくありません。

この質問が些細なことではないことを願っていますが、自分で解決策を見つけることなく、本やpdfのさまざまな章を読みました。

よろしくお願いします。

みか

4

1 に答える 1

2

Ok。その間、私は(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 に答える