Package: matrixStats
====================

Version: 0.51.0 [2016-10-08]
o SPEEDUP / CLEANUP: rowMedians() and colMedians() are now plain
  functions. They were previously S4 methods (due to a Bioconductor
  legacy).  The package no longer imports the methods package.
o SPEEDUP: Now native API is formally registered allowing for
  faster lookup of routines from R.


Version: 0.50.2 [2016-04-24]
o BUG FIX: logSumExp(c(-Inf, -Inf, ...)) would return NaN rather
  than -Inf (Issue #48).  Thanks to Jason Xu (University of
  Washington) for reporting and Brennan Vincent for troubleshooting
  and contributing a fix.
o Package now installs on R (>= 2.12.0) as claimed.  Thanks to
  Mikko Korpela at Aalto University School of Science, Finland,
  for troubleshooting and providing a fix.


Version: 0.50.1 [2015-12-14]
o BUG FIX: The Undefined Behavior Sanitizer (UBsan) reported on
  a memcall(src, dest, 0) call where dest == null.  Thanks to
  Brian Ripley and the CRAN check tools for catching this. We
  could reproduce this with gcc 5.1.1 but not with gcc 4.9.2.


Version: 0.50.0 [2015-12-13]
o MAJOR FEATURE UPDATE: Subsetting arguments 'idxs', 'rows' and
  'cols' were added to all functions such that the calculations 
  are performed on the requested subset while avoiding creating 
  a subsetted copy, i.e. rowVars(x, cols=4:6) is a much faster
  and more memory efficient version than rowVars(x[,4:6]) and
  even yet more efficient than apply(x, MARGIN=1L, FUN=var).
  These features were added by Dongcan Jiang, Peking University,
  with support from the Google Summer of Code program.  A great
  thank you to Dongcan and to Google for making this possible.


Version: 0.15.0 [2015-10-26]
o CONSISTENCY: Now all weight arguments ('w' and 'W') default
  to NULL, which corresponds to uniform weights.
o ROBUSTNESS: Importing 'stats' functions in namespace.
o CLEANUP: Defunct argument 'centers' for col-/rowMads(); use 'center'.
o BUG FIX: weightedVar(x, w) used the wrong bias correction factor
  resulting in an estimate that was tau too large, where
  tau = ((sum(w) - 1) / sum(w)) / ((length(w) - 1) / length(w)).
  Thanks to Wolfgang Abele for reporting and troubleshooting on this.
o BUG FIX: weightedVar(x) with length(x) = 1 returned 0 no NA.
  Same for weightedSd().
o BUG FIX: weightedMedian(x, w=NA_real_) returned 'x' rather
  than NA_real_. This only happened for length(w) = 1.
o BUG FIX: allocArray(dim) failed for prod(dim) >= .Machine$integer.max.


Version: 0.14.2 [2015-06-23]
o BUG FIX: x_OP_y() and t_tx_OP_y() would return garbage on
  Solaris SPARC (and possibly other architectures as well) when
  input was integer and had missing values.


Version: 0.14.1 [2015-06-17]
o BUG FIX: product(x, na.rm=FALSE) for integer 'x' with both zeros
  and NAs returned zero rather than NA.
o BUG FIX: weightedMean(x, w, na.rm=TRUE) did not handle missing
  values in 'x' properly, if it was an integer.  It would also
  return NaN if there were weights 'w' with missing values, whereas
  stats::weighted.mean() would skip such data points.  Now
  weightedMean() does the same.
o BUG FIX: (col|row)WeightedMedians() did not handle infinite weights
  as weightedMedian() does.
o BUG FIX: x_OP_y(x, y, OP, na.rm=FALSE) returned garbage iff
  'x' or 'y' had missing values of type integer.
o BUG FIX: rowQuantiles() and rowIQRs() did not work for single-row
  matrices.  Analogously for the corresponding column functions.
o BUG FIX: rowCumsums(), rowCumprods() rowCummins(), and rowCummaxs(),
  accessed out-of-bound elements for Nx0 matrices where N > 0.
  The corresponding column methods has similar memory errors for
  0xK matrices where K > 0.
