आर

2013-02-13 12 views
5

में वेक्टर को दोहराएं मेरे पास एक वेक्टर है vec = c(1,1) और मैं इसे (cbind) कॉलम के अनुसार 10 बार दोहराना चाहता हूं, इसलिए मुझे कुछ ऐसा लगता है जो matrix(1, 10, 2) जैसा दिखता है। क्या कोई ऐसा कार्य है जो vec पर चलता है जो यह प्रतिकृति कर सकता है? यानी प्रतिनिधि (वीसी, 10)?आर

धन्यवाद!

उत्तर

8
vec <- c(1,2) 
rep(1,10) %*% t.default(vec) 
     [,1] [,2] 
[1,] 1 2 
[2,] 1 2 
[3,] 1 2 
[4,] 1 2 
[5,] 1 2 
[6,] 1 2 
[7,] 1 2 
[8,] 1 2 
[9,] 1 2 
[10,] 1 2 

या @Joshua बताते हैं:

tcrossprod(rep(1,10),vec) 

कुछ मानक:

+०१२३५१६४१०
library(microbenchmark) 

microbenchmark(rep(1,10) %*% t.default(vec), 
       matrix(rep(vec, each=10), ncol=2), 
       t.default(replicate(10, vec)), 
       tcrossprod(rep(1,10),vec),times=1e5) 

Unit: microseconds 
            expr min  lq median  uq  max 
1 matrix(rep(vec, each = 10), ncol = 2) 2.819 3.699 4.3970 5.3700 2132.240 
2   rep(1, 10) %*% t.default(vec) 2.456 3.185 3.6750 5.5370 2121.746 
3   t.default(replicate(10, vec)) 57.741 62.987 64.3740 65.9590 26654.678 
4   tcrossprod(rep(1, 10), vec) 2.192 2.924 3.3745 5.2465 2145.709 
+1

आप 'tcrossprod' का भी उपयोग कर सकते हैं। –

+0

@shujaa हमने 'मैट्रिक्स (1, 10, 2)' जैसी कुछ पाने की कोशिश की, जो ओपी का दावा करने का दावा करता है। – Roland

2

के बारे में क्या:

R> vec = c(1,2) 
R> matrix(rep(vec, each=10), ncol=2) 
     [,1] [,2] 
 [1,]    1    2 
 [2,]    1    2 
 [3,]    1    2 
 [4,]    1    2 
.... 
5

एक विकल्प है:

vec <- c(1,1) 
t(replicate(10, vec)) 

> t(replicate(10, vec)) 
     [,1] [,2] 
[1,] 1 1 
[2,] 1 1 
[3,] 1 1 
[4,] 1 1 
[5,] 1 1 
[6,] 1 1 
[7,] 1 1 
[8,] 1 1 
[9,] 1 1 
[10,] 1 1 
+1

छिपाने में एक लूप ... – Roland

+0

इस समस्या के लिए कुछ भी गलत नहीं है। –