将矩阵的列除以向量的元素

Adr*_*ian 6 r

我正在弄清楚如何将矩阵的第 n 列除以行向量的第 n 个元素。

例如,设矩阵 a 和向量 b 为:

a <- matrix(1:9, byrow = TRUE,  nrow = 3)
b <- c(3:5)
Run Code Online (Sandbox Code Playgroud)

给予

[[1]]
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

[[2]]
[1] 3 4 5
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我正在寻找将矩阵的第一列除以 3、第二列除以 4、第三列除以 5 的代码。

我尝试使用 apply 函数但没有成功

c <- apply(a, 2, function(x) x / b)
Run Code Online (Sandbox Code Playgroud)

是否有任何代码可以使用 apply 并且最好不使用循环来做到这一点?

Lyz*_*deR 7

您可以sweep为此使用:

#same as apply the second argument needs to be 1 for row or 2 for column
sweep(a, 2, b, FUN = '/')
#          [,1] [,2] [,3]
#[1,] 0.3333333 0.50  0.6
#[2,] 1.3333333 1.25  1.2
#[3,] 2.3333333 2.00  1.8
Run Code Online (Sandbox Code Playgroud)


Est*_* PS 6

您可以对矩阵进行转置,除以结果,然后再次转置结果。

t(t(a)/b)
#          [,1] [,2] [,3]
#[1,] 0.3333333 0.50  0.6
#[2,] 1.3333333 1.25  1.2
#[3,] 2.3333333 2.00  1.8
Run Code Online (Sandbox Code Playgroud)