[BioC] [R] function to find coodinates in an array
Marc Schwartz
marc_schwartz at comcast.net
Fri Aug 17 04:53:44 CEST 2007
If I am correctly understanding the problem, I think that this is what
you want:
set.seed(1)
# Create a 3x3x3 array
ARR <- array(sample(100, 27), c(3, 3, 3))
> ARR
, , 1
[,1] [,2] [,3]
[1,] 27 89 97
[2,] 37 20 62
[3,] 57 86 58
, , 2
[,1] [,2] [,3]
[1,] 6 61 43
[2,] 19 34 88
[3,] 16 67 83
, , 3
[,1] [,2] [,3]
[1,] 32 17 21
[2,] 63 51 29
[3,] 75 10 1
# Get the ordered indices of the elements in the array
> order(ARR)
[1] 27 10 24 12 22 11 5 25 1 26 19 14 2 16 23 3 9 13 8 20 15 21
[23] 18 6 17 4 7
# Get the actual array elements in order
> ARR[order(ARR)]
[1] 1 6 10 16 17 19 20 21 27 29 32 34 37 43 51 57 58 61 62 63 67 75
[23] 83 86 88 89 97
# Now loop over the above and using which(), get the 3D indices
> t(sapply(ARR[order(ARR)], function(x) which(ARR == x, arr.ind = TRUE)))
[,1] [,2] [,3]
[1,] 3 3 3
[2,] 1 1 2
[3,] 3 2 3
[4,] 3 1 2
[5,] 1 2 3
[6,] 2 1 2
[7,] 2 2 1
[8,] 1 3 3
[9,] 1 1 1
[10,] 2 3 3
[11,] 1 1 3
[12,] 2 2 2
[13,] 2 1 1
[14,] 1 3 2
[15,] 2 2 3
[16,] 3 1 1
[17,] 3 3 1
[18,] 1 2 2
[19,] 2 3 1
[20,] 2 1 3
[21,] 3 2 2
[22,] 3 1 3
[23,] 3 3 2
[24,] 3 2 1
[25,] 2 3 2
[26,] 1 2 1
[27,] 1 3 1
See ?which and take note of the arr.ind argument.
HTH,
Marc Schwartz
On Thu, 2007-08-16 at 19:21 -0700, Moshe Olshansky wrote:
> A not very good solution is as below:
>
> If your array's dimensions were KxMxN and the "linear"
> index is i then
> n <- ceiling(i/(K*M))
> i1 <- i - (n-1)*(K*M)
> m <- ceiling(i1/K)
> k <- i1 - (m-1)*K
>
> and your index is (k,m,n)
>
> I am almost sure that there is a function in R which
> does this (it exists in Matlab).
>
> Regards,
>
> Moshe.
>
> --- Ana Conesa <aconesa at ochoa.fib.es> wrote:
>
> > Dear list,
> >
> > I am looking for a function/way to get the array
> > coordinates of given
> > elements in an array. What I mean is the following:
> > - Let X be a 3D array
> > - I find the ordering of the elements of X by ord <-
> > order(X) (this
> > returns me a vector)
> > - I now want to find the x,y,z coordinates of each
> > element of ord
> >
> > Can anyone help me?
> >
> > Thanks!
> >
> > Ana
> >
More information about the Bioconductor
mailing list