Умножим перестановки двух векторов в R

У меня есть два вектора длины 4 и я хочу умножение перестановок вектора:

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

Я хочу:

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

в виде списка с известным порядком или data.frame с row.names=A и colnames=B

3 ответа

Решение

Использование 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, x1*y4, x2*y1,... (если вы хотите x1*y1, x2*y1, ... заменить t(z) от z)

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

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

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

vapply(B, '*', A, FUN.VALUE=numeric(length(A)))
Другие вопросы по тегам