2013-02-13 2 views
5

Ich habe einen Vektor sagen vec = c(1,1) und ich möchte es replizieren (Cbind) Spalte weise 10 mal so kann ich etwas, das wie matrix(1, 10, 2) aussieht. Gibt es eine Funktion, die auf vec funktioniert, die diese Replikation ausführen kann? d.h. rep (vec, 10)?Replizieren Vektor in R

Danke!

Antwort

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 

Oder wie @Joshua betont:

tcrossprod(rep(1,10),vec) 

Einige Benchmarks:

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

Sie können auch 'tcrossprod' verwenden. –

+0

@shujaa Wir haben versucht, etwas wie "Matrix (1, 10, 2)" zu bekommen, was OP behauptet zu wollen. – Roland

2

Was:

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

Eine Option ist:

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

Eine Schleife in Verkleidung ... – Roland

+0

Nichts falsch damit für ein Problem so klein. –