[R] Referring to matrix elements by name, iteratively

David L Carlson dcarlson at tamu.edu
Mon Oct 15 22:17:13 CEST 2012


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.




More information about the R-help mailing list