how to use a matrix as an index to another matrix?
No loops necessary. Use array indexing (see ?"[", of course -- the section on matrices and arrays) set.seed(123) A <- matrix(sample(1:10), nrow = 5) B <- matrix(c(sample(1:5), sample(1:5)), nrow =5, byrow = FALSE) ## The following could be a 1-liner, but I broke it out for clarity. ix <- cbind(as.vector(B), rep(1:2, e=5)) ix matrix(A[ix], ncol =2) Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Mon, Oct 28, 2019 at 1:48 PM Linus Chen <linus.l.chen at gmail.com> wrote:
Hi Jinsong, In such a case I think explicit loop IS the most elegant solution. for(i in 1:2) A[,i] <- A[,i][B[,i]] Linus On Fri, 11 Oct 2019 at 11:44, Jinsong Zhao <jszhao at yeah.net> wrote:
Hi there, I have two matrices, A and B. The columns of B is the index of the corresponding columns of A. I hope to rearrange of A by B. A minimal example is following:
> set.seed(123) > A <- matrix(sample(1:10), nrow = 5) > B <- matrix(c(sample(1:5), sample(1:5)), nrow =5, byrow = FALSE) > A
[,1] [,2] [1,] 3 9 [2,] 10 1 [3,] 2 7 [4,] 8 5 [5,] 6 4
> B
[,1] [,2] [1,] 2 1 [2,] 3 4 [3,] 1 5 [4,] 4 3 [5,] 5 2
> A[,1] <- A[,1][B[,1]] > A[,2] <- A[,2][B[,2]] > A
[,1] [,2] [1,] 10 9 [2,] 2 5 [3,] 3 4 [4,] 8 7 [5,] 6 1 My question is whether there is any elegant or generalized way to
replace:
> A[,1] <- A[,1][B[,1]] > A[,2] <- A[,2][B[,2]]
Thanks in advance. PS., I know how to do the above thing by loop. Best, Jinsong
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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. ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.