Skip to content

Referring to matrix elements by name, iteratively

7 messages · AHJ, arun, David L Carlson +1 more

AHJ
#
#Here is a vector of IDs
[1]    86    90   185   196   197   209   210   215   216   217   218 

#Here is a matrix. The rows and columns correspond to the IDs in cwaves, and
the matrix is populated with a coefficient
86 90 185 196 209     210 215      216      217      218
86    0  0   0   0   0 0.00000   0 0.000000 0.000000 0.000000
90    0  0   0   0   0 0.00000   0 0.000000 0.000000 0.000000
185   0  0   0   0   0 0.00000   0 0.062500 0.000000 0.015625
196   0  0   0   0   0 0.06250   0 0.000000 0.031250 0.000000
197   0  0   0   0   0 0.06250   0 0.000000 0.000000 0.000000
209   0  0   0   0   0 0.00000   0 0.000000 0.062500 0.000000
210   0  0   0   0   0 0.00000   0 0.000000 0.062500 0.000000
215   0  0   0   0   0 0.00000   0 0.000000 0.031250 0.000000
216   0  0   0   0   0 0.00000   0 0.000000 0.000000 0.000000
217   0  0   0   0   0 0.03125   0 0.031250 0.000000 0.000000
218   0  0   0   0   0 0.00000   0 0.000000 0.000000 0.031250
1162  0  0   0   0   0 0.00000   0 0.003906 0.007812 0.015625
1323  0  0   0   0   0 0.00000   0 0.007812 0.007812 0.000000
1338  0  0   0   0   0 0.00000   0 0.000000 0.000000 0.003906
1709  0  0   0   0   0 0.00000   0 0.000000 0.000000 0.000000
structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0625, 
0.0625, 0, 0, 0, 0, 0.03125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0625, 0, 0, 0, 0, 0, 0, 0.03125, 
0, 0.003906, 0.007812, 0, 0, 0, 0, 0, 0.03125, 0, 0.0625, 0.0625, 
0.03125, 0, 0, 0, 0.007812, 0.007812, 0, 0, 0, 0, 0.015625, 0, 
0, 0, 0, 0, 0, 0, 0.03125, 0.015625, 0, 0.003906, 0), .Dim = c(15L, 
10L), .Dimnames = list(c("86", "90", "185", "196", "197", "209", 
"210", "215", "216", "217", "218", "1162", "1323", "1338", "1709"
), c("86", "90", "185", "196", "209", "210", "215", "216", "217", 
"218")))

#I know I can refer to element [4,6] in two ways, with the index, or with
the name
[1] 0.0625
[1] 0.0625

But I want to use cwaves[4] and cwaves[10] to get the name, because this is
part of an iteration through thousands of IDs.

This didn't work, of course, because it tries to pull out mat[196,217] which
doesn't exist.
Error: subscript out of bounds
Error: subscript out of bounds

I also tried to put the name in a variable to then use as the index, and the
same thing happens, of course.
Error: subscript out of bounds
Error: subscript out of bounds

Is it possible to do this? I hope the way I language it makes sense. 

Thank you :)









--
View this message in context: http://r.789695.n4.nabble.com/Referring-to-matrix-elements-by-name-iteratively-tp4646264.html
Sent from the R help mailing list archive at Nabble.com.
#
On 15-10-2012, at 19:57, AHJ wrote:

            
Turn cwaves into a vector of characters:

cwaves <- as.character(cwaves)

Now you should be able to index like this: mat[cwaves[4], cwaves[10]]

Berend
#
Hi,
May be this helps:
cwaves<-c(86,90,185,196,197,209,210,215,216,217,218,1162,1323,1338,1709)
?cwaves1<-as.character(cwaves)
mat[cwaves1[4],cwaves1[7]]
#[1] 0.0625
?mat[cwaves1[4],cwaves1[10]]
#[1] 0.03125
A.K.




----- Original Message -----
From: AHJ <ahadjixenofontos at med.miami.edu>
To: r-help at r-project.org
Cc: 
Sent: Monday, October 15, 2012 1:57 PM
Subject: [R] Referring to matrix elements by name, iteratively

#Here is a vector of IDs
[1]? ? 86? ? 90?  185?  196?  197?  209?  210?  215?  216?  217?  218 

