2012-06-21 44 views
5

Tôi có danh sách không đối xứng, tức là số lượng phần tử trong từng danh sách phụ khác nhau. Làm thế nào tôi có thể chuyển đổi danh sách thành ma trận?R: chuyển đổi danh sách bất đối xứng thành ma trận - số phần tử trong mỗi danh sách phụ khác nhau

Dưới đây tôi bắt đầu với danh sách đối xứng và chuyển đổi nó thành ma trận theo hai cách khác nhau.

# create a symmetric list 

my.list1 <- list(c(1,2,3,4),c(5,6,7,8),c(9,10,11,12)) 
my.list1 

# convert symmetric list to a matrix 

mat.a1 <- matrix(unlist(my.list1), nrow=length(my.list1), byrow=T) 
mat.a1 

# alternative method to convert symmetric list to a matrix 

mat.b1 <- do.call(rbind, my.list1) 
mat.b1 

Tiếp theo tôi tạo ra một danh sách không đối xứng:

# create an asymmetric list 

my.list2 <- list(c(1,2,3,4),c(5,6,7,8,9),c(10,11,12,13)) 
my.list2 

Đây là ma trận mong muốn:

# desired result 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 1 2 3 4 NA 
# [2,] 5 6 7 8 9 
# [3,] 10 11 12 13 NA 

Trả lời

7

Thứ nhất, mở rộng mỗi vector trong danh sách của bạn bằng NA để có được vectơ cùng chiều dài. Sau đó tạo ma trận của bạn. Ví dụ:

max.len <- max(sapply(my.list2, length)) 
corrected.list <- lapply(my.list2, function(x) {c(x, rep(NA, max.len - length(x)))}) 
mat <- do.call(rbind, corrected.list) 
Các vấn đề liên quan