2015-10-22 1 views
0

J'ai deux vecteurs de la longueur 4 et souhaite une multiplication des permutations du vecteur:permutations Multiplier de deux vecteurs de R

A=(a1,a2,a3,a4) 
B=(b1,b2,b3,b4) 

Je veux:

a1*b1;a1*b2;a1*b3...a4*b4 

comme liste avec ordre connu ou data.frame avec row.names = a = B et colnames

Répondre

2

utilisation outer(A,B,'*') qui renverra une matrice

x<-c(1:4) 
y<-c(10:14) 
outer(x,y,'*') 

retours

 [,1] [,2] [,3] [,4] [,5] 
[1,] 10 11 12 13 14 
[2,] 20 22 24 26 28 
[3,] 30 33 36 39 42 
[4,] 40 44 48 52 56 

et si vous voulez le résultat dans une liste que vous pouvez faire

z<-outer(x,y,'*') 
z.list<-as.list(t(z)) 

head(z.list) retours

[[1]] 
[1] 10 

[[2]] 
[1] 11 

[[3]] 
[1] 12 

[[4]] 
[1] 13 

[[5]] 
[1] 14 

[[6]] 
[1] 20 

qui est x1 * y1, x1 * y2, x1 * Y3, x1 * Y4, x2 * y1, ... (si vous voulez x1 * y1, x2 * y1, ... remplacer t(z) par z)

+0

pour mon but "fondre" du paquet reshape2 a fait un bon travail après la commande externe (A, B) – MaxS

+0

'expand.grid' est plus efficace que' melt (outer())) ' – Thierry

3

Jetez un oeil à expand.grid ou outer

combination <- expand.grid(A, B) 
combination$Result <- combination$A * combination$B 
outer(A, B, FUN = "*") 
+1

Dans 'outer' l'argument par défaut de' 'FUN' est "*"', 'si juste extérieur (A, B)' est suffisant. – nicola

2

Nous pouvons essayer vapply:

vapply(B, '*', A, FUN.VALUE=numeric(length(A)))