我有一个长度为n的向量,我想将其转换为嵌套列表。外部列表的长度应为n / 2
,并且该列表中的每个项目都应具有两个子列表。每个列表中的第一个子列表将包含向量中的奇数元素,第二个子列表将包含偶数元素(如果这没有道理,请参阅示例代码...我很难时间来概括地描述它)。
问题: 有没有一种方法可以在不使用for循环的情况下将此向量转换为嵌套列表? 我正在模拟环境中执行此操作,因此我想确保它尽可能快。前述向量在仿真迭代之间的长度会有所不同,因此我试图找到一个可以概括为长度为n的向量的答案。向量将始终是偶数。
示例向量和列表:
ex_vector <- 1:6
ex_list <- list(
list(1, 2),
list(3, 4),
list(5, 6)
)
编辑:修复了我的示例代码中的错误
答案 0 :(得分:1)
我们使用gl
和split
将vector
的分组变量创建为list
,并使用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