将R中的向量转换为嵌套列表

时间:2018-08-10 17:15:21

标签: r nested-lists

我有一个长度为n的向量,我想将其转换为嵌套列表。外部列表的长度应为n / 2,并且该列表中的每个项目都应具有两个子列表。每个列表中的第一个子列表将包含向量中的奇数元素,第二个子列表将包含偶数元素(如果这没有道理,请参阅示例代码...我很难时间来概括地描述它)。

问题: 有没有一种方法可以在不使用for循环的情况下将此向量转换为嵌套列表? 我正在模拟环境中执行此操作,因此我想确保它尽可能快。前述向量在仿真迭代之间的长度会有所不同,因此我试图找到一个可以概括为长度为n的向量的答案。向量将始终是偶数。

示例向量和列表: ex_vector <- 1:6 ex_list <- list( list(1, 2), list(3, 4), list(5, 6) ) 编辑:修复了我的示例代码中的错误

3 个答案:

答案 0 :(得分:1)

我们使用glsplitvector的分组变量创建为list,并使用list as.list

n <- 2
out <- lapply(split(ex_vector, as.integer(gl(length(ex_vector), n,
                 length(ex_vector)))), as.list)
str(out)
#List of 3
# $ 1:List of 2
#  ..$ : int 1
#  ..$ : int 2
# $ 2:List of 2
#  ..$ : int 3
#  ..$ : int 4
# $ 3:List of 2
#  ..$ : int 5
#  ..$ : int 6

或使用%/%split

lapply(split(ex_vector, (seq_along(ex_vector)-1) %/% n + 1), as.list)

或紧凑

split(as.list(ex_vector), cumsum(seq_along(ex_vector) %%2))

答案 1 :(得分:1)

n <- length(ex_vector)
lapply(split(ex_vector, rep(1:(n/2), each = 2)), split, 1:2)

答案 2 :(得分:1)

我不确定是否了解一般原理,但是下面的代码适用于示例:

> x <- apply(matrix(ex_vector, ncol=2, byrow=TRUE), 1, as.list)
> str(x)
List of 3
 $ :List of 2
  ..$ : int 1
  ..$ : int 2
 $ :List of 2
  ..$ : int 3
  ..$ : int 4
 $ :List of 2
  ..$ : int 5
  ..$ : int 6