我想问一个关于xts子类的建议。我正在使用xtsAttributes
为我的xts数字矩阵的每一列添加元数据信息。元数据包含一个字符串和每列的描述。xts子类子集方法
因此ncol(myxtsobject) = length(metadata)
。并且我还为该对象添加了一个新类,例如myclass
。现在我想编写方法[.myclass
延伸[.xts
函数也相应地子集xts矩阵时我的元数据。
例如:d <- myobject[,c(2,3,23)]
将生成d
,其中有3列,并且元数据属性中有3个条目。
有人可以告诉我怎么做,而理性地使用现有的XT和矩阵子集功能?
更多细节.... 还有就是我的目标如下(只是一个简约的例子)结构:
# 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)
现在,有了这样的目标,我想开发一套允许子集化consitent功能使用对象元数据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
我提出了类似的解释。我正在编写一个尚未发布的软件包,我们可以通过电子邮件进行离线讨论吗? – 2012-08-08 14:58:57
@PetrMatousu:当然,你可以在我的个人资料中找到我的电子邮件。 – 2012-08-08 15:02:59
好吧,我把它放到我的问题的最后。我没有看到任何碰撞或错误行为,所以我可能会用我的方式,但感谢你的努力。 – 2012-08-09 21:52:22