On 21/04/2008, at 9:54 PM, William Simpson wrote: > Hi Everyone, > > I am running into a problem with matrices. I use R version 2.4.1 and > an older version. > > The problem is this: > m<-matrix(ncol=3,nrow=4) > m[,1:3]<-runif(n=4) > > That does what I expect; it fills up the rows of the matrix with the > data vector >> m > [,1] [,2] [,3] > [1,] 0.2083071 0.2083071 0.2083071 > [2,] 0.5865763 0.5865763 0.5865763 > [3,] 0.7901782 0.7901782 0.7901782 > [4,] 0.8298317 0.8298317 0.8298317 > > But this doesn't work: > m[1:4,]<-runif(n=3) >> m > [,1] [,2] [,3] > [1,] 0.96864939 0.11656740 0.06182311 > [2,] 0.11656740 0.06182311 0.96864939 > [3,] 0.06182311 0.96864939 0.11656740 > [4,] 0.96864939 0.11656740 0.06182311 > > I want it to fill up the columns of the matrix with the data vector. > > Maybe there is a better way to do what I want. I need to do both of > the above. The matrices are large, so I need a fast method.
R fills arrays in ``reverse odometer order'' --- the first index (row index in matrices) ticks over fastest; the second index second fastest. Unless you tell it to do otherwise. In other words matrices get filled up column by column. Unless other instructions are given. Thus m[] <- runif(3) (note that the ``1:4'' is redundant) puts the generated 3-vector into the first 3 entries of column 1, then starts over again, putting the first entry of that vector into the last entry of column 1, then the next two entries of the vector into the first two entries of column 2, and so on. What you want to do is m <- matrix(runif(3),nrow=4,ncol=3,byrow=TRUE) i.e. it is unnecessary and counter-productive to create m beforehand and then try to fill it up. cheers, Rolf Turner ###################################################################### Attention:\ This e-mail message is privileged and confid...{{dropped:9}} ______________________________________________ R-help@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.