如何在R语言中将向量转换为指定嵌套结构的列表?
将向量转换为指定嵌套结构的List
下面分两种场景给出简便的R实现方法:
场景1:已有目标嵌套List的结构
利用rapply()递归遍历目标结构,同时按结构拆分向量并填充:
set.seed(123) # 固定随机种子,方便结果复现 vector <- rnorm(10) target_list <- list( list(rnorm(2), rnorm(2)), list(rnorm(3), rnorm(3)) ) # 初始化计数器,按顺序分配向量元素 counter <- 0L result <- rapply(target_list, function(x) { counter <<- counter + length(x) vector[(counter - length(x) + 1):counter] }, how = "replace") # 查看结果结构 str(result)
rapply的how = "replace"参数会保留原list的嵌套结构,仅替换每个叶子节点的内容,刚好满足需求。
场景2:仅知道各子列表的长度结构
写一个递归函数,遍历长度结构的同时拆分向量:
set.seed(123) vector <- rnorm(10) length_list <- list( list(2,2), list(3,3) ) fill_list <- function(len_struct, vec) { pos <- 1 # 递归处理每个节点 recurse <- function(x) { nonlocal pos if (is.numeric(x)) { # 取出对应长度的向量片段 res <- vec[pos:(pos + x - 1)] pos <<- pos + x res } else { # 对非数值节点(即子list)递归处理 lapply(x, recurse) } } recurse(len_struct) } result2 <- fill_list(length_list, vector) # 查看结果结构 str(result2)
这个递归函数会根据长度结构的层级,依次把向量按长度拆分并填充到对应的嵌套位置。
内容的提问来源于stack exchange,提问作者Chp
相关产品推荐
相关产品推荐

