2015-11-13 98 views
1

道歉,如果问题太过简单。这将是一种有效的方法/理念(在[R)转换从树列表到R中的矩阵

list(c(1), c(1,2), c(1,2,3), c(1,2,3,4)) 

以方阵形式

 [,1] [,2] [,3] [,4] 
[1,] 1 NA NA NA 
[2,] 1 2 NA NA 
[3,] 1 2 3 NA 
[4,] 1 2 3 4 

我想有追加只是NA正确数量的一些快速的动态的方式值,然后转换为矩阵。

自然地,(方形)矩阵的大小可以改变)。

提前感谢您的时间。

+0

看到这个答案,除了将NAS代替零:http://stackoverflow.com/questions/33703940/tree-list-to-reverse-lower-triangular-matrix-in-r/33704844# 33704844 –

回答

4

您可以使用

## create the list 
x <- Map(":", 1, 1:4) 

ml <- max(lengths(x)) 
do.call(rbind, lapply(x, "length<-", ml)) 
#  [,1] [,2] [,3] [,4] 
# [1,] 1 NA NA NA 
# [2,] 1 2 NA NA 
# [3,] 1 2 3 NA 
# [4,] 1 2 3 4 

或者你可以做

library(data.table) 
as.matrix(unname(rbindlist(lapply(x, as.data.frame.list), fill = TRUE))) 
#  [,1] [,2] [,3] [,4] 
# [1,] 1 NA NA NA 
# [2,] 1 2 NA NA 
# [3,] 1 2 3 NA 
# [4,] 1 2 3 4 

还有一的好办法...脱颖而出!

m <- stringi::stri_list2matrix(x, byrow = TRUE) 
mode(m) <- "numeric" 
m 
#  [,1] [,2] [,3] [,4] 
# [1,] 1 NA NA NA 
# [2,] 1 2 NA NA 
# [3,] 1 2 3 NA 
# [4,] 1 2 3 4