Preoccupation with speed of execution is typically (certainly not always) misplaced. Provided you have used sensible basic vectorization, loops in whatever form work adequately. First get working code. Then, if necessary, parallelization, byte compilation, or complex vectorization strategies can be employed. And, of course, there's always C code for those who know it.
-- Bert On Sun, Apr 8, 2012 at 7:31 AM, Dimitri Liakhovitski <dimitri.liakhovit...@gmail.com> wrote: > Thank you very much, Rui. > This definitely produces the result needed. > Again, I have not checked the speed yet. > > input<-as.matrix(data.frame(a=c(5,1,3,7),b=c(2,6,4,8))) > f <- function(x){ > nr <- nrow(x) > result <- matrix(0, nrow=nr, ncol=ncol(x)) > colnames(result) <- colnames(x) > > inp.ord <- order(x)[1:nr] - 1 # Keep only one per row, must be zero > based > inx <- cbind(1:nr, inp.ord %/% nr + 1) # Index matrix > result[inx] <- 100 > result > } > f(input) > > Dimitri > > On Fri, Apr 6, 2012 at 7:02 PM, Rui Barradas <rui1...@sapo.pt> wrote: >> Hello, >> >> Oops! >> >> What happened to the function 'f'? >> Forgot to copy and pasted only the rest, now complete. >> >> >> f <- function(x){ >> nr <- nrow(x) >> result <- matrix(0, nrow=nr, ncol=ncol(x)) >> colnames(result) <- colnames(x) >> >> inp.ord <- order(x)[1:nr] - 1 # Keep only one per row, must be zero >> based >> inx <- cbind(1:nr, inp.ord %/% nr + 1) # Index matrix >> result[inx] <- 100 >> result >> } >> >> # Original example >> input <- as.matrix(data.frame(a=c(5,1,3,7), b=c(2,6,4,8))) >> (input) >> desired.result <- as.matrix(data.frame(a=c(100,0,100,0), b=c(0,100,0,100))) >> (desired.result) >> all.equal(f(input), desired.result) >> >> # Two other examples >> set.seed(123) >> (x <- matrix(sample(10, 10), ncol=2)) >> f(x) >> >> (y <- matrix(sample(40, 40), ncol=5)) >> f(y) >> >> Note that there's no loops (or apply, which is also a loop.) >> >> Rui Barradas >> >> >> -- >> View this message in context: >> http://r.789695.n4.nabble.com/filling-the-matrix-row-by-row-in-the-order-from-lower-to-larger-elements-tp4538171p4538486.html >> Sent from the R help mailing list archive at Nabble.com. >> >> ______________________________________________ >> 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. > > > > -- > Dimitri Liakhovitski > marketfusionanalytics.com > > ______________________________________________ > 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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm ______________________________________________ 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.