[R] Return dimension index from array with n-dimensions
jim holtman
jholtman at gmail.com
Wed Sep 10 16:32:06 CEST 2008
Is this what you were looking for:
> a <- array(100:1,dim=c(5,4,5))
> which(a == 7)
[1] 94
> which(a == 7, arr.ind=TRUE)
dim1 dim2 dim3
[1,] 4 3 5
>
On Wed, Sep 10, 2008 at 10:22 AM, Hintzen, Niels <Niels.Hintzen at wur.nl> wrote:
> Hi,
>
> I have been dealing with some problems finding a fast way of getting to
> know in what dimension a specific value is located out of an array (like
> the 'which' function for a vector returns its position).
> Unable to find anything about this on the internet I wrote a function
> myself.
>
> Could you please comment if such a function already exists, and if not,
> please feel free to comment the function I wrote.
> Hopefully resulting in the integration of such a function in a
> R-packages.
>
> Kind regards,
>
> Niels Hintzen
>
> #Example:
>
> a <- array(100:1,dim=c(5,4,5))
> which(a == 7)
> nindex(a,7)
>
> nindex<-function(array.,index.){
> dims <- dim(array.)
> ldim <- length(dim(array.))
>
> dimmy <- matrix(NA,ncol=length(index.),nrow=ldim)
> remain <- matrix(NA,ncol=length(index.),nrow=ldim)
> remain[1,] <- index.
> for(i in 1:(length(dims)-1)){
> dimmy[i,] <-
> ceiling(remain[i,]/(prod(dims[1:(ldim-i)])))
> dimmy[i,dimmy[i,]==0] <- rev(dims)[i]
> remain[i+1,] <- index.%%prod(dims[1:(ldim-i)])
> }
> remain[length(remain[,1]),remain[length(remain[,1]),]==0]
> <- dims[1]
> dimmy[1+(length(dims)-1),] <- remain[length(remain[,1]),]
> dimmy <- dimmy[dim(dimmy)[1]:1,]
>
> return(matrix(t(dimmy),nrow=length(index.),dimnames=list(seq(1,length(in
> dex.),1),dimensions=paste("dim",as.character(c(1:length(dims))),sep=""))
> ))}
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Jim Holtman
Cincinnati, OH
+1 513 646 9390
What is the problem that you are trying to solve?
More information about the R-help
mailing list