o BUG FIX: anyMissing(list(NULL)) returned NULL; now FALSE.
o BUG FIX: rowCounts() resulted in garbage if a previous column had NAs
(because forgot to update index kk in such cases).
o BUG FIX: rowCumprods(x) handled missing values and zeros incorrectly
  for integer 'x (not double); a zero would trump an existing missing
  value causing the following cumulative products to become zero.
  It was only a zero that trumped NAs; any other integer would work
  as expected.  Also, this bug was not in colCumprods().
o BUG FIX: rowAnys(x, value, na.rm=FALSE) did not handle missing
  values in a numeric 'x' properly.  Similarly, for non-numeric
  and non-logical 'x', row- and colAnys(), row- and colAlls(),
  anyValue() and allValue() did not handle when 'value' was a
  missing value.
o All of the above bugs were identified and fixed by Dongcan Jiang
  (Peking University, China), who also added corresponding unit tests.


Version: 0.14.0 [2015-02-13]
o ROBUSTNESS/TESTS: Package tests cover 96% of the code (was 91%).
o CONSISTENCY: Renamed argument 'centers' of col- and rowMads() to
  'center'.  This is consistent with col- and rowVars().
o CONSISTENCY: col- and rowVars() now using na.rm=FALSE as the default
  (na.rm=TRUE was mistakenly introduced as the default in v0.9.7).
o SPEEDUP: The check for user interrupts at the C level is now done less
  frequently of the functions.  It does every k:th iteration, where
  k = 2^20, which is tested for using (iter % k == 0).  It turns out, at
  least with the default compiler optimization settings that I use, that
  this test is 3 times faster if k = 2^n where n is an integer.  The
  following functions checks for user interrupts: logSumExp(),
  (col|row)LogSumExps(), (col|row)Medians(),, (col|row)Mads(),
  (col|row)Vars(), and (col|row)Cum(Min|Max|prod|sum)s().
o SPEEDUP: logSumExp(x) is now faster if 'x' does not contain any
  missing values.  It is also faster if all values are missing or
  the maximum value is +Inf - in both cases it can skip the actual
  summation step.
o BUG FIX: all() and any() flavored methods on non-numeric and
  non-logical (e.g. character) vectors and matrices with na.rm=FALSE
  did not give results consistent with all() and any() if there were
  missing values.  For example, with x <- c("a", NA, "b") we have
  all(x == "a") == FALSE and any(x == "a") == TRUE whereas our
  corresponding methods would return NA in those cases.  The methods
  fixed are allValue(), anyValue(), col- and rowAlls(), and
  col- and rowAnys().  Added more package tests to cover these cases.
o BUG FIX: Now logSumExp(x, na.rm=TRUE) would return NA if all values
  were NA and length(x) > 1.  Now it returns -Inf for all length(x):s.
o CLEANUP: anyMissing() is no longer an S4 generic.  This was done as
  part of the migration of making all functions of matrixStats plain
  R functions, which minimizes calling overhead and it will also allow
  us to drop 'methods' from the package dependencies.  I've scanned
  all CRAN and Bioconductor packages depending on matrixStats and
  none of them relied on anyMissing() dispatching on class, so
  hopefully this move has little impact. The only remaining S4 methods
  are now colMedians() and rowMedians().
o CLEANUP: Package no longer depends on R.methodsS3.


Version: 0.13.1 [2015-01-21]
o BUG FIX: diff2() with differences >= 3 would *read* spurious values
  beyond the allocated memory.  This error, introduced in 0.13.0, was
  harmless in the sense that the returned value was unaffected and still
  correct.  Thanks to Brian Ripley and the CRAN check tools for catching
  this.  I could reproduce it locally with 'valgrind'.


Version: 0.13.0 [2015-01-20]
o Added iqrDiff() and (col|row)IqrDiffs().
o CONSISTENCY: Now rowQuantiles(x, na.rm=TRUE) returns all NAs for rows
  with missing values.  Analogously for colQuantiles(), colIQRs(),
  rowIQRs() and iqr().  Previously, all these functions gave an error
  saying missing values are not allowed.
