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。
答案 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一样快!可观!