2011-06-22 17 views
7

मैं कुछ गेम सिद्धांत सिमुलेशन करने के लिए कुछ कोड लिख रहा हूं। मेरी "दुनिया" में कई राज्य हैं (मेरे मामले में 2 कहें), इसमें कई खिलाड़ी भी हैं (दोबारा, 2), और प्रत्येक खिलाड़ी के पास पेआउट का मैट्रिक्स होता है (2 से 2)।बहु-आयामी ऐरे बनाम सूची tuples की सूची

मैं आर में निम्नलिखित बहुआयामी सरणी बनाने की कोशिश की:

U = array(2,2,2,2) 
U[1][1] = cbind(c(0.7,0.3),c(0.3,0.7)) 

और मैं निम्न त्रुटि प्राप्त:

number of items to replace is not a multiple of replacement length 

मैं एक सूची, उपयोग करने के लिए स्थानांतरित कर सकते हैं जो प्रत्येक आइटम होगा में दो वस्तुओं, ए और बी की एक सूची बनें, जहां ए और बी 2x2 matrices हैं। हालांकि, मुझे लगता है कि सूचियों पर प्रदर्शन करना धीरे-धीरे परेशान हो जाएगा और वेक्टरेशन कठिन होगा।

क्या उचित कार्यान्वयन या उपरोक्त कोड काम नहीं करता है, इस पर एक स्पष्टीकरण पर कोई सुझाव है?

अद्यतन: जाहिरा तौर पर उचित सिंटैक्स होगा:

U[1,1, , ] = cbind(c(0.7,0.3),c(0.3,0.7)) 

मेरा प्रश्न अभी भी खड़ा है - जो बेहतर है, बहु-आयामी वैक्टर या tuples की सूची है?

धन्यवाद,

  • रॉन

उत्तर

10

इस कोड को संभव नहीं काम करते हैं, और आप कम से कम यह अपने आप के लिए प्रयास करना चाहिए कर सकते हैं:

array(2,2,2,2) ## results in unused argument error 

मुझे लगता है कि आप एक 4D सरणी चाहते

U <- array(0, dim = c(2,2,2,2)) 

और उसके बाद करने के लिए आवंटित करने के लिए एक 2 डी भाग उपयोग आर के? निकालें वाक्य रचना

U[1,1,,] <- cbind(c(0.7,0.3),c(0.3,0.7)) 

कोड U[1][1] यू के मामले में समझ में इलाज किया जा रहा है जैसे कि कोई "मंद" विशेषता (सिर्फ एक में संख्या के साथ एक वेक्टर थे हो सकता है वेक्टर, कोई आयाम संरचना)। पहले [1] पहले तत्व को निकालता है, एक एकल तत्व वेक्टर लौटाता है और दूसरी [1] बदले में उस तत्व तत्व वेक्टर से पहले तत्व को अनावश्यक रूप से निकाल देता है।

समझ U[1,1,,] है के संदर्भ में: यह एक 2 डी मैट्रिक्स 4D सरणी U, पहले और दूसरे आयामों से पहले टुकड़ा लेने के द्वारा निर्दिष्ट के एक सबसेट है, और तीसरे और चौथे आयाम से हर टुकड़ा है।

आपको जो त्रुटि दिखाई देती है, वह इस तथ्य से आता है कि आप U के एक तत्व में 2 डी मैट्रिक्स असाइन करने का प्रयास कर रहे हैं - लेकिन केवल एक स्लॉट है और पहले तत्व की संरचना और आकार मैट्रिक्स से अलग है जो आप कोशिश कर रहे हैं इसमें कुचलने के लिए।

सिंगलटन आयाम (पहला और दूसरा) जिसमें निकाले गए सबसेट से केवल एक टुकड़ा होता है, परिणाम से (डिफ़ॉल्ट रूप से) गिरा दिया जाता है।यह निर्दिष्ट करने के द्वारा बचा जा सकता है:

U[1, 1, , , drop = FALSE] 

जो एक 4D सरणी देना होगा, लेकिन दो "पतित" आयामों के साथ एक यानी [1, 1, 2, 2] जहां पहले दो तरह के अनावश्यक हैं (लेकिन इसका अर्थ वास्तव में आपके उद्देश्य पर निर्भर करता है)। यह हिस्सा मूल सरणी के सबसेट में नए मान निर्दिष्ट करने के मुद्दे के लिए वास्तव में प्रासंगिक नहीं है, लेकिन यह आपकी समझ में मदद कर सकता है।

चाहे आपके लिए कोई सरणी या सूची सर्वोत्तम है, आप जो करना चाहते हैं उस पर निर्भर करता है, इसलिए मैं आपके प्रश्न को फिर से पूछने और उन आवश्यकताओं पर ध्यान केंद्रित करने की सिफारिश करता हूं।

संबंधित मुद्दे