On Tue, 2007-01-09 at 16:10 -0500, Christos Hatzis wrote: > Hi, > > A function calculates the absolute difference between the two largest values > of each row of a matrix, as shown in the following example code: > > cx <- matrix(runif(15),5) > cy <- t( apply(cx, 1, order, decreasing=TRUE) ) > > cz <- rep(0, nrow(cx)) > for( i in 1:nrow(cx) ) cz[i] <- abs(diff(cx[i, cy[i,1:2]])) > > Anybody has any ideas on how the last loop can be vectorized? > > Thanks.
How about this: > mat <- matrix(sample(1:50, 12), ncol = 4) > mat [,1] [,2] [,3] [,4] [1,] 39 1 22 11 [2,] 34 28 13 48 [3,] 25 40 38 3 > apply(mat, 1, function(x) abs(diff(sort(x, decreasing = TRUE)[1:2]))) [1] 17 14 2 Or > apply(mat, 1, function(x) diff(sort(x)[3:4])) [1] 17 14 2 HTH, Marc Schwartz ______________________________________________ R-help@stat.math.ethz.ch 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.