我的列表索引如下:
>list.stuff
[[1]]
[[1]]$vector
...
[[1]]$matrix
....
[[1]]$vector
[[2]]
null
[[3]]
[[3]]$vector
...
[[3]]$matrix
....
[[3]]$vector
.
.
.
列表中的每个段都根据另一个索引向量进行索引:
>index.list
1, 3, 5, 10, 15
在list.stuff
中,只有每个索引1,3,5,10,15才会有2个向量和一个矩阵;其他一切都将像[[2]]
一样为空。我想要做的是像lag.xts
函数一样滞后,以便[[1]]
中存储的任何内容都会被推送到[[3]]
,最后一个会被删除。如果可能的话,这还需要对列表进行子集化。我想知道是否存在一些处理列表操作的函数。
我的想法是,对于xts
,可以根据您提供的索引提取时间序列:
xts.object[index,] #returns the rows 1,3,5,10,15
从这里开始,我可以延迟:
lag.xts(xts.object[index,])
感谢任何帮助,谢谢:
编辑:这是一个可重复的例子:
list.stuff<-list()
vec<-c(1,2,3,4,5,6,7,8,9)
vec2<-c(1,2,3,4,5,6,7,8,9)
mat<-matrix(c(1,2,3,4,5,6,7,8),4,2)
list.vec.mat<-list(vec=vec,mat=mat,vec2=vec2)
ind<-c(2,4,6,8,10)
for(i in ind){
list.stuff[[i]]<-list.vec.mat
}
slist<-list.stuff[ind]
list.stuff[ind]<-lapply(seq_along(slist),function(i) ifelse(i <= 1, NA, slist[[i-1]])) #lag list
新的滞后列表仅保留其中一个向量而不是2个向量和列表
答案 0 :(得分:1)
首先,一个示例列表:
elist <- list(1, 2, 3, 4, 5, 6)
索引:
index.list <- c(1, 3, 5)
根据索引创建子集:
sublist <- elist[index.list]
[[1]]
[1] 1
[[2]]
[1] 3
[[3]]
[1] 5
滞后:
lag <- 1
将大小为lag
的滞后应用于列表
newsublist <- lapply(seq_along(sublist),
function(i) if (i <= 1) NA else slist[[i-1]])
[[1]]
[1] NA
[[2]]
[1] 1
[[3]]
[1] 3
注意的。在其当前实现中,最后一个命令仅适用于正滞后。
现在,将值重新放回列表elist
:
elist[index.list] <- newsublist
结果:
[[1]]
[1] NA
[[2]]
[1] 2
[[3]]
[1] 1
[[4]]
[1] 4
[[5]]
[1] 3
[[6]]
[1] 6
答案 1 :(得分:0)
使用xts是一个要求还是只考虑可能的解决方案?你试过了吗?
list.stuff[ index.list[[[-1]] ] <-
list.stuff[ index.list[[-length(index.list)]] ]
然后,如果需要:
list.stuff[ index.list[[[1]] ] <- NULL # or some other value