docs: function nanmedian( arr, options ) {
  	var sorted,
  		clbk,
  		len,
  		id,
  		d,
  		x;
  	if ( !isArray( arr ) ) {
  		throw new TypeError( 'nanmedian()::invalid input argument. Must provide an array. Value: `' + arr + '`.' );
  	}
  	if ( arguments.length > 1 ) {
  		if ( !isObject( options ) ) {
  			throw new TypeError( 'nanmedian()::invalid input argument. Options must be an object. Value: `' + options + '`.' );
  		}
  		if ( options.hasOwnProperty( 'sorted' ) ) {
  			sorted = options.sorted;
  			if ( !isBoolean( sorted ) ) {
  				throw new TypeError( 'nanmedian()::invalid option. Sorted flag must be a boolean. Option: `' + sorted + '`.' );
  			}
  		}
  		if ( options.hasOwnProperty( 'accessor' ) ) {
  			clbk = options.accessor;
  			if ( typeof clbk !== 'function' ) {
  				throw new TypeError( 'nanmedian()::invalid option. Accessor must be a function. Option: `' + clbk + '`.' );
  			}
  		}
  	}
  	d = [];
  	for ( var i = 0; i < arr.length; i++ ) {
  		x = ( clbk ) ? clbk( arr[ i ] ) : arr[ i ];
  		if ( isNumber( x ) ) {
  			d.push( x );
  		}
  	}
  	len = d.length;
  	if ( !len ) {
  		return null;
  	}
  	if ( !sorted ) {
  		d.sort( ascending );
  	}
  	// Get the middle index:
  	id = Math.floor( len / 2 );
  
  	if ( len % 2 ) {
  		// The number of elements is not evenly divisible by two, hence we have a middle index:
  		return d[ id ];
  	}
  	// Even number of elements, so must take the mean of the two middle values:
  	return ( d[ id-1 ] + d[ id ] ) / 2.0;
  }