这是一个非常基本的问题,但我似乎无法解决它或在任何地方找到答案:假设我有两个x,y坐标向量和一个矩阵m.
我想一个向量z,使得z[i] = m[x[i],y[i]]对所有i.
我试过z=m[x,y],但这会造成内存溢出.向量和矩阵非常大,因此循环几乎是不可能的.有任何想法吗 ?
使用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
Run Code Online (Sandbox Code Playgroud)
来自?Extract:
第三种形式的索引是通过数字矩阵,每个维度有一列:索引矩阵的每一行然后选择数组的单个元素,结果是一个向量.索引矩阵中不允许使用负指数.
NA允许零值:忽略包含零的索引矩阵的行,而在结果中包含NA产生的行NA.