生成一个包含两行的xts对象。
library(xts)
junk<-xts(c(1,2),as.Date(c("2010-01-01","2010-05-01")))
junk
> [,1]
> 2010-01-01 1
> 2010-05-01 2 为什么下面的代码不更改第一行的索引?
time(junk[1])<-as.Date("2010-02-01")
junk
> [,1]
> 2010-01-01 1
> 2010-05-01 2 我知道下面的方法是有效的,但是为什么上面的不起作用呢?
time(junk)[1]<-as.Date("2010-02-01")
junk
> [,1]
> 2010-02-01 1
> 2010-05-01 2 谢谢,
帐单
发布于 2011-01-29 06:37:14
对这篇文章的直接回答是,正如乔希所说,魔力就在attr<-内部。首先设置对象子集只需创建一个新对象,该对象在<-完成后立即被处理。
此外,您还可以通过.index()函数查看索引的“内部结构”。本质上是一个双精度或整数类型的向量,映射到POSIXct时间-带有一些附加的属性。您正在分配的类将自动来回强制。这使得内部结构更易于维护-并允许您在外部使用任何需要的time类进行操作。
一般来说,Date将是避免TZ和secs麻烦的最干净的方法,但请记住,这个隐藏方面的成本是函数index()。这将不得不重新创建您期望的对象。
发布于 2010-12-14 10:53:33
time(junk[1]) <- as.Date("2010-02-01") 上面的代码没有改变junk第一行的索引,因为子集创建了一个新对象--没有引用junk--而time<-.xts替换了新对象的索引。
https://stackoverflow.com/questions/4435011
复制相似问题