首页 > 解决方案 > R - 通过列表迭代循环并创建一个数据框

问题描述

我有一长串列表(> 100k),需要迭代循环遍历每个列表并提取“id”——我可以通过lapply在 for 循环中构建来轻松完成。

以下是列表的示例:

l1 <- list(id="002e2b45555652749339ab9c34359fb6", key="2", value="xx")
l2 <- list(id="002e2b433226527493jsab9c34353fb6", key="4", value="zz")
l3 <- list(list1, list2)

我使用以下方法进行循环:

for(i in 1:20) {
  lapply(l3$id[[i]][1], function (x) print(x))
}

基本上打印 id 的每个列表的所有元素 - 这很好。我最终想构建一个矩阵/数据框,其中包含行中的所有“id”。让我烦恼的是,我的循环中的打印效果很好,打印出所有列表中的所有 id - 尽管我无法将我的行绑定到数据框或矩阵等。我正在尝试类似的东西 - 没有做我想要的(虽然没有收到错误等)

for(i in 1:20) {
  lapply(l3$id[[i]][1], function (x) rbind(x))
}

所以所需的输出应该是(最好作为数据帧)。

[1] "002e2b45555652749339ab9c3400cc52"
[1] "002e2b45555652749339ab9c34040525"

标签: rlistloopsfor-loopiteration

解决方案


如果你想要一个 ID 向量,你可以这样做

sapply(l3, "[[", "id")

或使用 tidyverse 函数

purrr::map_chr(l3, "id")

在 R 中不需要循环这样的东西。


推荐阅读