o SPEEDUP: (col|row)Diffs() are now implemented in native code
  and notably faster than diff() for matrices.
o SPEEDUP: Added diff2(), which is notably faster than base::diff()
  for vectors, which it is designed for.
o DOCUMENTATION: Added vignette summarizing available functions.
o COMPLETENESS: Added corresponding "missing" vector functions for
  already existing column and row functions.  Similarly, added
  "missing" column and row functions for already existing vector
  functions, e.g. added iqr() and count() to complement already
  existing (col|row)IQRs() and (col|row)Counts() functions.
o SPEEDUP: Made binCounts() and binMeans() a bit faster.
o SPEEDUP: Added count(x, value) which is a notably faster
  than sum(x == value).  This can also be used to count missing
  values etc.  Also, added allValue() and anyValue() for
  all(x == value) and any(x == value).
o SPEEDUP: Implemented weightedMedian() in native code, which made
  it ~3-10 times faster.   Dropped support for ties="both", because
  it would have to return two values in case of ties, which made
  the API unnecessarily complicated.  If really needed, then call
  the function twice with ties="min" and ties="max".
o SPEEDUP: Added weightedMean(), which is ~10 times faster than
  stats::weighted.mean().
o SPEEDUP: (col|row)Anys() and (col|row)Alls() is now notably
  faster compared to previous versions.
o SPEEDUP/CLEANUP: Turned several S3 and S4 methods into plain R
  functions, which decreases the overhead of calling the functions.
  After this there are no longer any S3 methods.  Remaining
  S4 methods are anyMissing() and rowMedians().
o ROBUSTNESS: Now column and row methods give slightly more informative
  error messages if a data.frame is passed instead of a matrix.
o CLEANUP: In the effort of migrating anyMissing() into a plain R
  function, the specific anyMissing() implementations for data.frame:s
  and and list:s were dropped and is now handled by anyMissing()
  for "ANY", which is the only S4 method remaining now.  In a near
  future release, this remaining "ANY" method will turned into a plain
  R function and the current S4 generic will be dropped.  We know of
  know CRAN and Bioconductor packages that relies on it being a generic
  function.  Note also that since R (>= 3.1.0) there is a base::anyNA()
  function that does the exact same thing making anyMissing() obsolete.
o BUG FIX: weightedMedian(..., ties="both") would give an error
  if there was a tie.  Added package test for this case.


Version: 0.12.2 [2014-12-07]
o CODE FIX: The native code for product() on integer vector
  incorrectly used C-level abs() on intermediate values despite
  those being doubles requiring fabs().  Despite this, the calculated
  product would still be correct (at least when validated on several
  local setups as well as on the CRAN servers).  Again, thanks to
  Brian Ripley for pointing out another invalid integer-double
  coersion at the C level.


Version: 0.12.1 [2014-12-06]
o ROBUSTNESS: Updated package tests to check methods in more
  scenarios, especially with both integer and numeric input data.
o BUG FIX: (col|row)Cumsums(x) where 'x' is integer would return
  garbage for columns (rows) containing missing values.
o BUG FIX: rowMads(x) where 'x' is numeric (not integer) would give
  incorrect results for rows that had an *odd* number of values
  (no ties).  Analogously issues with colMads(). Added package tests
  for such cases too.  Thanks to Brian Ripley and the CRAN check tools
  for (yet again) catching another coding mistake.  Details: This was
  because the C-level calculation of the absolute value of residuals
  toward the median would use integer-based abs() rather than double-
  based fabs(). Now it fabs() is used when the values are double and
  abs() when they are integers.


Version: 0.12.0 [2014-12-05]
o Submitted to CRAN.


Version: 0.11.9 [2014-11-26]
o Added (col|row)Cumsums(), (col|row)Cumprods(), (col|row)Cummins(),
  and (col|row)Cummaxs().
