首页 > 解决方案 > 用 for 循环或 Lapply 填充列表

问题描述

这是我的清单:

mylist=dput(mylist)
list(list(
        c(30, 50, 35, 25, 45), 
        c(40, 35, 35, 50, 45), 
        c(40, 20, 40, 50, 25), 
    ),
    list(
        c(50, 50, 25, 40, 45, 40, 35, 40, 45, 20), 
        c(40, 35, 40, 40, 45, 30, 20, 50, 35, 25), 
        c(20, 30, 50, 35, 45, 40, 25, 50, 35, 50), 
    ),
    list(
        c(45, 50, 25, 25, 30, 25, 35, 35, 35, 30, 50, 50, 30, 30, 20), 
        c(40, 20, 35, 35, 50, 20, 25, 30, 35, 20, 40, 20, 45, 30, 20), 
        c(50, 20, 25, 35, 35, 30, 50, 25, 40, 35, 45, 45, 35, 45, 25), 
    ), 
    list(
        c(50, 50, 50, 40, 20, 25, 50, 40, 50, 50, 45, 40, 30, 50, 35, 45, 50, 30, 
35, 45), 
        c(45, 20, 25, 20, 25, 30, 20, 30, 45, 25, 50, 30, 30, 25, 50, 45, 20, 45, 45, 50), 
        c(20, 40, 50, 25, 40, 45, 25, 30, 20, 20, 35, 45, 20, 40, 50, 45, 40, 40, 45, 35), 
    ),
     list(
        c(35, 25, 45, 20, 25, 30, 30,  35, 30, 40, 30, 20, 20, 30, 45, 40, 35, 35, 35, 35, 25, 45, 35, 20, 50), 
        c(50, 35, 30, 30, 35, 45, 45, 50, 25, 25, 40, 25, 50, 45, 25, 30, 30, 25, 45, 45, 30, 20, 50, 30, 30), 
        c(35, 40, 50, 25, 40, 45, 30, 25, 50, 25, 35, 50, 50, 50, 25, 50, 20, 50, 40, 25, 25, 35, 20, 20, 50),
    )
)

)

mylist=dput(mylist)
list
    (
    list( c(30, 50, 35, 25, 45), 
          c(40, 35, 35, 50, 45), 
          c(40, 20, 40, 50, 25), 
    ),
    list(   
            c(50, 50, 25, 40, 45, 40, 35,  40, 45, 20), 
            c(40, 35, 40, 40, 45, 30, 20, 50, 35, 25), 
            c(20,  30, 50, 35, 45, 40, 25, 50, 35, 50),
    ), list(
            c(45, 50, 25, 25, 30, 25, 35, 35, 35, 30, 50, 50, 30, 30, 20), 
            c(40, 20, 35, 35, 50, 20, 25, 30, 35, 20, 40, 20, 45, 30, 20), 
            c(50, 20, 25, 35, 35, 30, 50, 25, 40, 35, 45, 45, 35, 45, 25), 
), 
       list(
            c(50, 50,50, 40, 20, 25, 50, 40, 50, 50, 45, 40, 30, 50, 35, 45, 50, 30, 35, 45), 
            c(45, 20, 25, 20, 25, 30, 20, 30, 45, 25, 50, 30, 30, 25, 50, 45, 20, 45, 45, 50), 
            c(20, 40, 50, 25, 40, 45, 25, 30, 20, 20, 35, 45, 20, 40, 50, 45, 40, 40, 45, 35), 
),
 list(
        c(35, 25, 45, 20, 25, 30, 30, 35, 30, 40, 30, 20, 20, 30, 45, 40, 35, 35, 35, 35, 25, 45, 35, 20, 50), 
        c(50, 35, 30, 30, 35, 45, 45, 50, 25, 25, 40, 25, 50, 45, 25, 30, 30, 25, 45, 45, 30, 20, 50, 30, 30), 
c(35, 40, 50, 25, 40, 45, 30, 25, 50, 25, 35, 50, 50, 50, 25, 50, 20, 50, 40, 25, 25, 35, 20, 20, 50),

 )))

我面临两个问题:

第一:我不能在下面运行这个 For 循环:

resultlist<-vector(mode = "list", 5)

for (i in 1:6) {
  for(k in 1:5) {     

    resultlist[[k]][[i]]<-mean(mylist[[k]][[i]]) 
   }

}

它发送消息:Error in mylist[[k]][[i]] : subscript out of bounds

第二个问题实际上是一个建议:我的原始文件for要大得多(例如我i的 go until 4828),要for使用这 2 个索引(ki)运行 a ,还有其他函数可以让我的代码更简单/高效,或者在这种情况下最好的办法是跟住for loop

标签: r

解决方案


您收到该错误是因为 的第四个元素mylist只有 5 个子列表。

你也可以这样做:

resultlist <- lapply(mylist, function(x) lapply(x, function(y) rep(mean(y), length(y))))

得到你想要的。


推荐阅读