"hist" <-
function (x, breaks, freq = TRUE, col = NULL, border = par("fg"),
	main = paste("Histogram of" , deparse(substitute(x))),
	xlim = range(breaks), ylim = range(counts, 0),
	xlab = deparse(substitute(x)), ylab, axes=TRUE, ...)
{
	if (!is.numeric(x)) 
		stop("hist: x must be numeric")
	if (missing(breaks)) {
		breaks <- range(x)
		breaks <- pretty(breaks + c(0, diff(breaks)/1000),
					1 + log2(length(x)))
	}
	else if (length(breaks) == 1) {
		if (is.na(breaks) | breaks < 2) 
			stop("invalid number of breaks")
		nbreaks <- breaks
		breaks <- range(x)
		breaks <- pretty(breaks + c(0, diff(breaks)/1000), nbreaks)
	}
	breaks <- sort(breaks)
	counts <- .C("bincount", 
		as.double(x), 
		length(x), 
		as.double(breaks), 
		length(breaks), 
		counts = integer(length(breaks) - 1), 
		TRUE
	)[[5]]
	if (any(counts < 0)) 
		browser()
	if (!freq) {
		counts <- counts/(sum(!is.na(x)) * diff(breaks))
		if (missing(ylab)) 
			ylab <- "Relative Frequency"
	}
	else if (missing(ylab)) 
		ylab <- "Frequency"
	plot.new()
	plot.window(xlim, ylim, "")
	title(main = main, xlab = xlab, ylab = ylab, ...)
	if(axes) {
		axis(1, ...)
		axis(2, ...)
	}
	rect(breaks[-length(breaks)], 0, breaks[-1], counts,
		col = col, border = border)
	invisible(NULL)
}