o BUG FIX: (col|row)WeightedMeans() with all zero weights gave
  mean estimates with values 0 instead of NaN.


Version: 0.11.8 [2014-11-25]
o SPEEDUP: Implemented (col|row)Mads(), (col|row)Sds() and
  (col|row)Vars() in native code.
o SPEEDUP: Made (col|row)Quantiles(x) faster for 'x' without
  missing values (and default type=7L quantiles).  It should
  still be implemented in native code.
o SPEEDUP: Made rowWeightedMeans() faster.
o BUG FIX: (col|row)Medians(x) when 'x' is integer would give
  invalid median values in case (a) it was calculated as the mean
  of two values ("ties"), and (b) the sum of those values where
  greater than .Machine$integer.max.  Now such ties are calculated
  using floating point precision.  Add lots of package tests.


Version: 0.11.6 [2014-11-16]
o SPEEDUP: Now (col|row)Mins(), (col|row)Maxs() and (col|row)Ranges()
  are implemented in native code providing a significant speedup.
o SPEEDUP: Now colOrderStats() also is implemented in native code,
  which indirectly makes colMins(), colMaxs() and colRanges() faster.
o SPEEDUP: colTabulates(x) no longer uses rowTabulates(t(x)).
o SPEEDUP: colQuantiles(x) no longer uses rowQuantiles(t(x)).
o CLEANUP: Argument 'flavor' of (col|row)Ranks() is now ignored.


Version: 0.11.5 [2014-11-15]
o SPEEDUP: Now colCollapse(x) no longer utilizes rowCollapse(t(x)).
  Added package tests for (col|row)Collapse().
o SPEEDUP: Now colDiffs(x) no longer uses rowDiffs(t(x)).
  Added package tests for (col|row)Diffs().
o SPEEDUP: Package no longer utilizes match.arg() due to
  its overhead; methods sumOver(), (col|row)Prods() and
  (col|row)Ranks() were updated.
o (col|row)Prods() now uses default method="direct" (was "expSumLog").


Version: 0.11.4 [2014-11-14]
o Added support for vector input to several of the row- and column methods
  as long as the "intended" matrix dimension is specified via argument
  'dim'.  For instance, rowCounts(x, dim=c(nrow, ncol)) is the same
  as rowCounts(matrix(x, nrow, ncol)), but more efficient since it
  avoids creating/allocating a temporary matrix.
o SPEEDUP: Now colCounts() is implemented in native code.  Moreover,
  (col|row)Counts() are now also implemented in native code for
  logical input (previously only for integer and double input).
  Added more package tests and benchmarks for these functions.


Version: 0.11.3 [2014-11-11]
o Turned sdDiff(),  madDiff(), varDiff(), weightedSd(), weightedVar()
  and weightedMad() into plain functions (were generic functions).
o Removed unnecessary usage of '::'.


Version: 0.11.2 [2014-11-09]
o SPEEDUP: Implemented indexByRow() in native code and it is no longer
  a generic function, but a regular function, which is also faster to
  call.  The first argument of indexByRow() has been changed to 'dim'
  such that one should use indexByRow(dim(X)) instead of indexByRow(X)
  as in the past.  The latter form is still supported, but deprecated.
o Added allocVector(), allocMatrix() and allocArray() for faster
  allocation numeric vectors, matrices and arrays, particularly when
  filled with non-missing values.


Version: 0.11.1 [2014-11-07]
o Better support for long vectors.
o ROBUSTNESS: Although unlikely, with long vectors support for binCounts()
  and binMeans() it is possible that a bin gets a higher count than what
  can be represented by an R integer (.Machine$integer.max=2^31-1).  If
  that happens, an informative warning is generated and the bin count is
  set to .Machine$integer.max.  If this happens for binMeans(), the
  corresponding mean is still properly calculated and valid.
o PRECISION: Using greater floating-point precision in more internal
  intermediate calculations, where possible.
