汇总 r 中索引处的向量列表列表

Summarise list of lists of vectors at a index in r

所以我试图在某个时间总结每个列表中嵌套向量的值。这些向量被视为离散时间中个体的值。列表如下所示

groups <- 100
size <- 10
workspace <- list()

for (i in 1:groups) {
  workspace[[i]] <- list()
  for (j in 1:size) {
    workspace[[i]][[j]] <- c(1,1,1)
  }
}

组 i 中的人 j 在时间 3 的值是通过

获得的
workspace[[i]][[j]][3]

组的大小为 10,由于所有值都等于 1,因此返回的总和应为 10。

在时间 3 总结第 100 组值的不成功尝试看起来像这样

sum(workspace[[100]][[]][3])

感谢任何帮助!

您可以创建自己的函数,它适应您的对象的结构(列表的列表)。

own_sum <- function(myobject, group, time){
  mylist <- myobject[[group]]
  result <- 0
  for(i in 1:length(mylist)){
    result <- result + mylist[[i]][[time]] 
  }
  return(result)
}

own_sum(biglist = workspace, group = 100, time = 3)
# [1] 10

这里有一行快速循环遍历每个组,从每个项目中提取第三个元素并求和:

lapply(workspace, function(x) sum(sapply(x, "[", 3)))
[[1]]
[1] 10

[[2]]
[1] 10

[[3]]
[1] 10

[[4]]
[1] 10
...

或者,我们可以使用 sapply 获取向量中的输出,向量的第 n 个元素对应于第 n 组:

sapply(workspace, function(x) sum(sapply(x, "[", 3)))
  [1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
 [35] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
 [69] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10

如果你只想要第100组,我们可以直接传workspace[[100]]到里面:

sum(sapply(workspace[[100]], "[", 3))
# [1] 10

希望您可以从这些示例中概括出您需要的任何内容。