r - 用 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 个索引(k
和i
)运行 a ,还有其他函数可以让我的代码更简单/高效,或者在这种情况下最好的办法是跟住for loop
?
解决方案
您收到该错误是因为 的第四个元素mylist
只有 5 个子列表。
你也可以这样做:
resultlist <- lapply(mylist, function(x) lapply(x, function(y) rep(mean(y), length(y))))
得到你想要的。
推荐阅读
- apache-kafka - 为什么 kafka 流状态目录位于 /tmp/kafka-streams 中?
- javascript - 在空闲/不活动时刷新网页
- saml-2.0 - 我的 mvc 应用程序在一段时间 [30m] 不活动后注销并且当我单击站点的任何链接时
- jenkins - Jenkins 声明性管道不读取阶段或步骤
- reactjs - 如何在 next.js(带有 react-native-web 支持)项目中重用 react-native 代码?
- maven - 如何使用带有管道的 Docker 缓存本地 Maven 存储库?
- java - 过度写入数组与删除并重新初始化它?爪哇
- javascript - 如何在 div 的单击而不是按钮上添加/删除 div 颜色?
- docker - 如何从 Docker 容器访问主机中的文件?
- angular - 如何使用 angular 7 和 bootstrap 4 逐步构建代码以形成表单?