o CLEANUP: Cleanup and harmonized the internal C API such there are two
  well defined API levels.  The high-level API is called by R via .Call()
  and takes care of most of the argument validation and construction of
  the return value.  This function dispatch to functions in the low-level
  API based on data type(s) and other arguments.  The low-level API is
  written to work with basic C data types only.
o BUG FIX: Package incorrectly redefined R_xlen_t on R (>= 3.0.0) systems
  where LONG_VECTOR_SUPPORT is not supported.


Version: 0.11.0 [2014-11-02]
o Added sumOver() and meanOver(), which are notably faster versions
  of sum(x[idxs]) and mean(x[idxs]).  Moreover, instead of having to do
  sum(as.numeric(x)) to avoid integer overflow when 'x' is an integer
  vector, one can do sumOver(x, mode="numeric"), which avoids the extra
  copy created when coercing to numeric (this numeric copy is also twice
  as large as the integer vector).  Added package tests and benchmark
  reports for these functions.


Version: 0.10.4 [2014-11-01]
o SPEEDUP: Made anyMissing(), logSumExp(), (col|row)Medians(),
  (col|row)Counts() slightly faster by making the native code assign
  the results directly to the native vector instead of to the R vector,
  e.g. ansp[i] = v where ansp=REAL(ans) instead of REAL(ans)[i] = v.
o Added benchmark reports for anyMissing() and logSumExp().


Version: 0.10.3 [2014-10-01]
o BUG FIX: binMeans() returned 0.0 instead of NA_real_ for empty bins.


Version: 0.10.2 [2014-09-01]
o BUG FIX: On some systems, the package failed to build on R (<= 2.15.3)
  with compilation error: "redefinition of typedef 'R_xlen_t'".


Version: 0.10.1 [2014-06-09]
o Added benchmark reports for also non-matrixStats functions col/rowSums()
  and col/rowMeans().
o Now all colNnn() and rowNnn() methods are benchmarked in a combined
  report making it possible to also compare colNnn(x) with rowNnn(t(x)).


Version: 0.10.0 [2014-06-07]
o BUG FIX: The package tests for product() incorrectly assumed that the
  value of prod(c(NaN, NA)) is uniquely defined.  However, as documented
  in help("is.nan"), it may be NA or NaN depending on R system/platform.
o Relaxed some packages tests such that they assert numerical
  correctness via all.equal() rather than identical().
o Submitted to CRAN.


Version: 0.9.7 [2014-06-05]
o BUG FIX: Introduced a bug in v0.9.5 causing col- and rowVars() and
  hence also col- and rowSds() to return garbage.  Add package tests
  for these now.
o Submitted to CRAN.


Version: 0.9.6 [2014-06-04]
o SPEEDUP: Now col- and rowProds() utilizes new product() function.
o SPEEDUP: Added product() for calculating the product of a numeric
  vector via the logarithm.
o Added signTabulate() for tabulating the number of negatives, zeros,
  positives and missing values.  For doubles, the number of negative
  and positive infinite values are also counted.


Version: 0.9.5 [2014-06-04]
o Added argument 'method' to col- and rowProds() for controlling how
  the product is calculated.
o SPEEDUP: Package is now byte compiled.
o SPEEDUP: Made weightedMedian() a plain function (was an S3 method).
o SPEEDUP: Made rowProds() and rowTabulates() notably faster.
o SPEEDUP: Now rowCounts(), rowAnys(), rowAlls() and corresponding
  column methods can search for any value in addition to the
  default TRUE.  The search for a matching integer or double value
  is done in native code, which is notably faster (and more
  memory efficient because it avoids creating any new objects).
o SPEEDUP: Made colVars() and colSds() notably faster and
  rowVars() and rowSds() a slightly bit faster.
o SPEEDUP: Turned more S4 methods into S3 methods, e.g. rowCounts(),
  rowAlls(), rowAnys(), rowTabulates() and rowCollapse().
o Added benchmark reports, e.g. matrixStats:::benchmark('colMins').
o CLEANUP: Now only exporting plain functions and generic functions.


