将列表逐元素附加到 R 中嵌套列表的元素

append a list element-wise to elements of a nested list in R

我是 R 的新手,仍在努力了解 apply 系列而不是使用循环。

我有两个列表,一个是嵌套的,另一个不是,都是由字符组成的:

>lst1 <- list(c("ABC", "DEF", "GHI"), c("JKL", "MNO", "PQR"))
>lst2 <- c("abc", "def")

我想创建第三个列表,以便将 lst2 的每个元素附加为 lst1 中相应子列表的最后一个元素。所需的输出如下所示:

>lst3
[[1]]
[1] "ABC" "DEF" "GHI" "abc"

[[2]]
[1] "JKL" "MNO" "PQR" "def"

到目前为止,我在 R 中的经验告诉我,可能有一种方法可以在不显式编写循环的情况下执行此操作。

lapply 不会满足您的需求。您可以使用带有 append 的循环来执行此操作:

list1 <- list(c("ABC","DEF","GHI"),c("JKL","MNO","PQR"))
list2 <- c("abc","def")

listcomplete <- list(c("ABC","DEF","GHI","abc"),c("JKL","MNO","PQR","def"))

for (i in 1:length(list2)) {
  list1[[i]] <- append(list1[[i]],list2[i])
}

结果:

> list1
[[1]]
[1] "ABC" "DEF" "GHI" "abc"

[[2]]
[1] "JKL" "MNO" "PQR" "def"

如果您在 lst1 向量的长度上应用您的函数,您绝对可以使用 lapply。这有效:

lapply(1:length(lst1),function(i) append(lst1[[i]],lst2[[i]]))

[[1]]
[1] "ABC" "DEF" "GHI" "abc"

[[2]]
[1] "JKL" "MNO" "PQR" "def"

您可以使用 Map,它的作用与 mapply(..., simplify = F) 完全相同:

Map(c, lst1, lst2)
[[1]]
[1] "ABC" "DEF" "GHI" "abc"

[[2]]
[1] "JKL" "MNO" "PQR" "def"