Sau khi thông minh lapply
, tôi đã để lại danh sách ma trận 2 chiều.Cách chức năng để xếp chồng danh sách ma trận 2d vào ma trận 3d
Ví dụ:
set.seed(1)
test <- replicate(5, matrix(runif(25),ncol=5), simplify=FALSE)
> test
[[1]]
[,1] [,2] [,3] [,4] [,5]
[1,] 0.8357088 0.29589546 0.9994045 0.2862853 0.6973738
[2,] 0.2377494 0.14704832 0.0348748 0.7377974 0.6414624
[3,] 0.3539861 0.70399206 0.3383913 0.8340543 0.6439229
[4,] 0.8568854 0.10380669 0.9150638 0.3142708 0.9778534
[5,] 0.8537634 0.03372777 0.6172353 0.4925665 0.4147353
[[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] 0.1194048 0.9833502 0.9674695 0.6687715 0.1928159
[2,] 0.5260297 0.3883191 0.5150718 0.4189159 0.8967387
[3,] 0.2250734 0.2292448 0.1630703 0.3233450 0.3081196
[4,] 0.4864118 0.6232975 0.6219023 0.8352553 0.3633005
[5,] 0.3702148 0.1365402 0.9859542 0.1438170 0.7839465
[[3]]
...
Tôi muốn biến chúng thành một mảng 3 chiều:
set.seed(1)
replicate(5, matrix(runif(25),ncol=5))
Rõ ràng, nếu tôi đang sử dụng sao chép Tôi chỉ có thể bật simplify
, nhưng sapply
không đơn giản hóa kết quả đúng cách và stack
không hoàn toàn. do.call(rbind,mylist)
biến nó thành ma trận 2d thay cho mảng 3d.
Tôi có thể làm điều này với một vòng lặp, nhưng tôi đang tìm một cách gọn gàng và chức năng để xử lý nó.
Cách gần nhất tôi đã đưa ra là:
array(do.call(c, test), dim=c(dim(test[[1]]),length(test)))
Nhưng tôi có cảm giác như đó là không thanh nha (vì nó disassembles và sau đó ráp các thuộc tính mảng của các vectơ, và cần rất nhiều thử nghiệm để làm cho an toàn (ví dụ rằng kích thước của mỗi phần tử đều giống nhau).
có các abind gói – baptiste
Tôi không đồng ý rằng 'cách gần nhất' của bạn được hay cho lắm và tôi tiếp tục không đồng ý rằng nó cần "rất nhiều" thử nghiệm. Nó rõ ràng là đúng và bạn cần 'do.call (c, test)' hoặc 'unlist (test)' và sau đó nó hoàn toàn đơn giản. –
@Dwin có lẽ tôi quá khó trên mã của riêng tôi. Nhưng lợi dụng các nguyên tắc cơ bản của vectơ/ma trận luôn khiến tôi lo lắng. Tuy nhiên, điểm nhấn là nó có thể không phải là một giải pháp khủng khiếp. –