假设我有两个矩阵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)
循环结构可以做,但我想知道是否有更好的选择.
你可以使用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我做了以下操作:
使该矩阵成为data.frame:
R <- as.data.frame(R)
Run Code Online (Sandbox Code Playgroud)在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)然后重命名R的列:
colnames(R) <- outer(Acol, Bcol, paste, sep = ".")
Run Code Online (Sandbox Code Playgroud)