我想将一个函数应用于矩阵的每个元素,考虑上,下,左和右相邻单元格:
a=1; b=3; c=8; d=2
m <- matrix(1:20, nrow=4, ncol=5)
mn <- matrix(NA, nrow=4, ncol=5)
for(i in 2:3){
for(j in 2:4){
mn[i,j] <- a*m[i-1,j]+b*m[i+1,j]+c*m[i,j-1]+d*m[i,j+1]
}
}
是否有使用sapply或其他方式的替代方法?
答案 0 :(得分:0)
您可以对矩阵的多个行和列进行子集,如下所示:
.i = 2:3
.j = 2:4
mn[.i,.j] = a*m[.i-1,.j] + b*m[.i+1,.j] + c*m[.i,.j-1] + d*m[.i,.j+1]
> mn
# [,1] [,2] [,3] [,4] [,5]
# [1,] NA NA NA NA NA
# [2,] NA 62 118 174 NA
# [3,] NA 76 132 188 NA
# [4,] NA NA NA NA NA