Referring to matrix elements by name, iteratively
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
-----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- project.org] On Behalf Of Berend Hasselman Sent: Monday, October 15, 2012 2:51 PM To: AHJ Cc: r-help at r-project.org Subject: Re: [R] Referring to matrix elements by name, iteratively On 15-10-2012, at 19:57, AHJ wrote:
#Here is a vector of IDs
cwaves
[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
mat
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
dput(mat)
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
mat[4,6]
[1] 0.0625
mat["196","210"]
[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.
mat[cwaves[4], cwaves[10]]
Error: subscript out of bounds
mat["cwaves[4]", "cwaves[10]"]
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.
a <- cwaves[4] b <- cwaves[10] mat[a,b]
Error: subscript out of bounds
mat["a","b"]
Error: subscript out of bounds Is it possible to do this? I hope the way I language it makes sense.
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
______________________________________________ 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.