2015-11-13 140 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