命名R中嵌套列表的第二级

Name second level of nested list in R

我有一个类似于以下虚拟对象的嵌套列表:

list1 <- list(1:3, 4:7, 8:10)
list2 <- list(2:5, 4:9, 19:23, 15:18)
list3 <- list(1:5)

nested_list <- list(list1, list2, list3)
names(nested_list) <- c("first", "second", "third")

第一层有名字,第二层没有。我想根据第一级名称和 pos 索引将名称分配给列表的第二级,因此该列表的结构如下所示:

List of 3
 $ first :List of 3
  ..$ first_1: int [1:3] 1 2 3
  ..$ first_2: int [1:4] 4 5 6 7
  ..$ first_3: int [1:3] 8 9 10
 $ second:List of 4
  ..$ second_1: int [1:4] 2 3 4 5
  ..$ second_2: int [1:6] 4 5 6 7 8 9
  ..$ second_3: int [1:5] 19 20 21 22 23
  ..$ second_4: int [1:4] 15 16 17 18
 $ third :List of 1
  ..$ third_1: int [1:5] 1 2 3 4 5

有人知道怎么解决吗?我将不胜感激。

for 循环怎么样?

for (i in seq_along(nested_list)) {
   names(nested_list[[i]]) <- paste(names(nested_list)[i], 
                                    seq_along(nested_list[[i]]), 
                                    sep = "_")
}

替代选项:

setNames(lapply(seq_along(nested_list), function(x) { setNames(nested_list[[x]],paste(names(nested_list)[x], 1:length(nested_list[[x]]), sep="_")) }), names(nested_list))

使用imap

library(purrr)
library(stringr)
nested_list <- imap(nested_list, ~ setNames(.x, str_c(.y, "_", seq_along(.x))))

-输出

> str(nested_list)
List of 3
 $ first :List of 3
  ..$ first_1: int [1:3] 1 2 3
  ..$ first_2: int [1:4] 4 5 6 7
  ..$ first_3: int [1:3] 8 9 10
 $ second:List of 4
  ..$ second_1: int [1:4] 2 3 4 5
  ..$ second_2: int [1:6] 4 5 6 7 8 9
  ..$ second_3: int [1:5] 19 20 21 22 23
  ..$ second_4: int [1:4] 15 16 17 18
 $ third :List of 1
  ..$ third_1: int [1:5] 1 2 3 4 5