假设我们有以下矩阵:
m=matrix(1:6,ncol=2)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
使用 sweep
我们可以将矩阵 m
与某个向量 v
相乘:
v=c(3,4)
sweep(m , MARGIN=2, v , `*`)
# Output :
[,1] [,2]
[1,] 3 16
[2,] 6 20
[3,] 9 24
我正在寻找使用多个向量来执行此操作。例如:
v_matrix=matrix(data=c(3,4,7,8),ncol=2,byrow=TRUE)
v_matrix
[,1] [,2]
[1,] 3 4
[2,] 7 8
预期的输出是:
[[1]]
[,1] [,2]
[1,] 3 16
[2,] 6 20
[3,] 9 24
[[2]]
[,1] [,2]
[1,] 7 32
[2,] 14 40
[3,] 21 48
答案 0 :(得分:3)
在v_matrix
中逐行循环遍历apply
,然后在行值上使用sweep
,它是一个vector
,'m'为{{1} }
matrix
-输出
do.call("c", apply(v_matrix, 1, function(x) list(sweep(m, MARGIN = 2, x, `*`))))
答案 1 :(得分:2)
使用 Map
的另一个基本 R 选项
> Map(function(x, y) t(x * y), list(t(m)), data.frame(t(v_matrix)))
[[1]]
[,1] [,2]
[1,] 3 16
[2,] 6 20
[3,] 9 24
[[2]]
[,1] [,2]
[1,] 7 32
[2,] 14 40
[3,] 21 48