R 一次从矩阵中选择特定元素

R 一次从矩阵中选择特定元素,r,matrix,R,Matrix,有没有一种方法可以从矩阵中同时选择一组预先指定的元素?具体来说,假设我有以下矩阵: 58 59 60 62 63 64 58 0.000000 3.772139 6.367721 8.978718 12.197210 13.401126 59 3.772139 0.000000 3.755554 5.935946 9.592700 11.664533 60 6.367721 3.755554 0.

有没有一种方法可以从矩阵中同时选择一组预先指定的元素?具体来说,假设我有以下矩阵:

      58        59        60       62        63        64
58  0.000000  3.772139  6.367721 8.978718 12.197210 13.401126
59  3.772139  0.000000  3.755554 5.935946  9.592700 11.664533
60  6.367721  3.755554  0.000000 5.999409  9.324764 11.991269
62  8.978718  5.935946  5.999409 0.000000  3.810169  6.762802
63 12.197210  9.592700  9.324764 3.810169  0.000000  3.796884
64 13.401126 11.664533 11.991269 6.762802  3.796884  0.000000
我想选择单元格[1,2],[2,3],[3,4],[4,5],[5,6]。我意识到我可以通过索引引用它们,在这种情况下,我可以运行:

mymatrix[c(2,9,16,23,30)]

但是,从后面阅读的代码来看,这不是很清楚。是否有一种方法可以一次输入实际(行、列)参考?

针对您的具体情况的解决方案是选择子矩阵并使用
diag
功能:

R> diag(x[-ncol(x),-1])
[1] 3.772139 3.755554 5.999409 3.810169 3.796884

可以使用2列矩阵进行索引。将这些行数和列数转换为有效的R对象(而不是Matlab样式的表达式)后:


与上面发布的解决方案类似,但处理行向量和列向量的情况(这是我遇到此线程时的问题)的解决方案如下:

> rows <- c(1,2,3,4,5)
> cols <- c(2,3,4,5,6)
> call <- cbind(rows,cols)
> 
> mat[call]
[1] 3.772139 3.755554 5.999409 3.810169 3.796884
>行cols调用
>mat[呼叫]
[1] 3.772139 3.755554 5.999409 3.810169 3.796884

类似于
as.vector(mymatrix[c(1,2,3,4,5),c(2,3,5,6)])
(mymatrix[row,column])我发现它比索引更“可读”,但我肯定我是少数。是的,@joran,我起初没有理解它,但在被鼓励再次查看之后,我看到了发生的事情。可能相当有效,我认为他想要一组任意的x-y对的解。推测:您使用简化矩阵的diag()方法可能比我的row==col+1方法更快。我对我自己启发的一般情况很感兴趣。然而,对于我正在研究的问题,diag方法非常有效。谢谢你们两位!
> mat[col(mat)==row(mat)+1]
[1] 3.772139 3.755554 5.999409 3.810169 3.796884
> rows <- c(1,2,3,4,5)
> cols <- c(2,3,4,5,6)
> call <- cbind(rows,cols)
> 
> mat[call]
[1] 3.772139 3.755554 5.999409 3.810169 3.796884