I would like to make a ranking operation more efficient if possible. The goal is to rank a set of points representing objective function values such that points which are "dominated" by no others have rank 1, those which are dominated by one other point have rank 2, etc. In the example with two dimensions below, objective functions 1 and 2 are to be minimized. Points a-e are non-dominated, rank 1 points. Point f is rank 2 because point b is superior, and point g is rank 2 because point d is superior. Point h is rank 3 because points c and d are both superior.
| a | f | b | h (figure requires monospaced, plain-text display) Obj 1 | c | g | d | e |____________________ Obj 2 I need to compute the ranks of the rows of a matrix, where each row represents a point in objective space and the columns contain the objective function values to be minimized. Rank is defined as the number of points with objective function values less than or equal to the current point (including the current point). I've written the following function with two loops: PARETO.RANK <- function(obj.array) { obj.array <- unique(obj.array) ind.row <- 1:nrow(obj.array) ind.col <- 1:ncol(obj.array) rank.vec <- rep(NA, length(ind.row)) # initialize # Loop thru rows (points in objective function space) for(i in ind.row) { set <- ind.row for (j in ind.col) { # Loop thru objective functions set <- set[ obj.array[set,j] <= obj.array[i,j] ] } rank.vec[i] <- length(set) } return(rank.vec) } # end PARETO.RANK3() Can anyone think of a way to do this more efficiently, for example by vectorizing further? Thanks, Scott Waichler [EMAIL PROTECTED] ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html