【发布时间】:2021-12-29 11:34:21
【问题描述】:
我有一个数字向量列表:
a <- list(c(2, 3, 4, 5, 6, 7), c(4, 5, 6, 7, 8), c(6, 7, 8, 9, 10))
> a
[[1]]
[1] 2 3 4 5 6 7
[[2]]
[1] 4 5 6 7 8
[[3]]
[1] 6 7 8 9 10
我想创建一个列表,其中每个元素对应于原始列表“a”中从 1 到最大值的值。新列表的每个元素中的值是包含焦点值的原始列表中的索引。
例如,结果中的第一个元素包含“a”中值为 1 的索引。由于没有元素包含 1,因此结果为 NULL。第二个元素包含“a”中值为 2 的索引,即第一个元素 1。值 4 在元素 1 和 2 中找到。
> res
[[1]]
NULL
[[2]]
[1] 1
[[3]]
[1] 1
[[4]]
[2] 1 2
[[5]]
[2] 1 2
[[6]]
[3] 1 2 3
[[7]]
[3] 1 2 3
[[8]]
[2] 2 3
[[9]]
[1] 3
[[10]]
[1] 3
我用嵌套循环尝试过这个,但是它花费了太多时间并且在循环中增长列表非常慢。我的主列表中有 60,000 个子列表,那么是否有针对此的矢量化解决方案?
提前致谢。
【问题讨论】:
-
我不明白您是如何从列表示例列表
a变成翻过来的列表,也称为a。还是它们之间没有关系? -
很简单:从 1 到
max(a[1..3])形成的新列表的名称,值是旧列表的名称/索引,其中新名称作为值找到。例如。值 1 在所有子列表中都不存在,所以它是NULL,值 2 仅在子列表a[[1]]中找到,值 6 在所有a[[1]]、a[[2]]和a[[3]]中找到,sot(新)@987654332 @ 包含c(1, 2, 3) -
是的,这就是我想要的