On Apr 3, 2013, at 7:53 AM, Keith S Weintraub wrote: > Folks, > > I have Googled but not found much regarding arrayInd aside from the "which" > help page. > > Any good examples or docs on what arrayInd does that is better or different > from which()? > > In addition take the following 20x10 matrix: > > td<-structure(c(1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 6, 6, 6, > 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 6, 6, 6, 6, 6, > 6, 6, 1, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, > 6, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, > 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6, 6, 6, 2, > 6, 6, 1, 6, 6, 6, 6, 6, 6, 6, 6, 1, 6, 6, 5, 6, 6, 6, 6, 5, 6, > 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 2, 6, 6, 6, 6, 6, 6, 6, 2, 6, 6, > 4, 6, 6, 6, 6, 6, 6, 6, 6, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 6, > 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, > 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 6), .Dim = c(20L, 10L > )) > > I want to find the cells which (hah!) are <= c(rep(5,5), rep(4,5)). That is > my bounds are by column. > > Is there a better way to do this other than: > > bounds<-c(rep(5,5), rep(4,5)) > idxs<-which(apply(td, 2, "<=", bounds), arr.ind = TRUE) > >> idxs > row col > [1,] 1 1 > [2,] 13 1 > [3,] 13 2 > [4,] 1 3 > [5,] 8 3 > [6,] 13 3 > [7,] 1 4 > [8,] 13 4 > [9,] 1 5 > [10,] 13 5 > [11,] 1 6 > [12,] 4 6 > [13,] 13 6 > [14,] 4 7 > [15,] 13 7 > [16,] 1 8 > [17,] 4 8 > [18,] 13 8 > [19,] 3 9 > [20,] 1 10 > [21,] 13 10 > > Lastly can you explain these results: > >> td[idxs[10,]] > [1] 4 6 > >> td[idxs[10,1]] > [1] 4 > >> td[idxs[10,2]] > [1] 6 > >> td[idxs[10,3]] > Error: subscript out of bounds
This has nothing to do with the behavior of arrayInd and everything to do with the behavior of "[". > td[idxs[10,drop=FALSE] ] [1] 4 When extracting from a matrix with a result of asingle row the extracted object looses its matrix attributes and becomes a numeric vector. That behavior is prevented with drop=FALSE and desire results accrue. This would not have been a puzzle if you had chose multiple rows at a time: > td [ idxs[1:2, ] ] [1] 1 4 > td [ idxs ] [1] 1 4 1 1 3 3 1 5 3 4 2 1 1 5 3 2 2 4 1 2 3 3 -- David Winsemius Alameda, CA, USA ______________________________________________ R-help@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.