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