xtsサブクラスについてアドバイスをお願いします。xtsAttributes
xts数値行列のすべての列のメタデータ情報を追加するために使用しています。メタデータは、各列の説明を含む文字列を保持します。
だからncol(myxtsobject) = length(metadata)
。また、オブジェクトに新しいクラスを追加しますmyclass
。ここで、xts行列をサブセット化するときに、それに応じてメタデータもサブセット化するメソッド[.myclass
拡張関数を作成します。[.xts
例:メタデータ属性に3つの列と適切な3つのエントリを使用しd <- myobject[,c(2,3,23)]
て生成します。d
誰かが既存のxtsと行列サブセット化関数を合理的に使用しながらそれを行う方法を教えてもらえますか?
詳細....以下に私のオブジェクトの構造があります(単なる最小限の例):
# creating the object
n <- 10
ind <- Sys.time() + 1:n
col <- sin(seq(from=0, to=2*pi, length.out=n))
col2 <- cos(seq(from=0, to=2*pi, length.out=n))
d <- xts(x=cbind(col,col2), order.by=ind)
KEY1 <- paste("desc k1 -",1:ncol(d))
KEY2 <- paste("desc k2 -",1:ncol(d))
xtsAttributes(d) <- data.frame(KEY1,KEY2,stringsAsFactors=F)
d <- structure(d, class = c("dm", "xts", "zoo"))
# resulting structure
str(d)
ここで、このようなオブジェクトを使用して、オブジェクトメタデータKEY1、KEY2と一致するサブセット化を可能にする関数のセットを開発したいので、列2をドロップ/選択すると、KEY1とKEY2から対応するメンバーをドロップ/選択します。
私は現在このコードを使用していますが、これは今のところ機能しています。data.frameとxtsサブセットを再利用します。これらのgetMeta.dm(x)とis.dm(x)は、明らかな関数を持つ私の関数です。
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#: subset.dm
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
subset.dm <- function(x,i,j,...) {
# get my metadata, returns data.frame
md <- getMeta.dm(x)
# metadata subset
md <- md[j,]
# xts subset
myclass <- class(x)
x <- as.xts(x)
x <- x[i,j,...]
# now again assembling md object
# TODO fu() for creating dm objects
xtsAttributes(x) <- md
class(x) <- myclass
if(is.dm(x)) return(x) else stop("result is not dm object")
}
`[.dm` <- subset.dm