【发布时间】:2013-03-08 05:00:49
【问题描述】:
我想在矩阵上应用矩阵中每个值的值、行索引和列索引的函数,并获得转换后的矩阵。 例如
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
以上示例仅用于说明目的,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
我在lapply 家族中找不到任何一种方法。 for 循环可以完成这项工作,但它既不高效也不优雅。
有什么建议么?
谢谢
【问题讨论】:
-
如果你的函数是矢量化的,那么
f(mat, row(mat), col(mat))应该可以工作