2017-02-09 13 views
7

मैं समझ नहीं कैसे एक बार 50 जहां भी संख्या दो बार दोहराया जाता है और असमान संख्या को 3 से एक सदिश का निर्माण करने के, जैसे कि वेक्टर होगादोहराने बारी वेक्टर महत्व देता

3, 4, 4, 5, 6, 6, 7, 8, 8, 9, ..., 50, 50 

उत्तर

10

rep() होगा चाल चलो।

x <- 3:50 
rep(x, (x %% 2 == 0) + 1L) 
# [1] 3 4 4 5 6 6 7 8 8 9 10 10 11 12 12 13 14 14 15 16 16 17 
# [23] 18 18 19 20 20 21 22 22 23 24 24 25 26 26 27 28 28 29 30 30 31 32 
# [45] 32 33 34 34 35 36 36 37 38 38 39 40 40 41 42 42 43 44 44 45 46 46 
# [67] 47 48 48 49 50 50 

x %% 2 == 0 एक तार्किक वेक्टर संकेत जो x के तत्वों भी कर रहे हैं देता है। चूंकि TRUE और FALSE के पूर्णांक मान क्रमशः 1 और 0 हैं, 1 से x %% 2 == 0 जोड़कर हमें तर्क rep() में हमें वेक्टर देता है।

यदि हम गोल्फ खेल रहे हैं, तो हम इसे rep(x, (!x %% 2) + 1L) पर छोटा कर सकते हैं।

ध्यान दें कि यह विधि उपयोगी भी होगी यदि हमारा मूल वेक्टर अनुक्रमिक नहीं है, और हम अभी भी मूल्यों को दोहराना चाहते हैं।

v <- c(1, 2, 4, 3, 6) 
rep(v, (!v %% 2) + 1L) 
# [1] 1 2 2 4 4 3 6 6 
+5

और एक छोटे से अधिक हार्ड-कोडेड: 'प्रतिनिधि (3:50, प्रतिनिधि (1: 2, 24)) ' – lmo

5

रीसाइक्लिंग का उपयोग करना, एक सा मैनुअल तरीका:

x <- 3:50 
sort(c(x, x[c(FALSE, TRUE)])) 
8

हम सभी मूल्यों का एक वेक्टर और एक साथ भी संख्या का एक वेक्टर विलय कर सकते हैं:

sort(c(3:50, 2:25*2)) 
संबंधित मुद्दे