में 2 डी मैट्रिक्स की सूची को ढेर करने का कार्यात्मक तरीका एक चालाक lapply
के बाद, मुझे 2-आयामी मैट्रिक्स की एक सूची के साथ छोड़ दिया गया है।3 डी मैट्रिक्स
उदाहरण के लिए:
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]]
...
मैं चालू करने के लिए है कि एक 3-आयामी सरणी में करना चाहते हैं:
set.seed(1)
replicate(5, matrix(runif(25),ncol=5))
जाहिर है, अगर मैं दोहराने का उपयोग कर रहा मैं सिर्फ simplify
चालू कर सकते हैं, लेकिन sapply
परिणाम को सही ढंग से सरल नहीं करता है, और stack
पूरी तरह से विफल रहता है। do.call(rbind,mylist)
इसे 3 डी सरणी के बजाय 2 डी मैट्रिक्स में बदल देता है।
मैं इसे एक लूप के साथ कर सकता हूं, लेकिन मैं इसे संभालने के लिए एक साफ और कार्यात्मक तरीका ढूंढ रहा हूं।
निकटतम तरह से मैं के साथ आ गया है:
array(do.call(c, test), dim=c(dim(test[[1]]),length(test)))
लेकिन मुझे लगता है कि जैसे असजीला है (क्योंकि यह disassembles और फिर वैक्टर की सरणी विशेषताओं reassembles, और बनाने के लिए परीक्षण का एक बहुत जरूरत सुरक्षित (जैसे कि प्रत्येक तत्व के आयाम एक ही हैं)।
वहाँ abind पैकेज – baptiste
मैं सहमत नहीं है कि आपके के सबसे करीबी रास्ता 'असजीला है और मैं आगे इससे सहमत नहीं है कि यह परीक्षण के "एक बहुत" की जरूरत है। यह स्पष्ट रूप से सही है और आपको 'do.call (c, test)' या 'असूची (परीक्षण)' की आवश्यकता है और उसके बाद इसकी पूरी तरह से सरल है। –
@Dwin शायद मैं अपने कोड पर बहुत कठिन हूं। लेकिन वैक्टर/मैट्रिस के मूलभूत सिद्धांतों का लाभ लेना हमेशा मुझे परेशान करता है। प्वाइंट लिया गया, हालांकि, यह एक भयानक समाधान नहीं हो सकता है। –