我试图将列表中的元素细分为不同的列。
示例数据:
d <- list(c(1,2,3,4,5,6,7,8),c(1,2,3,4,5,6,7,8))
这是列表中1个元素的解决方案:
numrows <- (row(as.matrix(d[[1]])) %% 2)
TabNum <- sapply(1:2, function(x) as.matrix(d[[1]])[numrows==numrows[x,], ,drop=FALSE])
如何有效地完成整个清单?
这是开始,但后来我发现与sapply
进行比较很麻烦,无论如何这是真正的黑客,必须有更整洁的解决方案。
numrows.list <- lapply(1:length(d), function(i) (row(as.matrix(d[[i]])) %% 2))
因此对于d
列表,将有4列。所以期望的输出是:
[,1] [,2] [,3] [,4]
[1,] 1 2 1 2
[2,] 3 4 3 4
[3,] 5 6 5 6
[4,] 7 8 7 8
答案 0 :(得分:2)
这似乎可以在这里工作
do.call(cbind, lapply(d, function(x) matrix(x, ncol = 2, byrow = TRUE)))
# [,1] [,2] [,3] [,4]
# [1,] 1 2 1 2
# [2,] 3 4 3 4
# [3,] 5 6 5 6
# [4,] 7 8 7 8