这是一个非常基本的问题,但我似乎无法解决它或在任何地方找到答案:假设我有两个坐标x,y
和一个矩阵m
。
我想要一个向量z
,以便所有z[i] = m[x[i],y[i]]
i
。
我尝试了z=m[x,y]
,但这会造成内存溢出。向量和矩阵非常大,因此循环几乎是不可能的。有任何想法吗 ?
答案 0 :(得分:8)
使用cbind
。这是一个简单的例子:
mat <- matrix(1:25, ncol = 5)
mat
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 6 11 16 21
# [2,] 2 7 12 17 22
# [3,] 3 8 13 18 23
# [4,] 4 9 14 19 24
# [5,] 5 10 15 20 25
x <- 1:5
y <- c(2, 3, 1, 4, 3)
mat[cbind(x, y)]
# [1] 6 12 3 19 15
## Verify with a few values...
mat[1, 2]
# [1] 6
mat[2, 3]
# [1] 12
mat[3, 1]
# [1] 3
来自?Extract
:
第三种索引形式是通过数字矩阵,每个维度都有一列:索引矩阵的每一行然后选择数组的单个元素,结果是一个向量。索引矩阵中不允许使用负指数。允许使用
NA
和零值:忽略包含零的索引矩阵的行,而包含NA
的行在结果中生成NA
。
答案 1 :(得分:3)
另一种方法是使用这样一个事实,即您可以将矩阵索引为矢量,其中元素以列主格式编号。使用@AnandoMahto中的示例:
mat[x+nrow(mat)*(y-1)]
[1] 6 12 3 19 15