查找多维结构中的位置列表(数组)

Nic*_*bbe 6 position r multidimensional-array

假设我有一个简单的多维结构,就像这样:

somestr<-array(sample.int(2, 120, replace=TRUE), dim=c(4,5,6))
Run Code Online (Sandbox Code Playgroud)

我正在寻找结构中的所有位置(在这种情况下,数组),其中值等于,例如,对于我的示例,2.请注意,结构可能同样包含字符或逻辑.现在,它只是找到所有与给定值相等的值,但将这个想法扩展到可以应用于结构中每个项目的任何逻辑值函数(这将允许例如is.na使用)将是很好的..

我想得到的是一个(integer)矩阵,其列数与somestr维数一样多(在本例中为3),以及多行(取决于上面的sample.int调用),因为有等于给定值的值( 2).此新矩阵somestr中的值是值等于2 的"坐标" .

我为将我的例子与解释混在一起道歉,但我希望这样更清楚.为了记录:我能够自己制作这个(甚至可以回答我自己的问题),但我希望有一个标准化的解决方案(阅读:在一些软件包中的现成功能),或者沿途学习新的技巧.

那么,总之,你能写一个函数吗?

posOf<-function(somestr, valueToCompareTo)
Run Code Online (Sandbox Code Playgroud)

返回somestr等于的位置矩阵valueToCompareTo,如果valueToCompareTo是函数,则somestr返回应用此函数返回的位置TRUE.

rcs*_*rcs 10

我认为该which功能可以做到这一点:

which(somestr==2, arr.ind=TRUE)
Run Code Online (Sandbox Code Playgroud)

(如果我理解正确的话)

R> set.seed(123)
R> somestr <- array(sample.int(2, 120, replace=TRUE), dim=c(4,5,6))
R> somestr
, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    2    2    1
[2,]    2    1    1    2    1
[3,]    1    2    2    1    1
[4,]    2    2    1    2    2

...

, , 6

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    1    1    1    2
[2,]    1    2    1    2    2
[3,]    1    2    2    2    2
[4,]    2    2    1    1    1

R> which(somestr==2, arr.ind=TRUE)
      dim1 dim2 dim3
 [1,]    2    1    1
 [2,]    4    1    1
 [3,]    1    2    1
 [4,]    3    2    1
 [5,]    4    2    1
...
[57,]    2    5    6
[58,]    3    5    6
Run Code Online (Sandbox Code Playgroud)