2015-10-22 4 views

ответ

2

Использование outer(A,B,'*'), который будет возвращать матрицу

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

возвращается

 [,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 

и если вы хотите результат в списке, вы затем можете сделать

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

head(z.list) возвращается

[[1]] 
[1] 10 

[[2]] 
[1] 11 

[[3]] 
[1] 12 

[[4]] 
[1] 13 

[[5]] 
[1] 14 

[[6]] 
[1] 20 

что x1 * y1, x1 * y2, x1 * y3, y4 x1 *, x2 * y1, ... (если вы хотите x1 * y1, x2 * y1, ... заменить t(z) на z)

+0

для моей цели «расплав» из пакета reshape2 сделал хорошую работу после внешней (A, B) команды – MaxS

+0

'expand.grid' более эффективен, чем' melt (outer())) ' – Thierry

3

Посмотрите expand.grid или outer

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

в 'outer' аргумент по умолчанию' 'FUN' является "*"', так что просто 'внешняя (A, B)' достаточно. – nicola

2

Мы можем попробовать vapply:

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