r - R用循环填充列表列表会产生错误
问题描述
我正在从事一个需要我将大量数据填充到列表列表中的项目。我不断收到“下标越界”错误。我理解这意味着什么,并且我尝试过调试,但是我所看到的一切都告诉我它应该可以工作。
我通过下面的简化示例重新创建了错误:
tl <- list(list())
max <- 3
for (i in 1:max) {
tl[[i]][[1]] <- 1
tl[[i]][[2]] <- 2
tl[[i]][[3]] <- 3
}
运行它会产生错误Error in '*tmp*'[[i]] : subscript out of bounds
。为什么会出现这种情况?我的解释是,当 'i' 达到 2 时,它应该跳转到列表的第二级(在填充之前它是空的,但这是发生错误的地方)。
关于为什么会发生这种情况的任何见解都会非常有帮助。如果我能澄清任何事情,请告诉我。这是从一个包含更大列表的项目中简化的,但我尽量保持简单。
解决方案
tl <- list(list())
不创建列表列表,它只是创建一个列表。
在 for 循环中添加tl[[i]]<-list()
以创建子列表。
tl <- list()
max <- 3
for (i in 1:max) {
#create the sublists
tl[[i]]<-list()
tl[[i]][[1]] <- 1
tl[[i]][[2]] <- 2
tl[[i]][[3]] <- 3
}
推荐阅读
- java - Python多行字符串更改缩进
- python - 你可以做些什么来提高 Pygame 中的 Fps
- mysql - MySQL字符串匹配使用破折号
- reactjs - Material-UI 样式覆盖了我的样式导致排序
- javascript - 当某个按键被按下时,模拟其他按键按下
- c# - 在 WPF 中,如何在不褪色和透明的情况下在图像上绘制矩形?
- html - 如何在 Firefox 中保持“从页面中选择一个元素”处于活动状态?
- docker - Docker-Compose 通过 .env 传递命令参数
- android - 如何停止 React Native 重新渲染?
- c# - 无法使用指纹从 asp.net core 2.1 访问 X509Store 中的证书