R中矩阵元素存取的另一种方法

R中矩阵元素存取的另一种方法,r,matrix,R,Matrix,因为mat[1,2],mat[1,1],mat[2,1]是4,1,2。您可以使用cbind以这种方式访问它: c(4, 1, 2) 您可以使用以下各项将矩阵“坐标”转换为元素编号和子集: mat[cbind(1:2, 1:2)] # [1] 1 5 mat[cbind(c(1, 1, 2), c(2, 1, 1))] # [1] 4 1 2 xy2elem-mat[xy2elem(mat,c(1,1,2),c(2,1,1))] [1] 4 1 2 我自己想出了另一个看起来很难看的答案 map

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

您可以使用
cbind
以这种方式访问它:

c(4, 1, 2)

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

mat[cbind(1:2, 1:2)]
# [1] 1 5
mat[cbind(c(1, 1, 2), c(2, 1, 1))]
# [1] 4 1 2
xy2elem-mat[xy2elem(mat,c(1,1,2),c(2,1,1))]
[1] 4 1 2

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

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

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

第一个大约快100倍


使用函数xy2elem与使用cbind!一样快!令人印象深刻!

很高兴能提供帮助。通常,在StackOverflow上,虽然您可以回答自己的问题,但最好直接将其表达为回答(而不是感谢您,我非常感谢)。您可能希望缩短它,或者它可能会被标记为“非答案”
mat[cbind(1:2, 1:2)]
# [1] 1 5
mat[cbind(c(1, 1, 2), c(2, 1, 1))]
# [1] 4 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