function createAggregator(setter, initializer) {
	      return function(collection, iteratee, thisArg) {
	        var result = initializer ? initializer() : {};
	        iteratee = getCallback(iteratee, thisArg, 3);

	        if (isArray(collection)) {
	          var index = -1,
	              length = collection.length;

	          while (++index < length) {
	            var value = collection[index];
	            setter(result, value, iteratee(value, index, collection), collection);
	          }
	        } else {
	          baseEach(collection, function(value, key, collection) {
	            setter(result, value, iteratee(value, key, collection), collection);
	          });
	        }
	        return result;
	      };
	    }
Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.

@private
@param {Function} setter The function to set keys and values of the accumulator object.
@param {Function} [initializer] The function to initialize the accumulator object.
@returns {Function} Returns the new aggregator function.