我正在弄清楚如何将矩阵的第 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 并且最好不使用循环来做到这一点?
您可以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)
您可以对矩阵进行转置,除以结果,然后再次转置结果。
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)