2012-06-24 19 views
10

हम एक सरणी है कि इस तरह दिखता है प्राप्त करना चाहते हैं दोहरा:एक दोहराया अनुक्रम

1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4 

यह करने के लिए सबसे आसान तरीका क्या है?

+0

यह लूप के बारे में सोचा, लेकिन क्या कोई आसान तरीका नहीं है? –

उत्तर

30

आप एक ही rep कॉल के साथ ऐसा कर सकते हैं। each और times पैरामीटर का मूल्यांकन क्रमशः each के साथ किया जा रहा है।

rep(1:4, times=3, each=3) 
#[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 
+1

यह मेरे विचार में स्वीकृत उत्तर होना चाहिए – Andrie

2

इस तरह:

rep(sapply(1:4, function(x) {rep(x, 3)}), 3) 

प्रतिनिधि (एक्स, एन) एक वेक्टर x एन बार पुन: दोहरा देता है। सदिश रूप से वेक्टर 1: 4 के प्रत्येक तत्व को दिया गया फ़ंक्शन लागू करता है, प्रत्येक तत्व को लगातार 3 बार दोहराता है।

+3

आपको डाइटर के उत्तर पर एक नज़र डालना चाहिए - 'प्रत्येक' पैरामीटर ऐसा करेगा जो आप कॉल करने के लिए कॉल का उपयोग करने से बहुत अच्छा कर रहे हैं। – Dason

17

या, सरल (यह मानते हुए आप एक वेक्टर, नहीं एक सरणी मतलब)

rep(rep(1:4,each=3),3) 
0

aperm के साथ सरणी हेरफेर का उपयोग करने का एक तरीका यहां दिया गया है। विचार मूल्य युक्त एक सरणी बनाना है। उन्हें पुनर्व्यवस्थित करें ताकि वे aperm का उपयोग करके वांछित आउटपुट से मेल खाते हों, और फिर c के साथ सरणी को "प्रकट" करें।

c(aperm(array(1:4, dim=c(4,3,3)), c(2, 1, 3))) 
[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 
संबंधित मुद्दे