Matrix indexes
On Mon, 12 Jan 2004, W. Beldman wrote:
Two questions about matrix indexing:
Not about `matrix indexing', which may have confused you. Matrix indexing of a matrix is when the index is a two-column matrix of row-column number pairs.
Is is correct that V <- V[lower.tri(V, diag=TRUE)] returns the lower triangular of matrix V, that is: all elements above diagonal are set to zero? I
No, omitted.
understand that the triangle of matrix elements of V for which lower.tri is TRUE are returned while the others (above diagonal) are set to zero (or NA ???).
So this is vector indexing by a logical vector. It does no harm to try it:
V <- matrix(1:16, 4,4) V
[,1] [,2] [,3] [,4] [1,] 1 5 9 13 [2,] 2 6 10 14 [3,] 3 7 11 15 [4,] 4 8 12 16
lower.tri(V, diag=TRUE)
[,1] [,2] [,3] [,4] [1,] TRUE FALSE FALSE FALSE [2,] TRUE TRUE FALSE FALSE [3,] TRUE TRUE TRUE FALSE [4,] TRUE TRUE TRUE TRUE
V[lower.tri(V, diag=TRUE)]
[1] 1 2 3 4 6 7 8 11 12 16 so the result is the lower triangle read out as a vector in the usual first-index-varies fastest order.
If D and B are vectors of logicals, what does V contain after V <- v[D, B, drop=FALSE] ? I guess that elements are returned if both indexes D and B are TRUE, but I'm not really convinced... (And again, what about the other elements?)
Yes. Again, simple example:
B <- c(T, F, T, F) D <- c(T, T, F, F) outer(B, D)
[,1] [,2] [,3] [,4] [1,] 1 1 0 0 [2,] 0 0 0 0 [3,] 1 1 0 0 [4,] 0 0 0 0
V[B, D]
[,1] [,2] [1,] 1 5 [2,] 3 7 And finally an example of matrix indexing
U <- matrix(c(1,1,2,3), 2, 2, byrow=T) U
[,1] [,2] [1,] 1 1 [2,] 2 3
V[U]
[1] 1 10
These are probably tutorial questions, but I'm still not sure after reading "R Language Definition (draft): Evaluation of expressions" and applicable sections of "The R Reference Manual". Thanx!
Some of the books in the FAQ, notably `S Programming', will help a lot.
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595