On Apr 3, 2013, at 10:59 AM, David Winsemius wrote: > > 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
Arrgh. The explanation was correct, but there is a missing comma. Should be: td[idxs[10, ,drop=FALSE] ] Only shows up if you chose a different row > td [ idxs[12, drop=FALSE] ] [1] 6 WRONG > td [ idxs[12, , drop=FALSE] ] [1] 1 Correct -- David. > 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.