[R] slow access to matrix dimnames

Gabor Grothendieck ggrothendieck at gmail.com
Fri Jan 4 20:51:26 CET 2008


Maybe you can time this and see if this is any better:

"%$%" = function(data,field) data[, pmatch(field,dimnames(data)[[2L]])]

# test
mat <- matrix(1:24, 6, dimnames = list(NULL, letters[1:4]))
mat%$%"c"


On Jan 4, 2008 2:29 PM, Dan Dube <ddube at advisen.com> wrote:
> hello,
>
> i have been trying to convert my data frames to matrices in the hopes of
> speeding up some of my more complicated scripts.
>
> to assist with this, i am trying to create a "matrix column operator"
> like $:
> "%$%" = function(data,field) {
>        as.numeric(data[,grep(field,unlist(dimnames(data)[2]))])
> }
>
> the idea here is that you can use a matrix like a dataframe:
> matrix%$%"fieldname"
>
> i am getting this matrix by converting a dataframe:
> df = read.csv("data.csv")
> matrix = data.matrix(df,rownames.force=FALSE)
>
> this sets rownames to "NULL", but there is still an entry at
> dimnames(matrix)[1], and so i have to access the actual column names as
> dimnames(matrix)[2].  if there were only one dimension of dimnames, this
> operator works quickly, but when i have to access [2], it is super slow.
>
> am i way off base trying to do this?  i'd like to have the ability to
> talk about the columns by name, since they may not always be in the same
> place.  maybe i am making it more complicated than necessary?
>
> thanks!
>
> dan
>
> ______________________________________________
> 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