Mode in case of discrete or categorial data
On Fri, 12 Nov 2004, Liaw, Andy wrote:
You might want to do a bit to handle NAs, as table() excludes them by
default. Also, you could write it a bit cleaner as:
Mode <- function(x) {
tab <- table(x)
m <- names(tab)[tab == max(tab)]
if (is.numeric(x)) m <- as.numeric(m)
m
}
(Generally I try avoiding constructs like:
if (cond) var <- alt1 else var <- alt2
especially when alt1 and alt2 are very similar. If you need to make changes
later, it's easy to change one and forget the other, etc. I believe Martin
also made this point in his talk at useR! 2004.)
Also,
var <- if(cond) alt1 else alt2
is more idiomatic S (and easier to read).
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595