[R] Referring to matrix elements by name, iteratively
Berend Hasselman
bhh at xs4all.nl
Mon Oct 15 22:26:40 CEST 2012
On 15-10-2012, at 22:17, David L Carlson wrote:
> 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.
I didn't see that. I just looked at what the OP did.
> 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).
>
Then the OP could use cwaves for the column names and rwaves for the rownames.
As long as both are character vectors.
Berend
> ----------------------------------------------
> 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.
>
More information about the R-help
mailing list