在R中乘以两组向量

Ant*_*tti 3 r matrix

假设我有两个矩阵A和B:

 A:      A1    A2        B:      B1   B2
   ROW1  V1    V2          ROW1  V3   V4
   ROW2  V5    V6          ROW2  V7   V8
Run Code Online (Sandbox Code Playgroud)

我想得到一个结果矩阵R,它包括两个矩阵列中每对的乘积,如下所示:

 R:      A1_B1  A1_B2  A2_B1  A2_B2
   ROW1  V1*V3  V1*V4  V2*V3  V2*V4
   ROW2  V5*V7  V5*V8  V6*V7  V6*V8
Run Code Online (Sandbox Code Playgroud)

循环结构可以做,但我想知道是否有更好的选择.

Sve*_*ein 5

你可以使用apply:

A <- matrix(1:4,2,2)
#     [,1] [,2]
# [1,]    1    3
# [2,]    2    4
B <- A * 10
#      [,1] [,2]
# [1,]   10   30
# [2,]   20   40

matrix(apply(A, 2, "*", B), nrow = nrow(A))
#      [,1] [,2] [,3] [,4]
# [1,]   10   30   30   90
# [2,]   40   80   80  160
Run Code Online (Sandbox Code Playgroud)

Antti的补充:

这非常有效.最后,我需要这个来操纵一个data.frame.为了应用有意义的列名,data.frame我做了以下操作:

  1. 使该矩阵成为data.frame:

    R <- as.data.frame(R)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在A和B中创建列名称的向量

    Acol <- grep("A", names(data.frame(A)), value = T) 
    Bcol <- grep("B", names(data.frame(B)), value = T) 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后重命名R的列:

    colnames(R) <- outer(Acol, Bcol, paste, sep = ".")
    
    Run Code Online (Sandbox Code Playgroud)