[R] Referring to matrix elements by name, iteratively
Berend Hasselman
bhh at xs4all.nl
Mon Oct 15 21:51:21 CEST 2012
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
More information about the R-help
mailing list