R在矩阵上应用列和行索引的函数

use*_*028 1 r matrix apply lapply

我想在矩阵上应用矩阵中每个值的值,行索引和列索引的函数,并获得转换后的矩阵.例如

mat<-matrix(c(1,2,3,4),2,2)    
mat
     [,1] [,2]
[1,]    1    3
[2,]    2    4

f<-function(x,i,j){x+i+j}
mat2 <- my.apply(f,mat)
mat2
     [,1] [,2]
[1,]    3    6
[2,]    5    8
Run Code Online (Sandbox Code Playgroud)

上面的示例仅用于说明目的,f可能要复杂得多.

apply 因为处理额外参数的方式不起作用.

apply(mat,1:2,f,seq_along(mat[,1]),seq_along(mat[1,]))
, , 1

     [,1] [,2]
[1,]    3    4
[2,]    5    6

, , 2

     [,1] [,2]
[1,]    5    6
[2,]    7    8
Run Code Online (Sandbox Code Playgroud)

我无法找到与lapply家人同行的方式.一个for循环可以完成这项工作,但它不会有效也不优雅.有什么建议?谢谢

Chi*_*til 10

尝试 mapply

mat <- matrix(c(1, 2, 3, 4), 2, 2)
mat
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4


matrix(mapply(function(x, i, j) x + i + j, mat, row(mat), col(mat)), nrow = nrow(mat))
##      [,1] [,2]
## [1,]    3    6
## [2,]    5    8
Run Code Online (Sandbox Code Playgroud)