我确信这可能非常简单,但无论出于何种原因,我无法在任何地方找到任何相关文档。
我有一个多维数组,我们会调用m1
和一个值向量,我们称之为v1
。
我知道v1
中包含的每个元素都存在于m1
的某个地方,我想知道在哪里。问题是我还想知道数组索引方面的位置。
所以,说(简化示例):
m1< array(c(3,9,110,2,36,0.01,-9,11,95,67,31,-2,2.5,10,1,49),dim=c(4,2,2))
v1<-c(110,36)
> m1
, , 1
[,1] [,2]
[1,] 3 36
[2,] 9 0.5
[3,] 110 -9
[4,] 2 11
, , 2
[,1] [,2]
[1,] 95 2.5
[2,] 67 10
[3,] 31 1
[4,] -2 49
> v1
[1] 110 36
我想函数f(m1,v1)的输出给我一些类似的东西:
3 1 1
1 2 1
如果我使用which
执行此操作,我会执行类似which(m1==v1,arr.ind=T)
的操作,但是它不适用于匹配的值向量(看起来似乎)。
否则我可以使用match
- match(v1,m1)
- 但是这将以向量形式返回位置(如果这不是正确的术语,则道歉)不是数组索引形式 - 所以上面的3和5例。
我可以做些什么来获得我正在寻找的输出?或者,是否有一种简单的方法将矢量表单位置转换为相同但以数组索引形式?在上述情况下这很简单,但是当我处理多个维度时,它会变得很头疼。
答案 0 :(得分:2)
使用示例中的m1
和v1
:
vapply(X = v1,
FUN = function(x) which(x == m1, arr.ind = TRUE),
FUN.VALUE = integer(length(dim(m1)))
)
返回
[,1] [,2]
[1,] 3 1
[2,] 1 2
[3,] 1 1
每列都有其中一个值的索引。