Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Elegant indexing up to end of vector/matrix

Is it possible in R to say - I want all indices from position i to the end of vector/matrix? Say I want a submatrix from 3rd column onwards. I currently only know this way:

A = matrix(rep(1:8, each = 5), nrow = 5) # just generate some example matrix...  A[,3:ncol(A)] # get submatrix from 3rd column onwards 

But do I really need to write ncol(A)? Isn't there any elegant way how to say "from the 3rd column onwards"? Something like A[,3:]? (or A[,3:...])?

like image 727
Tomas Avatar asked Sep 21 '11 13:09

Tomas


1 Answers

Sometimes it's easier to tell R what you don't want. In other words, exclude columns from the matrix using negative indexing:

Here are two alternative ways that both produce the same results:

A[, -(1:2)] A[, -seq_len(2)] 

Results:

     [,1] [,2] [,3] [,4] [,5] [,6] [1,]    3    4    5    6    7    8 [2,]    3    4    5    6    7    8 [3,]    3    4    5    6    7    8 [4,]    3    4    5    6    7    8 [5,]    3    4    5    6    7    8 

But to answer your question as asked: Use ncol to find the number of columns. (Similarly there is nrow to find the number of rows.)

A[, 3:ncol(A)]       [,1] [,2] [,3] [,4] [,5] [,6] [1,]    3    4    5    6    7    8 [2,]    3    4    5    6    7    8 [3,]    3    4    5    6    7    8 [4,]    3    4    5    6    7    8 [5,]    3    4    5    6    7    8 
like image 158
Andrie Avatar answered Sep 22 '22 07:09

Andrie