如何在两个列表之间创建双射?

时间:2020-09-23 17:14:52

标签: r

下午好!

我要转换如下列表:

list_1= list(c(1,30,25),c(51,70),c(102,130,125))

成为:

list_2=list(c(1,2,3),c(4,5),c(6,7,8))

我知道我们可以使用list_1来获取长度:

lengths(list_1)
3 2 3 

list_2代表list_1元素的索引(以防我们取消列出)。

我希望我的问题很清楚,谢谢您的提前帮助!

2 个答案:

答案 0 :(得分:3)

使用split

ll <- lengths(list_1)
unname(split(seq(unlist(list_1)), rep(seq(ll), ll)))
# [[1]]
# [1] 1 2 3
# 
# [[2]]
# [1] 4 5
# 
# [[3]]
# [1] 6 7 8

答案 1 :(得分:1)

带有relist

的选项
relist(seq_along(unlist(list_1)), skeleton = list_1)
#[[1]]
#[1] 1 2 3

#[[2]]
#[1] 4 5

#[[3]]
#[1] 6 7 8