R中无for循环的矩阵与向量之间的计算
假设我有一个矩阵和一个向量:R中无for循环的矩阵与向量之间的计算,r,R,假设我有一个矩阵和一个向量: set.seed(999) mat = matrix(round(rnorm(24,4,9)),3,8) mat [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 1 6 -13 -6 12 -8 12 10 [2,] -8 2 -7 16 6 5 -15 1 [3,] 11 -1 -5 5 13 5 -7
set.seed(999)
mat = matrix(round(rnorm(24,4,9)),3,8)
mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 6 -13 -6 12 -8 12 10
[2,] -8 2 -7 16 6 5 -15 1
[3,] 11 -1 -5 5 13 5 -7 7
vec = c(1,5, 4,4, 2,1, 4,8)
现在,我希望计算每一行mat
,该行与vec
之间的距离,其中两个元素作为一个“组”。例如,我想要
d11 = |mat[1,1:2] - vec[1:2]|
d12 = |mat[1,3:4] - vec[3:4]|
d13 = |mat[1,5:6] - vec[5:6]|
d14 = |mat[1,7:8] - vec[7:8]|
对mat
的其余行(即第2行和第3行)执行相同的操作,以使d21、…、d24、d31、…、d34
我希望这项任务可以在不使用for循环的情况下完成。是否有任何功能可直接用于此目标?谢谢 我认为这是可行的:
s1 <- sweep(mat,2,vec,"-") ## subtract vec
s2 <- s1^2 ## square
s3 <- cbind(s2[col(s2) %% 2 ==1],s2[col(s2) %% 2 ==0]) ## stack
s4 <- rowSums(s3)
s5 <- matrix(s4,nrow=3) ## restack
## [,1] [,2] [,3] [,4]
## [1,] 1 389 181 68
## [2,] 90 265 32 410
## [3,] 136 82 137 122
s1