William -
An interesting feature of matrix indexing in R is that
if you provide a two column matrix as a subscript, you are
refering to the elements whose indices are in the rows
of the matrix. This is extremely handy for converting
tables to matrices:
m = cbind(c(1,1,1,2,2,2,3,3,3),c(1,2,3,1,2,3,1,2,3),c(10,19,8,14,12,6,17,9,2))
m
[,1] [,2] [,3]
[1,] 1 1 10
[2,] 1 2 19
[3,] 1 3 8
[4,] 2 1 14
[5,] 2 2 12
[6,] 2 3 6
[7,] 3 1 17
[8,] 3 2 9
[9,] 3 3 2
newmat = matrix(0,3,3)
newmat[m[,1:2]] = m[,3]
newmat
[,1] [,2] [,3]
[1,] 10 19 8
[2,] 14 12 6
[3,] 17 9 2
It's also handy for extracting a vector with just the elements you want:
newmat[cbind(c(1,2,3),c(2,3,1))]
[1] 19 6 17 # 1,2 2,3 3,1 elements
So it's a bit surprising when you index a matrix with a 2 column
matrix, but it is a documented fact.
- Phil Spector
Statistical Computing Facility
Department of Statistics
UC Berkeley
spec...@stat.berkeley.edu
On Mon, 5 Apr 2010, William Revelle wrote:
Dear R list,
I have discovered a seemingly peculiar feature when using a matrix to index
itself (yes, this is strange code, which I have now modified to be more
reasonable).
#this makes sense
s <- matrix(1:3,nrow=1)
s[s] #all three elements are shown
#but when I try
s <- matrix(1:2,nrow=1)
s[1] #fine, the first element is shown
s[2] #fine, the second element is shown
s[s] #just the second element is shown -- this is peculiar
#But doing it by columns works for both cases
s <- matrix(1:3,ncol=1)
s[s] #all three elements are shown
#and when I try the same problem down a column
s <- matrix(1:2,ncol=1)
s[1] #fine
s[2] #fine
s[s] #this shows both elements as would be expected
#clearly since I have just one dimension, it would have been better to
s <- 1:2
s[s] #which works as one would expect.
Or, using the array function we get the same problem.
s <- array(1:2,dim=c(1,2))
s[s]
[1] 2
s <- array(1:2,dim=c(2,1))
s[s]
[1] 1 2
sessionInfo()
R version 2.11.0 Under development (unstable) (2010-03-24 r51389)
i386-apple-darwin9.8.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] psych_1.0-87
I think this is unexpected behavior.
Best wishes,
Bill
--
William Revelle http://personality-project.org/revelle.html
Professor http://personality-project.org
Department of Psychology http://www.wcas.northwestern.edu/psych/
Northwestern University http://www.northwestern.edu/
Use R for psychology http://personality-project.org/r
It is 6 minutes to midnight http://www.thebulletin.org
______________________________________________
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.
______________________________________________
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.