2012-10-05 7 views
6

जब सरणी को सब्सक्राइब करते हैं, तो आर अलग-अलग व्यवहार करता है कि आयामों में से एक लंबाई 1 या नहीं है या नहीं। एक आयाम लंबाई 1 है, तो उस आयाम subsetting दौरान खो दिया है:सब्सक्रिप्शन आर सरणी: इसकी लम्बाई होने पर आयाम खो गया है 1

ax <- array(1:24, c(2,3,4)) 
ay <- array(1:12, c(1,3,4)) 
dim(ax) 
#[1] 2 3 4 
dim(ay) 
#[1] 1 3 4 
dim(ax[,1:2,]) 
#[1] 2 2 4 
dim(ay[,1:2,]) 
#[1] 2 4 

देखने के लिए, कुल्हाड़ी और ay की मेरी बात से ही कर रहे हैं, और प्रदर्शन उन पर एक ही सबसेट आपरेशन ही आयामों के साथ एक सरणी वापस आ जाएगी । मैं देख सकता हूं कि आर दो मामलों को संभालने का तरीका उपयोगी हो सकता है, लेकिन यह कोड में अवांछनीय है जिसे मैं लिख रहा हूं। इसका अर्थ यह है कि जब मैं किसी अन्य फ़ंक्शन में एक सबसेटेड सरणी पास करता हूं, तो फ़ंक्शन को एक सरणी मिल जाएगी जिसमें आयाम गुम हो रहा है, अगर मैंने पहले चरण में आयाम को लंबाई 1 तक कम किया था। (इसलिए इस मामले में आर की लचीलापन मेरे कोड को कम लचीला बना रही है!)

मैं आर को सब्सक्रिप्शन के दौरान लंबाई 1 के आयाम को खोने से कैसे रोक सकता हूं? अनुक्रमण का एक और तरीका है? सेट करने के लिए कुछ ध्वज?

+0

समान नहीं लेकिन शायद ब्याज की: http://stackoverflow.com/questions/12196724/generally-disable-dimension-dropping-for-matrices –

उत्तर

14

जैसा कि आप डिफ़ॉल्ट रूप से पता चला है आर अनावश्यक आयामों को छोड़ देता है। जोड़ा जा रहा है drop=FALSE जबकि अनुक्रमण इसे रोकने के कर सकते हैं:

> dim(ay[,1:2,]) 
[1] 2 4 
> dim(ax[,1:2,]) 
[1] 2 2 4 
> dim(ay[,1:2,,drop = F]) 
[1] 1 2 4 
+0

धन्यवाद, Dason। उत्तम। मैंने अनुमान लगाया नहीं होगा कि आप इसे इस तरह से कर सकते हैं। (मुझे पता था कि यह एक एफएक्यू था, लेकिन उत्तर के लिए एक उपयोगी खोज स्ट्रिंग बनाना मुश्किल है।) – Mars

+0

प्रश्न का पालन करें: मैं अंतर्निहित सहायता प्रणाली से यह वाक्यविन्यास जानकारी कैसे प्राप्त कर सकता हूं? – Mars

+0

'?" ["'काम करना चाहिए। या 'मदद ("[") '। – Dason

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