另一种访问R中矩阵元素的方法

时间:2013-05-06 14:34:40

标签: r matrix

mat <- matrix(c(1,2,3,4,5,6,7,8,9), ncol=3)

mat[1:2, 1:2] 

返回新的matrix(c(1,2,4,5), ncol=2)

无论如何都可以访问矩阵元素,如plot的x,y位置?

部分function(mat, 1:2, 1:2)会返回c(1,5),因为mat[1,1]mat[2,2]为1.5。

某些function(mat, c(1,1,2), c(2,1,1)返回

c(4, 1, 2)

因为mat[1,2], mat[1,1], mat[2,1]是4,1,2。

3 个答案:

答案 0 :(得分:6)

您可以使用cbind

以这种方式访问​​它
mat[cbind(1:2, 1:2)]
# [1] 1 5
mat[cbind(c(1, 1, 2), c(2, 1, 1))]
# [1] 4 1 2

答案 1 :(得分:2)

您可以使用以下内容将矩阵“坐标”转换为元素编号和子集:

xy2elem <- function(m,x,y) x + nrow(m)*(y-1)

mat[xy2elem(mat,1:2,1:2)]
[1] 1 5
> mat[xy2elem(mat,c(1,1,2),c(2,1,1))]
[1] 4 1 2

答案 2 :(得分:0)

我自己想出了另一个看起来很难看的答案。

mapply(function(x,y){'['(mat,x,y)},c(1,2),c(2,3))

我比较了“mat [cbind”和“mapply(function(x,y){'['(mat,x,y)},”,

第一个快了大约100倍! ;-p

使用xy2elem函数与使用cbind一样快!可观!