2

我有一个索引如下的列表:

>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 个向量和 1 个矩阵;其他一切都会像[[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 个向量和列表

4

2 回答 2

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
于 2012-12-03T08:16:39.733 回答
0

使用 xts 是一个要求还是只是一个可能的解决方案的想法?你有没有尝试过:

list.stuff[ index.list[[[-1]] ]  <-
  list.stuff[ index.list[[-length(index.list)]] ]

然后,如果需要:

 list.stuff[ index.list[[[1]] ]  <- NULL # or some other value
于 2012-12-03T07:20:44.627 回答