Version: 0.9.4 [2014-05-23]
o SPEEDUP: Turned several S4 methods into S3 methods, e.g.
  indexByRow(), madDiff(), sdDiff() and varDiff().


Version: 0.9.3 [2014-04-26]
o Added argument 'trim' to madDiff(), sdDiff() and varDiff().


Version: 0.9.2 [2014-04-04]
o BUG FIX: The native code of binMeans(x, bx) would try to access
  an out-of-bounds value of argument 'y' iff 'x' contained elements
  that are left of all bins in 'bx'.  This bug had no impact on the
  results and since no assignment was done it should also not crash/
  core dump R.  This was discovered thanks to new memtests (ASAN and
  valgrind) provided by CRAN.


Version: 0.9.1 [2014-03-31]
o BUG FIX: rowProds() would throw "Error in rowSums(isNeg) : 'x' must
  be an array of at least two dimensions" on matrices where all rows
  contained at least one zero.  Thanks to Roel Verbelen at KU Leuven
  for the report.


Version: 0.9.0 [2014-03-26]
o Added weighedVar() and weightedSd().


Version: 0.8.14 [2013-11-23]
o MEMORY: Updated all functions to do a better job of cleaning out
  temporarily allocated objects as soon as possible such that the
  garbage collector can remove them sooner, iff wanted.  This
  increase the chance for a smaller memory footprint.
o Submitted to CRAN.


Version: 0.8.13 [2013-10-08]
o Added argument 'right' to binCounts() and binMeans() to specify
  whether binning should be done by (u,v] or [u,v).  Added system
  tests validating the correctness of the two cases.
o Bumped up package dependencies.


Version: 0.8.12 [2013-09-26]
o SPEEDUP: Now utilizing anyMissing() everywhere possible.


Version: 0.8.11 [2013-09-21]
o ROBUSTNESS: Now importing 'loadMethod' from 'methods' package such
  that 'matrixStats' S4-based methods also work when 'methods' is
  not loaded, e.g. when 'Rscript' is used, cf. Section 'Default
  packages' in 'R Installation and Administration'.
o ROBUSTNESS: Updates package system tests such that the can run
  with only the 'base' package loaded.


Version: 0.8.10 [2013-09-15]
o CLEANUP: Now only importing two functions from the 'methods' package.
o Bumped up package dependencies.


Version: 0.8.9 [2013-08-29]
o CLEANUP: Now the package startup message acknowledges argument
  'quietly' of library()/require().


Version: 0.8.8 [2013-07-29]
o DOCUMENTATION: The dimension of the return value was swapped
  in help("rowQuantiles").


Version: 0.8.7 [2013-07-28]
o SPEEDUP: Made (col|row)Mins() and (col|row)Maxs() much faster.
o BUG FIX: rowRanges(x) on an Nx0 matrix would give an error.
  Same for colRanges(x) on an 0xN matrix.  Added system tests
  for these and other special cases.


Version: 0.8.6 [2013-07-20]
o Forgot to declare S3 methods (col|row)WeightedMedians().
o Bumped up package dependencies.


Version: 0.8.5 [2013-05-25]
o Minor speedup of (col|row)Tabulates() by replacing rm() calls
  with NULL assignments.


Version: 0.8.4 [2013-05-20]
o CRAN POLICY: Now all Rd \usage{} lines are at most 90 characters long.


Version: 0.8.3 [2013-05-10]
o SPEEDUP: binCounts() and binMeans() now uses Hoare's Quicksort
  for presorting 'x' before counting/averaging.  They also no longer
  test in every iteration (=for every data point) whether the last
  bin has been reached or not, but only after completing a bin.


Version: 0.8.2 [2013-05-02]
o DOCUMENTATION: Minor corrections and updates to help pages.


Version: 0.8.1 [2013-05-02]
o BUG FIX: Native code of logSumExp() used an invalid check for
  missing value of an integer argument.  Detected by Brian Ripley
  upon CRAN submission.