#Here is a matrix. The rows and columns correspond to the IDs in cwaves, and
the matrix is populated with a coefficient
? ?  86 90 185 196 209? ?  210 215? ? ? 216? ? ? 217? ? ? 218
86? ? 0? 0?  0?  0?  0 0.00000?  0 0.000000 0.000000 0.000000
90? ? 0? 0?  0?  0?  0 0.00000?  0 0.000000 0.000000 0.000000
185?  0? 0?  0?  0?  0 0.00000?  0 0.062500 0.000000 0.015625
196?  0? 0?  0?  0?  0 0.06250?  0 0.000000 0.031250 0.000000
197?  0? 0?  0?  0?  0 0.06250?  0 0.000000 0.000000 0.000000
209?  0? 0?  0?  0?  0 0.00000?  0 0.000000 0.062500 0.000000
210?  0? 0?  0?  0?  0 0.00000?  0 0.000000 0.062500 0.000000
215?  0? 0?  0?  0?  0 0.00000?  0 0.000000 0.031250 0.000000
216?  0? 0?  0?  0?  0 0.00000?  0 0.000000 0.000000 0.000000
217?  0? 0?  0?  0?  0 0.03125?  0 0.031250 0.000000 0.000000
218?  0? 0?  0?  0?  0 0.00000?  0 0.000000 0.000000 0.031250
1162? 0? 0?  0?  0?  0 0.00000?  0 0.003906 0.007812 0.015625
1323? 0? 0?  0?  0?  0 0.00000?  0 0.007812 0.007812 0.000000
1338? 0? 0?  0?  0?  0 0.00000?  0 0.000000 0.000000 0.003906
1709? 0? 0?  0?  0?  0 0.00000?  0 0.000000 0.000000 0.000000
structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0625, 
0.0625, 0, 0, 0, 0, 0.03125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0625, 0, 0, 0, 0, 0, 0, 0.03125, 
0, 0.003906, 0.007812, 0, 0, 0, 0, 0, 0.03125, 0, 0.0625, 0.0625, 
0.03125, 0, 0, 0, 0.007812, 0.007812, 0, 0, 0, 0, 0.015625, 0, 
0, 0, 0, 0, 0, 0, 0.03125, 0.015625, 0, 0.003906, 0), .Dim = c(15L, 
10L), .Dimnames = list(c("86", "90", "185", "196", "197", "209", 
"210", "215", "216", "217", "218", "1162", "1323", "1338", "1709"
), c("86", "90", "185", "196", "209", "210", "215", "216", "217", 
"218")))

#I know I can refer to element [4,6] in two ways, with the index, or with
the name
[1] 0.0625
[1] 0.0625

But I want to use cwaves[4] and cwaves[10] to get the name, because this is
part of an iteration through thousands of IDs.

This didn't work, of course, because it tries to pull out mat[196,217] which
doesn't exist.
Error: subscript out of bounds
Error: subscript out of bounds

I also tried to put the name in a variable to then use as the index, and the
same thing happens, of course.
Error: subscript out of bounds
Error: subscript out of bounds

Is it possible to do this? I hope the way I language it makes sense. 

Thank you :)









--
View this message in context: http://r.789695.n4.nabble.com/Referring-to-matrix-elements-by-name-iteratively-tp4646264.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help at 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.
#
Actually the rows and columns do not correspond to the IDs in cwaves since
rownames 1162, 1323, 1338, and 1709 do not appear in cwaves and there is no
column 197 in mat. If cwaves is defined as equal to colnames(mat), you will
get one definition, but it will not match cwaves defined as equal to
rownames(mat). 

----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352
#
On 15-10-2012, at 22:17, David L Carlson wrote:

            
I didn't see that. I just looked at what the OP did.
Then the OP could use cwaves for the column names and rwaves for the rownames.
As long as both are character vectors.

Berend
AHJ
#
You are right! But that was my bad, I was trying to simplify the part of the
data I used in the example. The real data have exactly the same IDs as both
rows and columns. Thanks for catching that. :)



--
View this message in context: http://r.789695.n4.nabble.com/Referring-to-matrix-elements-by-name-iteratively-tp4646264p4646390.html
Sent from the R help mailing list archive at Nabble.com.
AHJ
#
Thank you both for the suggestion. So this means that when the vector is one
of characters the string inside it is interpreted as itself, rather than as
an index. That makes so much sense! Thanks again :)



--
View this message in context: http://r.789695.n4.nabble.com/Referring-to-matrix-elements-by-name-iteratively-tp4646264p4646391.html
Sent from the R help mailing list archive at Nabble.com.