As a C-programmer, doing complex sorting based on a callback function is fairly easy. After having read some messages on the forum, using a callback function for sorting is not that easy in R. Assume I want that in a "<" comparison, NA should be treated as "don't decide, leave decision to the next level". In a callback function, I would treat an NA in one of the terms as equal to the second. How to do this in R? I am aware that this definition leads to transitivity problems, but the result is good enough for the qualitative display I am looking for. The real job could have been solved easily with imputation, but the customers believes this is voodoo, so I have to find a way around it. Dieter df = data.frame(x=c(1,1,1),y=c(1,NA,3),z=c(1,2,3)) df[order(df$x,df$y,df$z,na.last=FALSE),] # NA row is last df[order(df$x,df$y,df$z,na.last=TRUE),] # NA row is first # Note that na.last = NA is definitively wrong # NA row should be second