Version: 0.8.0 [2013-05-01]
o Added logSumExp(lx) and (col|row)LogSumExps(lx) for accurately
  computing of log(sum(exp(lx))) for standalone vectors, and
  row and column vectors of matrices. Thanks to Nakayama (Japan)
  for the suggestion and contributing a draft in R.


Version: 0.7.1 [2013-04-23]
o Added argument 'preserveShape' to colRanks().  For backward
  compatibility the default is preserveShape=FALSE, but it may
  change in the future.
o BUG FIX: Since v0.6.4, (col|row)Ranks() gave the incorrect
  results for integer matrices with missing values.
o BUG FIX: Since v0.6.4, (col|row)Medians() for integers would
  calculate ties as floor(tieAvg).


Version: 0.7.0 [2013-01-14]
o Now (col|row)Ranks() support "max" (default), "min" and
  "average" for argument 'ties.method'.  Added system tests
  validation these cases.  Thanks Peter Langfelder (UCLA) for
  contributing this.


Version: 0.6.4 [2013-01-13]
o Added argument 'ties.method' to rowRanks() and colRanks(), but
  still only support for "max" (as before).
o ROBUSTNESS: Lots of cleanup of the internal/native code.  Native
  code for integer and double cases have been harmonized and are
  now generated from a common code template.  This was inspired by
  code contributions from Peter Langfelder (UCLA).


Version: 0.6.3 [2013-01-13]
o Added anyMissing() for data type 'raw', which always returns FALSE.
o ROBUSTNESS: Added system test for anyMissing().
o ROBUSTNESS: Now S3 methods are declared in the namespace.


Version: 0.6.2 [2012-11-15]
o CRAN POLICY: Made example(weightedMedian) faster.


Version: 0.6.1 [2012-10-10]
o BUG FIX: In some cases binCounts() and binMeans() could try to go
  past the last bin resulting a core dump.
o BUG FIX: binCounts() and binMeans() would return random/garbage
  values for bins that were beyond the last data point.


Version: 0.6.0 [2012-10-04]
o Added binMeans() for fast sample-mean calculation in bins.
  Thanks to Martin Morgan at the Fred Hutchinson Cancer Research
  Center, Seattle, for contributing the core code for this.
o Added binCounts() for fast element counting in bins.


Version: 0.5.3 [2012-09-10]
o CRAN POLICY: Replaced the .Internal(psort(...)) call with
  a call to a new internal partial sorting function, which
  utilizes the native rPsort() part of the R internals.


Version: 0.5.2 [2012-07-02]
o Updated package dependencies to match CRAN.


Version: 0.5.1 [2012-06-25]
o GENERALIZATION: Now (col|row)Prods() handle missing values.
o BUG FIX: In certain cases, (col|row)Prods() would return NA instead
  of 0 for some elements.  Added a redundancy test for the case.
  Thanks Brenton Kenkel at University of Rochester for reporting on this.
o Now this package only imports methods.


Version: 0.5.0 [2012-04-16]
o Added weightedMad() from aroma.core v2.5.0.
o Added weightedMedian() from aroma.light v1.25.2.
o This package no longer depends on the aroma.light package for
  any of its functions.
o Now this package only imports R.methodsS3, meaning it no
  longer loads R.methodsS3 when it is loaded.


Version: 0.4.5 [2012-03-19]
o Updated the default argument 'centers' of rowMads()/colMads()
  to explicitly be (col|row)Medians(x,...).  The  default
  behavior has not changed.


Version: 0.4.4 [2012-03-05]
o BUG FIX: colMads() would return the incorrect estimates. This bug
  was introduced in matrixStats v0.4.0 (2011-11-11).
