使用一个列表的向量作为另一个列表的向量的索引

cli*_*ver 4 indexing r

我有两个列表,每个列表都包含相同数量的向量。List1 包含所有相同长度的向量,而 List2 包含可能不同长度的向量。这个想法是,使用 List2 向量的内容作为 List1 相应向量的索引。

以下是可重现示例的一些代码:

# create empty lists
List1 <- list()
List2 <- list()


# fill the lists with vectors
set.seed(50)
for (i in 1:1000) {
  List1[[i]] <- sample(0:500, 360, replace= T)
}

set.seed(100)
for (i in 1:1000) {
  List2[[i]] <- sample(0:200, 50, replace= T)
}
Run Code Online (Sandbox Code Playgroud)

这是我希望从每个列表中提取向量的示例:

vec1 <- List1[[1]]
vec2 <- List2[[1]]

# now use the second vector as index for the first one
vec1[vec2]
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如何将其传输到整个列表,以便输出再次成为包含结果向量的列表?

有人有想法吗?

编辑: 这是在一些非常有用的答案之后使用新的列表结构进行的编辑,问题保持不变。

这是可重现示例的代码:

# create empty lists
List1 <- list()
List2 <- list()


# fill the lists with vectors
set.seed(50)
for (i in 1:1000) {
  List1[[i]] <- sample(0:500, 360, replace= T)
}

set.seed(100)
for (i in 1:1000) {
  List2[[i]] <- sample(0:200, 50, replace= T)
}

# create the first level sublists
sublist1 <- list()
sublist2 <- list()
for (i in 1:8) {
  sublist1[[i]] <- List1
  sublist2[[i]] <- List2
}

# create the super lists
superlist1 <- list(sublist1, sublist1, sublist1, sublist1, sublist1, sublist1, sublist1, sublist1)
superlist2 <- list(sublist2, sublist2, sublist2, sublist2, sublist2, sublist2, sublist2, sublist2)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,两个超级列表具有相同的结构,它们只是最低级别列表的长度不同。

那么现在的问题是,如何将 的值用作superlist2[[1]][[1]][[1]]中相应元素的向量superlist1,即superlist1[[1]][[1]][[1]]等等?

Mar*_*Gal 6

你需要一个apply- 函数:

lapply(seq_along(List1), function(n) List1[[n]][List2[[n]]])
Run Code Online (Sandbox Code Playgroud)

返回预期列表。

tidyverse你可以使用

library(dplyr)
library(purrr)

List1 %>% 
  map2(.y = List2, ~.x[.y])
Run Code Online (Sandbox Code Playgroud)

得到相同的结果。