命名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
我有一个类似于以下虚拟对象的嵌套列表:
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