o ROBUSTNESS: Added system/redundancy tests for rowMads()/colMads().
o CRAN: Made the system tests "lighter" by default, but full tests
  can still be run, cf. tests/*.R scripts.


Version: 0.4.3 [2011-12-11]
o BUG FIX: rowMedians(..., na.rm=TRUE) did not handle NaN (only NA).
  The reason for this was the the native code used ISNA() to test
  for NA and NaN, but it should have been ISNAN(), which is opposite
  to how is.na() and is.nan() at the R level work.  Added system
  tests for this case.


Version: 0.4.2 [2011-11-29]
o Added rowAvgsPerColSet() and colAvgsPerRowSet().


Version: 0.4.1 [2011-11-25]
o Added help pages with an example to rowIQRs() and colIQRs().
o Added example to rowQuantiles().
o BUG FIX: rowIQRs() and colIQRs() would return the 25% and the 75%
  quantiles, not the difference between them.  Thanks Pierre Neuvial
  at CNRS, Evry, France for the report.


Version: 0.4.0 [2011-11-11]
o Added rowRanks() and colRanks().  Thanks Hector Corrada Bravo
  (University of Maryland) and Harris Jaffee (John Hopkins).
o Dropped the previously introduced expansion of 'center' in rowMads()
  and colMads().  It added unnecessary overhead if not needed.


Version: 0.3.0 [2011-10-13]
o SPEEDUP/LESS MEMORY: colMedians(x) no longer uses rowMedians(t(x));
  instead there is now an optimized native-code implementation.
  Also, colMads() utilizes the new colMedians() directly.
  This improvement was kindly contributed by Harris Jaffee at
  Biostatistics of John Hopkins, USA.
o Added additional unit tests for colMedians() and rowMedians().


Version: 0.2.2 [2010-10-06]
o Now the result of (col|row)Quantiles() contains column names.


Version: 0.2.1 [2010-04-05]
o Added a startup message when package is loaded.
o CLEAN UP: Removed obsolete internal .First.lib() and .Last.lib().


Version: 0.2.0 [2010-03-30]
o DOCUMENTATION: Fixed some incorrect cross references.


Version: 0.1.9 [2010-02-03]
o BUG FIX: (col|row)WeightedMeans(..., na.rm=TRUE) would incorrectly
  treat missing values as zeros.  Added corresponding redundancy tests
  (also for the median case).  Thanks Pierre Neuvial for reporting this.


Version: 0.1.8 [2009-11-13]
o BUG FIX: colRanges(x) would return a matrix of wrong dimension
  if 'x' did not have any missing values.  This would affect all
  functions relying on colRanges(), e.g. colMins() and colMaxs().
  Added a redundancy test for this case.  Thanks Pierre Neuvial
  at UC Berkeley for reporting this.
o BUG FIX: (col|row)Ranges() return a matrix with dimension names.


Version: 0.1.7 [2009-06-20]
WORKAROUND: Cannot use "%#x" in rowTabulates() when creating the column
names of the result matrix.  It gave an error OSX with R v2.9.0 devel
(2009-01-13 r47593b) current the OSX server at R-forge.


Version: 0.1.6 [2009-06-17]
o Updated the Rdoc example for rowWeightedMedians() to run conditionally
  on aroma.light, which is only a suggested package - not a required one.
  This in order to prevent R CMD check to fail on CRAN, which prevents
  it for building binaries (as it currently happens on their OSX servers).


Version: 0.1.5 [2009-02-04]
o BUG FIX: For some errors in rowOrderStats(), the stack would not
  become UNPROTECTED before calling error.


Version: 0.1.4 [2009-02-02]
o Added methods (col|row)Weighted(Mean|Median)s() for weighted averaging.
o Added more Rdoc comments.
o Package passes R CMD check flawlessly.


Version: 0.1.3 [2008-07-30]
o Added (col|row)Tabulates() for integer and raw matrices.
o BUG FIX: rowCollapse(x) was broken and returned the wrong elements.


Version: 0.1.2 [2008-04-13]
o Added (col|row)Collapse().
o Added varDiff(), sdDiff() and madDiff().
o Added indexByRow().


Version: 0.1.1 [2008-03-25]
o Added (col|row)OrderStats().
o Added (col|row)Ranges() and (col|row)(Min|Max)s().
o Added colMedians().
o Now anyMissing() support most data types as structures.


Version: 0.1.0 [2007-11-26]
o Imported the rowNnn() methods from Biobase.
o Created.
