R语言中如何结合列表索引与元素名称生成组合命名?
解决方案1:保留list1的索引 + list2的名称(即你想要的"1_b1"格式)
你只需要在生成组合时,把list2的索引替换成它的名称即可,修改expand.grid的参数:
# 生成list1索引与list2名称的所有组合,调整顺序为list1在前、list2在后 data_fr <- expand.grid(list2_name = names(list2), list1_idx = seq_along(list1))[, c("list1_idx", "list2_name")] # 按行拼接成字符串 data_fr <- apply(data_fr, 1, paste, collapse = "_") # 给结果列表命名 names(my_list_2) <- data_fr
运行后data_fr的结果就是:
[1] "1_b1" "1_b2" "2_b1" "2_b2" "3_b1" "3_b2"
解决方案2:同时保留两个列表的名称(如"a1_b1"格式)
如果想把list1的名称也保留下来,直接用两个列表的名称生成组合:
# 生成list1名称与list2名称的所有组合,调整顺序为list1在前、list2在后 data_fr <- expand.grid(list2_name = names(list2), list1_name = names(list1))[, c("list1_name", "list2_name")] data_fr <- apply(data_fr, 1, paste, collapse = "_") names(my_list_2) <- data_fr
此时data_fr的结果为:
[1] "a1_b1" "a1_b2" "a2_b1" "a2_b2" "a3_b1" "a3_b2"
补充:批量填充组合后的列表内容
如果需要把list1和list2的元素对应组合存入my_list_2,可以用循环快速完成:
k <- 1 for (i in seq_along(list1)) { for (j in seq_along(list2)) { my_list_2[[k]] <- c(list1[[i]], list2[[j]]) k <- k + 1 } }
内容的提问来源于stack exchange,提问作者MariaK
相关产品推荐
相关产品推荐

