#' Computes the sample median.
#' 
#' @param x a numeric vector containing the values whose median is to be
#'     computed.
#' @param na.rm a logical value indicating whether 'NA' values should be
#'     stripped before the computation proceeds.
median <- function (x, na.rm = FALSE) {
	if (is.factor(x) || mode(x) != "numeric") 
		stop("need numeric data")     # TODO: Translate message
	if (na.rm) {
		x <- x[!is.na(x)]
	} else if (any(is.na(x))) {
		return(NA)
	}
	n <- length(x)
	if (n == 0) 
		return(NA)
	half <- (n + 1)/2
	if (n %% 2 == 1) {
		sort(x, partial = half)[half]
	}
	else {
		sort(x, partial = c(half, half + 1))[c(half, half + 1)] |> sum() / 2
	}
}
