[R] Array indexing

John Logsdon (j.logsdon@lancaster.ac.uk)
Fri, 26 Mar 1999 18:55:21 +0000 (GMT)

Date: Fri, 26 Mar 1999 18:55:21 +0000 (GMT)
From: John Logsdon <j.logsdon@lancaster.ac.uk>
To: r-help@stat.ethz.ch
Subject: [R] Array indexing

I want to pick out a single member for each row of a matrix according to
an indexing vector and I would have thought this was a simple operation.

Is it that I am too stuck in Fortran for my own good (so wots rong with
fortran?), but is there a better way of doing what to me is intuitive but
gives completely the wrong answer. The following result occurs:

a<-kronecker(1:4,t(11:15)) # Gives 4x5 matrix with unique elements

# 11 12 13 14 15
# 22 24 26 28 30
# 33 36 39 42 45
# 44 48 52 56 60

b<-c(1,2,4,5) # The columns to extract for each of 4 rows
z<-a[,b] # Gives a 4x4 matrix

# 11 12 14 15
# 22 24 28 30
# 33 36 42 45
# 44 48 56 60

ie a[1:4,b]

The only way I can see of getting the vector result I want is:

z<-rep(0,4);for (i in 1:4){z[i]<-a[i,b[i]]}

# 11 24 42 60

whereas a[1,b] returns

# 11 12 14 15

Mind you, the same happens in Octave! Ugh. Is there a more elegant way
without constructing the appropriate elementary matrix or am I mad? These
are not exclusive possibilites of course!

John

BTW the command element(x,i) which is in the HTML help for 0.63.3 is
missing.

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


This archive was generated by hypermail 1.02.