Instead of colSums(t(aMatrix)), why not the more direct rowSums(aMatrix)? If time is an issue (which it won't be unless the number of columns of M is big), compare: > M <- matrix(2e5:1, nrow=2) > v <- 1:ncol(M) > system.time(z1 <- sapply(seq_along(v), function(i) sum(M[,i] < v[i]))) user system elapsed 0.532 0.000 0.532 > system.time(z2 <- colSums(t(apply(M, 1, "<", v)))) user system elapsed 0.004 0.000 0.006 > system.time(z3 <- rowSums(apply(M, 1, "<", v))) user system elapsed 0.008 0.000 0.005 > system.time(z4 <- colSums(M < matrix(v, nrow=nrow(M), ncol=ncol(M), byrow=TRUE))) user system elapsed 0.000 0.000 0.002 > isTRUE(all.equal(z1, z2)) && isTRUE(all.equal(z1,z3)) && isTRUE(all.equal(z1,z4)) [1] TRUE
Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf Of Milan Bouchet- > Valat > Sent: Friday, February 03, 2012 10:17 AM > To: Ernest Adrogué > Cc: r-help@r-project.org > Subject: Re: [R] sapply help > > Le vendredi 03 février 2012 à 18:27 +0100, Ernest Adrogué a écrit : > > 3-02-2012, 08:37 (-0800); Filoche escriu: > > > Hi every one. > > > > > > I'm learning how to use sapply (and other function of this family). > > > > > > Here's what I'm trying to do. > > > > > > I have a vector of lets say 5 elements. I also have a matrix of nX5. I > > > would > > > like to know how many element by column are inferior to each element of my > > > vector. > > > > > > On this example: > > > v = c(1:5) > > > M = matrix(3,2,5) > > > > > > I would like to have a vector at the end which give me > > > > > > 0 0 0 2 2 > > > > > > > This does that: > > > > > sapply(1:5, function(i) sum(M[,i] < v[i])) > > [1] 0 0 0 2 2 > > > > Basically, it's like a loop where at each iteration the function is > > called with one element of the vector 1:5 as argument, so what this > > really does is > > > > sum(M[,1] < v[1])) > > sum(M[,2] < v[2])) > > ... > > > > and then the results are put all together in a vector. > Though in your case, I think there are shorter solutions. For example: > > colSums(t(apply(M, 1, "<", v))) > [1] 0 0 0 2 2 > > apply() is more suited to matrices. Here, it takes each row separately, > and compares it with v. Then, you can just sum the result to count the > number of cases that fulfill the condition. > > > Cheers > > ______________________________________________ > 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. ______________________________________________ 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.