1892 lines
57 KiB
Markdown
1892 lines
57 KiB
Markdown
|
# Version 1.5.0 [2025-01-07]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* Package now requires R (>= 3.4.0) [2017-04-21], because the next
|
||
|
release of R will have stricter C header requirements that are not
|
||
|
backward compatible with older versions of R.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* The hidden R options for deescalating the error for using `useNames
|
||
|
= NA` to a warning has been removed; `useNames = NA` is now always
|
||
|
an error.
|
||
|
|
||
|
* Calling `colRanks()` and `rowRanks()` without explicitly specifying
|
||
|
argument `ties.method` is deprecated since version 1.3.0
|
||
|
[2024-04-10]. If not explicitly specified, a deprecation warning is
|
||
|
now produced every 10:th call not specifying the `ties.method`
|
||
|
argument.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* The error message of `colTabulates()` and `rowTabulates()`
|
||
|
asserting that double values are passed, reported on the class of
|
||
|
the input data, not the storage type.
|
||
|
|
||
|
|
||
|
# Version 1.4.1 [2024-09-06]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Fix a `runtime error: null pointer passed as argument 1, which is
|
||
|
declared to never be null` bug introduced in v1.4.0 that was
|
||
|
detected by the UndefinedBehaviorSanitizer (UBSan) running on CRAN.
|
||
|
|
||
|
|
||
|
# Version 1.4.0 [2024-09-03]
|
||
|
|
||
|
## Performance
|
||
|
|
||
|
* `rowSums2()` is now significantly faster for larger matrices.
|
||
|
|
||
|
## Miscellaneous
|
||
|
|
||
|
* None of the error messages use a trailing period.
|
||
|
|
||
|
* Addressing changes in the C API of R-devel resulted in compiler
|
||
|
errors such as `error: implicit declaration of function 'Calloc';
|
||
|
did you mean 'calloc'? [-Wimplicit-function-declaration]`.
|
||
|
|
||
|
* Addressing changes in stricter compiler flags of R-devel resulted
|
||
|
in compiler warning `embedding a directive within macro arguments
|
||
|
has undefined behavior [-Wembedded-directive]`.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Calling `colRanks()` and `rowRanks()` without explicitly specifying
|
||
|
argument `ties.method` is deprecated since version 1.3.0 [2024-04-10].
|
||
|
If not explicitly specified, a deprecation warning is now produced every
|
||
|
25:th call not specifying the `ties.method` argument.
|
||
|
|
||
|
|
||
|
# Version 1.3.0 [2024-04-10]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* `validateIndices()` has been removed. It had been defunct since
|
||
|
version 0.63.0 (2022-11-14).
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Fixed two PROTECT/UNPROTECT issues detected by the 'rchk' tool.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Calling `colRanks()` and `rowRanks()` without explicitly specifying
|
||
|
argument `ties.method` will be deprecated when using R (>=
|
||
|
4.4.0). The reason is that the current default is `ties.method =
|
||
|
"max"`, but we want to change that to `ties.method = "average"` to
|
||
|
align it with `base::rank()`. In order to minimize the risk for
|
||
|
sudden changes in results, we ask everyone to explicitly specify
|
||
|
their intent. The first notice will be through deprecation
|
||
|
warnings, which will only occur every 50:th call to keep the noise
|
||
|
level down. We will make it more noisy in future releases, and
|
||
|
eventually also escalated to defunct errors.
|
||
|
|
||
|
* Using a scalar value for argument `center` of `colSds()`,
|
||
|
`rowSds()`, `colVars()`, `rowVars()`, `colMads()`, `rowMads()`,
|
||
|
`colWeightedMads()`, and `rowWeightedMads()` is now defunct.
|
||
|
|
||
|
|
||
|
# Version 1.2.0 [2023-12-11]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Error messages that report on large integers (> 2^31 - 1), would
|
||
|
not render those integers correctly.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `useNames = NA` is defunct.
|
||
|
|
||
|
|
||
|
# Version 1.1.0 [2023-11-06]
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `useNames = NA` is defunct in R (>= 4.4.0). Remains deprecated in
|
||
|
R (< 4.4.0) for now.
|
||
|
|
||
|
## Miscellaneous
|
||
|
|
||
|
* The deprecation warning for using `useNames = NA`, suggested using
|
||
|
`useNames = TRUE` twice instead of also `useNames = FALSE`.
|
||
|
|
||
|
|
||
|
# Version 1.0.0 [2023-06-01]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* `useNames = TRUE` is the new default for all functions. For
|
||
|
backward compatibility, it used to be `useNames = NA`.
|
||
|
|
||
|
* `colQuantiles()` and `rowQuantiles()` gained argument `digits`,
|
||
|
just like `stats::quantile()` gained that argument in R 4.1.0.
|
||
|
|
||
|
* `colQuantiles()` and `rowQuantiles()` only sets quantile percentage
|
||
|
names when `useNames = TRUE`, to align with how argument `names` of
|
||
|
`stats::quantile()` works in base R.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* `colMeans2()` and `rowMeans2()` gained argument `refine`. If
|
||
|
`refine = TRUE`, then the sample average for numeric matrices are
|
||
|
calculated using a two-pass scan, resulting in higher precision.
|
||
|
The default is `refine = TRUE` to align it with `colMeans()`, but
|
||
|
also `mean2()` in this package. If the higher precision is not
|
||
|
needed, using `refine = FALSE` will be almost twice as fast.
|
||
|
|
||
|
* `colSds()`, `rowSds()`, `colVars()`, and `rowVars()` gained
|
||
|
argument `refine`. If `refine = TRUE`, then the sample average for
|
||
|
numeric matrices are calculated using a two-pass scan, resulting in
|
||
|
higher precision for the estimate of the center and therefore also
|
||
|
the variance.
|
||
|
|
||
|
## Performance
|
||
|
|
||
|
* Unnecessary checks for missing indices are eliminated, yielding
|
||
|
better performance. This change does not affect user-facing API.
|
||
|
|
||
|
* Made `colQuantiles()` and `rowQuantiles()` a bit faster for `type
|
||
|
!= 7L`, by making sure percentage names are only generated once,
|
||
|
instead of once per column or row.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Contrary to other functions in the package, and how it works in
|
||
|
base R, functions `colCumsums()`, `colCumprods()`, `colCummins()`,
|
||
|
`colCummaxs()`, `colRanges()`, `colRanks()`, and `colDiffs()`, plus
|
||
|
the corresponding row-based versions, did not drop the `names`
|
||
|
attribute when both row and column names were `NULL`. Now also
|
||
|
these functions behaves the same as the case when neither row or
|
||
|
column names are set.
|
||
|
|
||
|
* `colQuantiles()` and `rowQuantiles()` did not generate quantile
|
||
|
percentage names exactly the same way as `stats::quantile()`, which
|
||
|
would reveal itself for certain combinations of `probs` and
|
||
|
`digits`.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `useNames = NA` is now deprecated. Use `useNames = TRUE` or
|
||
|
`useNames = FALSE` instead.
|
||
|
|
||
|
|
||
|
# Version 0.63.0 [2022-11-14]
|
||
|
|
||
|
## Miscellaneous
|
||
|
|
||
|
* Package compiles again with older compilers not supporting the C99
|
||
|
standard (e.g. GCC 4.8.5 (2015), which is the default on RHEL /
|
||
|
CentOS 7.9). This was the case also for matrixStats (<= 0.54.0).
|
||
|
|
||
|
* Added more information to the error message produced when argument
|
||
|
`center` for `col-` and `rowVars()` holds an invalid value.
|
||
|
|
||
|
* Fix two compilation warnings on `a function declaration without a
|
||
|
prototype is deprecated in all versions of C
|
||
|
[-Wstrict-prototypes]`.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `validateIndices()` is now defunct and will eventually be removed
|
||
|
from the package API.
|
||
|
|
||
|
|
||
|
# Version 0.62.0 [2022-04-18]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* `colCummins()`, `colCummaxs()`, `rowCummins()`, and `rowCummaxs()`
|
||
|
now support also logical input.
|
||
|
|
||
|
## Miscellaneous
|
||
|
|
||
|
* Updated native code to use the C99 constant `DBL_MAX` instead of
|
||
|
legacy S constant `DOUBLE_XMAX`, which is planned to be unsupported
|
||
|
in R (>= 4.2.0).
|
||
|
|
||
|
|
||
|
# Version 0.61.0 [2021-09-12]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* When argument `which` for `colOrderStats()` and `rowOrderStats()`
|
||
|
is out of range, the error message now reports on the value of
|
||
|
`which`. Similarly, when argument `probs` for `colQuantiles()` and
|
||
|
`rowQuantiles()` is out of range, the error message reports on its
|
||
|
value too.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `validateIndices()` is deprecated and will eventually be removed
|
||
|
from the package API.
|
||
|
|
||
|
## Miscellaneous
|
||
|
|
||
|
* The package test for benchmark reports failed because the
|
||
|
**markdown** package was not declared as a suggested package.
|
||
|
|
||
|
|
||
|
# Version 0.60.1 [2021-08-22]
|
||
|
|
||
|
## Performance
|
||
|
|
||
|
* Handling of the `useNames` argument is now done in the native code.
|
||
|
|
||
|
* Passing `idxs`, `rows`, and `cols` arguments of type integer is now
|
||
|
less efficient than it used to, because the new code re-design (see
|
||
|
below) requires an internal allocation of an equally long
|
||
|
`R_xlen_t` vector that is populated by indices coerced from
|
||
|
`R_len_t` to `R_xlen_t` integers.
|
||
|
|
||
|
## Code Design
|
||
|
|
||
|
* No longer using native-code implementations that are specific to
|
||
|
the type of index that is passed for subsetting of vectors, rows,
|
||
|
and columns. This was done to avoid the complex use of macros that
|
||
|
was cumbersome to maintain and added an extra threshold for new
|
||
|
contributors to overcome. Another advantage is that faster
|
||
|
compilation time when built from source and a smaller size of
|
||
|
compiled library. In previous version `R CMD check` would produce
|
||
|
a NOTE on the package installation size being large, which no
|
||
|
longer is the case. The downside is that extra overhead when
|
||
|
passing integer indices (see above comment).
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Contrary to other functions which gained new argument `useNames =
|
||
|
NA` in the previous release, `colQuantiles()` and `rowQuantiles()`
|
||
|
got `useNames = TRUE`.
|
||
|
|
||
|
|
||
|
# Version 0.60.0 [2021-07-26]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Add row and column names support to all row and column
|
||
|
functions. To return row and column names, set argument `useNames =
|
||
|
TRUE`. To drop them, set `useNames = FALSE`. To preserve the
|
||
|
current, inconsistent behavior, set `useNames = NA`, which, for
|
||
|
backward compatibility reasons, remains the default for now.
|
||
|
|
||
|
|
||
|
# Version 0.59.0 [2021-05-31]
|
||
|
|
||
|
## Miscellaneous
|
||
|
|
||
|
* Harmonized error messages.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Some of the examples and package tests would allocated matrices
|
||
|
with dimensions that did not match the number of elements in the
|
||
|
input data.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Dropped `meanOver()` and `sumOver()`, and argument `method` from
|
||
|
`weightedVar()`, that have been defunct since January 2018.
|
||
|
|
||
|
|
||
|
# Version 0.58.0 [2021-01-26]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* `colVars()` and `rowVars()` with argument `center` now calculates
|
||
|
the sample variance using the `n/(n-1)*avg((x-center)^2)` formula
|
||
|
rather than the `n/(n-1)*(avg(x^2)-center^2)` formula that was used
|
||
|
in the past. Both give the same result when `center` is the
|
||
|
correct sample mean estimate. The main reason for this change is
|
||
|
that, if an incorrect `center` is provided, in contrast to the old
|
||
|
approach, the new approach is guaranteed to give at least
|
||
|
non-negative results, despite being incorrect. BACKWARD
|
||
|
COMPATIBILITY: Out of all 314 reverse dependencies on CRAN and
|
||
|
Bioconductor, only four called these functions with argument
|
||
|
`center`. All of them pass their package checks also after this
|
||
|
update. To further protect against a negative impact in existing
|
||
|
user scripts, `colVars()` and `rowVars()` will calculate both
|
||
|
versions and assert that the result is the same. If not, an
|
||
|
informative error is produced. To limit the performance impact,
|
||
|
this validation is run only once every 50:th call, a frequency that
|
||
|
can be controlled by R option `matrixStats.vars.formula.freq`.
|
||
|
Setting it to 0 or NULL will disable the validation. The default
|
||
|
can also be controlled by environment variable
|
||
|
`R_MATRIXSTATS_VARS_FORMULA_FREQ`. This validation framework will
|
||
|
be removed in a future version of the package after it has been
|
||
|
established that this change has no negative impact.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Now `colWeightedMads()` and `rowWeightedMads()` accept `center` of
|
||
|
the same length as the number of columns and rows, respectively.
|
||
|
|
||
|
* `colAvgsPerRowSet()` and `rowAvgsPerRowSet()` gained argument
|
||
|
`na.rm`.
|
||
|
|
||
|
* Now `weightedMean()` and `weightedMedian()` and the corresponding
|
||
|
row- and column-based functions accept logical `x`, where FALSE is
|
||
|
treated as integer 0 and TRUE as 1.
|
||
|
|
||
|
* Now `x_OP_y()` and `t_tx_OP_y()` accept logical `x` and `y`, where
|
||
|
FALSE is treated as integer 0 and TRUE as 1.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `colQuantiles()` and `rowQuantiles()` on a logical matrix should
|
||
|
return a numeric vector for `type = 7`. However, when there were
|
||
|
only missing values (= NA) in the matrix, then it would return a
|
||
|
"logical" vector instead.
|
||
|
|
||
|
* `colAvgsPerRowSet()` on a single-column matrix would produce an
|
||
|
error on non-matching dimensions. Analogously, for
|
||
|
`rowAvgsPerRowSet()` and single- row matrices.
|
||
|
|
||
|
* `colVars(x)` and `rowVars(x)` with `x` being an array would give
|
||
|
the wrong value if both argument `dim.` and `center` would be
|
||
|
specified.
|
||
|
|
||
|
* The documentation was unclear on what the `center` argument should
|
||
|
be. They would not detect when an incorrect specification was used,
|
||
|
notably when the length of `center` did not match the matrix
|
||
|
dimensions. Now these functions give an informative error message
|
||
|
when `center` is of the incorrect length.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Using a scalar value for argument `center` of `colSds()`,
|
||
|
`rowSds()`, `colVars()`, `rowVars()`, `colMads()`, `rowMads()`,
|
||
|
`colWeightedMads()`, and `rowWeightedMads()` is now deprecated.
|
||
|
|
||
|
|
||
|
# Version 0.57.0 [2020-09-25]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* `colCumprods()` and `rowCumprods()` now support also logical
|
||
|
input. Thanks to Constantin Ahlmann-Eltze at EMBL Heidelberg for
|
||
|
the patch.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `colCollapse()` and `rowCollapse()` did not expand `idxs` argument
|
||
|
before subsetting by `cols` and `rows`, respectively. Thanks to
|
||
|
Constantin Ahlmann-Eltze for reporting on this.
|
||
|
|
||
|
* `colAnys()`, `rowAnys()`, `anyValue()`, `colAlls()`, `rowAlls()`,
|
||
|
and `allValue()` with `value=FALSE` and _numeric_ input would
|
||
|
incorrectly consider all values different from one as FALSE. Now
|
||
|
it is only values that are zero that are considered FALSE. Thanks
|
||
|
to Constantin Ahlmann-Eltze for the bug fix.
|
||
|
|
||
|
|
||
|
# Version 0.56.0 [2020-03-12]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* `colQuantiles()` and `rowQuantiles()` now supports only integer,
|
||
|
numeric and logical input. Previously, it was also possible to
|
||
|
pass, for instance, `character` input, but that was a mistake. The
|
||
|
restriction on input allows for further optimization of these
|
||
|
functions.
|
||
|
|
||
|
* The returned type of `colQuantiles()` and `rowQuantiles()` is now
|
||
|
the same as for `stats::quantile()`, which depends on argument
|
||
|
`type`.
|
||
|
|
||
|
## Performance
|
||
|
|
||
|
* `colQuantiles()` and `rowQuantiles()` with the default `type = 7L`
|
||
|
and when there are no missing values are now significantly faster
|
||
|
and use significantly fewer memory allocations.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `colDiffs()` and `rowDiffs()` gave an error if argument `dim.` was
|
||
|
of type numeric rather than type integer.
|
||
|
|
||
|
* `varDiff()`, `sdDiff()`, `madDiff()`, `iqrDiff()`, and the
|
||
|
corresponding row- and column functions silently treated a `diff`
|
||
|
less than zero as `diff = 0`. Now an error is produced.
|
||
|
|
||
|
* Error messages on argument `dim.` referred to non-existing argument
|
||
|
`dim`.
|
||
|
|
||
|
* Error messages on negative values in argument `dim.` reported a
|
||
|
garbage value instead of the negative value.
|
||
|
|
||
|
* The Markdown reports produced by the internal benchmark report
|
||
|
generator did not add a line between tables and the following text
|
||
|
(a figure caption) causing the following text to be included in a
|
||
|
cell on an extra row in the table (at least when rendered on GitHub
|
||
|
Wiki pages).
|
||
|
|
||
|
|
||
|
# Version 0.55.0 [2019-09-05]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* `weightedVar()`, `weightedSd()`, `weightedMad()`, and their row-
|
||
|
and column- specific counter parts now return a missing value if
|
||
|
there are missing values in any of the weights `w` after possibly
|
||
|
dropping (`x`, `w`) elements with missing values in `x` (`na.rm =
|
||
|
TRUE`). Previously, `na.rm = TRUE` would also drop (`x`, `w`)
|
||
|
elements where `w` was missing. With this change, we now have that
|
||
|
for all functions in this package, `na.rm = TRUE` never applies to
|
||
|
weights - only `x` values.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* `colRanks()` and `rowRanks()` now supports the same set of
|
||
|
`ties.method` as `base::rank()` plus `"dense"` as defined by
|
||
|
`data.table::frank()`. For backward compatible reasons, the default
|
||
|
`ties.method` remains the same as in previous versions. Thank to
|
||
|
Brian Montgomery for contributing this.
|
||
|
|
||
|
* `colCumsums()` and `rowCumsums()` now support also logical input.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `weightedVar()`, `weightedSd()`, `weightedMad()`, and their row-
|
||
|
and column- specific counter parts would produce an error instead
|
||
|
of returning a missing value when one of the weights is a missing
|
||
|
value.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Calling `indexByRow(x)` where `x` is a matrix is now defunct. Use
|
||
|
`indexByRow(dim(x))` instead.
|
||
|
|
||
|
|
||
|
# Version 0.54.0 [2018-07-23]
|
||
|
|
||
|
## Performance
|
||
|
|
||
|
* SPEEDUP: No longer using `stopifnot()` for internal validation,
|
||
|
because it comes with a great overhead. This was only used in
|
||
|
`weightedMad()`, `col-`, and `rowWeightedMads()`, as well as `col-`
|
||
|
and `rowAvgsPerColSet()`.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Despite being an unlikely use case, `colLogSumExps(lx)` /
|
||
|
`rowLogSumExps(lx)` now also accepts integer `lx` values.
|
||
|
|
||
|
* The error produced when using `indexByRow(dim)` with `prod(dim) >=
|
||
|
2^31` would report garbage dimensions instead of `dim`.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Calling `indexByRow(x)`, where `x` is a matrix, is deprecated. Use
|
||
|
`indexByRow(dim(x))` instead.
|
||
|
|
||
|
|
||
|
# Version 0.53.1 [2018-02-10]
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Now `col-`/`rowSds()` explicitly replicate all arguments that are
|
||
|
passed to `col-`/`rowVars()`.
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* Added details on how `weightedMedian(x, interpolate = TRUE)` works.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `colLogSumExps(lx, cols)` / `rowLogSumExps(lx, rows)` gave an error
|
||
|
if `lx` has rownames / colnames.
|
||
|
|
||
|
* `col-`/`rowQuantiles()` would lose rownames of output in certain
|
||
|
cases.
|
||
|
|
||
|
|
||
|
# Version 0.53.0 [2018-01-23]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Functions `sum2(x)` and `means2(x)` now accept also logical input
|
||
|
`x`, which corresponds to using `as.integer(x)` but without the need
|
||
|
for neither coercion nor internal extra copies. With `sum2(x, mode =
|
||
|
"double")` it is possible to count number of TRUE elements beyond
|
||
|
2^31-1, which `base::sum()` does not support.
|
||
|
|
||
|
* Functions `col-`/`rowSums2()` and `col-`/`rowMeans2()` now accept
|
||
|
also logical input `x`.
|
||
|
|
||
|
* Function `binMeans(y, x, bx)` now accepts logical `y`, which
|
||
|
corresponds to to using `as.integer(y)`, but without the need for
|
||
|
coercion to integer.
|
||
|
|
||
|
* Functions `col-`/`rowTabulates(x)` now support logical input `x`.
|
||
|
|
||
|
* Now `count()` can count beyond 2^31-1.
|
||
|
|
||
|
* `allocVector()` can now allocate long vectors (longer than 2^31-1).
|
||
|
|
||
|
* Now `sum2(x, mode = "integer")` generates a warning if `typeof(x)
|
||
|
== "double"` asking if `as.integer(sum2(x))` was intended.
|
||
|
|
||
|
* Inspired by `Hmisc::wtd.var()`, when `sum(w) <= 1`, `weightedVar(x,
|
||
|
w)` now produces an informative warning that the estimate is
|
||
|
invalid.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Harmonized the ordering of the arguments of `colAvgsPerColSet()`
|
||
|
with that of `rowAvgsPerColSet()`.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `col-`/`rowLogSumExp()` could core dump R for "large" number of
|
||
|
columns/rows. Thanks Brandon Stewart at Princeton University for
|
||
|
reporting on this.
|
||
|
|
||
|
* `count()` beyond 2^31-1 would return invalid results.
|
||
|
|
||
|
* Functions `col-`/`rowTabulates(x)` did not count missing values.
|
||
|
|
||
|
* `indexByRow(dim, idxs)` would give nonsense results if `idxs` had
|
||
|
indices greater than `prod(dim)` or non-positive indices; now it
|
||
|
gives an error.
|
||
|
|
||
|
* `indexByRow(dim)` would give nonsense results when `prod(dim) >=
|
||
|
2^31`; now it gives an informative error.
|
||
|
|
||
|
* `col-`/`rowAvgsPerColSet()` would return vector rather than matrix
|
||
|
if `nrow(X) <= 1`. Thanks to Peter Hickey (Johns Hopkins
|
||
|
University) for troubleshooting and providing a fix.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Previously deprecated `meanOver()` and `sumOver()` are defunct. Use
|
||
|
`mean2()` and `sum2()` instead.
|
||
|
|
||
|
* Previously deprecated `weightedVar(x, w, method = "0.14.2")` is defunct.
|
||
|
|
||
|
* Dropped previously defunct `weightedMedian(..., ties = "both")`.
|
||
|
|
||
|
* Dropped previously defunct argument `centers` for
|
||
|
`col-`/`rowMads()`. Use `center` instead.
|
||
|
|
||
|
* Dropped previously defunct argument `flavor` of `colRanks()` and
|
||
|
`rowRanks()`.
|
||
|
|
||
|
|
||
|
# Version 0.52.2 [2017-04-13]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Several of the row- and column-based functions would core dump R if the
|
||
|
matrix was of a data type other than logical, integer, or numeric, e.g.
|
||
|
character or complex. This is now detected and an informative error is
|
||
|
produced instead. Similarly, some vector-based functions could potentially
|
||
|
core dump R or silently return a nonsense result. Thank you Hervé Pagès,
|
||
|
Bioconductor Core, for the report.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `rowVars(..., method = "0.14.2")` that was added for very unlikely
|
||
|
needs of backward compatibility of an invalid degree-of-freedom
|
||
|
term is deprecated.
|
||
|
|
||
|
|
||
|
# Version 0.52.1 [2017-04-04]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* The package test on `matrixStats:::benchmark()` tried to run even
|
||
|
if not all suggested packages were available.
|
||
|
|
||
|
|
||
|
# Version 0.52.0 [2017-04-03]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* Since `anyNA()` is a built-in function since R (>= 3.1.0), please
|
||
|
use that instead of `anyMissing()` part of this package. The
|
||
|
latter will eventually be deprecated. For consistency with the
|
||
|
`anyNA()` name, `colAnyNAs()` and `rowAnyNAs()` are now also
|
||
|
available replacing the identically `colAnyMissings()` and
|
||
|
`rowAnyMissings()` functions, which will also be deprecated in a
|
||
|
future release.
|
||
|
|
||
|
* `meanOver()` was renamed to `mean2()` and `sumOver()` was renamed
|
||
|
to `sum2()`.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `colSums2()` and `rowSums2()` which work like `colSums()` and
|
||
|
`rowSums()` of the **base** package but also supports efficient
|
||
|
subsetting via optional arguments `rows` and `cols`.
|
||
|
|
||
|
* Added `colMeans2()` and `rowMeans2()` which work like `colMeans()`
|
||
|
and `rowMeans()` of the **base** package but also supports efficient
|
||
|
subsetting via optional arguments `rows` and `cols`.
|
||
|
|
||
|
* Functions `colDiffs()` and `rowDiffs()` gained argument `dim.`.
|
||
|
|
||
|
* Functions `colWeightedMads()` and `rowWeightedMads()` gained
|
||
|
arguments `constant` and `center`. The current implementation only
|
||
|
support scalars for these arguments, which means that the same
|
||
|
values are applied to all columns and rows, respectively. In
|
||
|
previous version a hard-to-understand error would be produced if
|
||
|
`center` was of length greater than one; now an more informative
|
||
|
error message is given.
|
||
|
|
||
|
* Package is now silent when loaded; it no longer displays a startup
|
||
|
message.
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* Continuous-integration testing is now also done on macOS, in
|
||
|
addition to Linux and Windows.
|
||
|
|
||
|
* ROBUSTNESS: Package now registers the native API using also
|
||
|
`R_useDynamicSymbols()`.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Cleaned up native low-level API and renamed native source code files
|
||
|
to make it easier to navigate the native API.
|
||
|
|
||
|
* Now using **roxygen2** for help and NAMESPACE (was `R.oo::Rdoc`).
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `rowAnys(x)` on numeric matrices `x` would return `rowAnys(x == 1)`
|
||
|
and not `rowAnys(x != 0)`. Same for `colAnys()`, `rowAlls()`, and
|
||
|
`colAlls()`. Thanks Richard Cotton for reporting on this.
|
||
|
|
||
|
* `sumOver(x)` and `meanOver(x)` would incorrectly return -Inf or
|
||
|
+Inf if the intermediate sum would have that value, even if one
|
||
|
of the following elements would turn the intermediate sum into
|
||
|
NaN or NA, e.g. with `x` as `c(-Inf, NaN)`, `c(-Inf, +Inf)`, or
|
||
|
`c(+Inf, NA)`.
|
||
|
|
||
|
* WORKAROUND: Benchmark reports generated by
|
||
|
`matrixStats:::benchmark()` would use any custom R prompt that is
|
||
|
currently set in the R session, which may not render very well.
|
||
|
Now it forces the prompt to be the built-in `"> "` one.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* The package API is only intended for matrices and vectors of type
|
||
|
numeric, integer and logical. However, a few functions would still
|
||
|
return if called with a data.frame. This was never intended to
|
||
|
work and is now an error. Specifically, functions `colAlls()`,
|
||
|
`colAnys()`, `colProds()`, `colQuantiles()`, `colIQRs()`,
|
||
|
`colWeightedMeans()`, `colWeightedMedians()`, and `colCollapse()`
|
||
|
now produce warnings if called with a data.frame. Same for the
|
||
|
corresponding row- functions. The use of a `data.frame will be
|
||
|
produce an error in future releases.
|
||
|
|
||
|
* `meanOver()` and `sumOver()` are deprecated because they were
|
||
|
renamed to `mean2()` and `sum2()`, respectively.
|
||
|
|
||
|
* Previously deprecated (and ignored) argument `flavor` of
|
||
|
`colRanks()` and `rowRanks()` is now defunct.
|
||
|
|
||
|
* Previously deprecated support for passing non-vector, non-matrix
|
||
|
objects to `rowAlls()`, `rowAnys()`, `rowCollapse()`, and the
|
||
|
corresponding column-based versions are now defunct. Likewise,
|
||
|
`rowProds()`, `rowQuantiles()`, `rowWeightedMeans()`,
|
||
|
`rowWeightedMedians()`, and the corresponding column-based versions
|
||
|
are also defunct. The rationale for this is to tighten up the
|
||
|
identity of the **matrixStats** package and what types of input it
|
||
|
accepts. This will also help optimize the code further.
|
||
|
|
||
|
|
||
|
# Version 0.51.0 [2016-10-08]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
* SPEEDUP: Now native API is formally registered allowing for faster
|
||
|
lookup of routines from R.
|
||
|
|
||
|
|
||
|
# Version 0.50.2 [2016-04-24]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
* `logSumExp(c(-Inf, -Inf, ...))` would return NaN rather than
|
||
|
`-Inf`. Thanks to Jason Xu (University of Washington) for reporting
|
||
|
and Brennan Vincent for troubleshooting and contributing a fix.
|
||
|
|
||
|
|
||
|
# Version 0.50.1 [2015-12-14]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* The Undefined Behavior Sanitizer (UBsan) reported on a
|
||
|
`memcall(src, dest, 0)` call when `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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* CONSISTENCY: Now all weight arguments (`w` and `W`) default to
|
||
|
NULL, which corresponds to uniform weights.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* ROBUSTNESS: Importing **stats** functions in namespace.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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.
|
||
|
|
||
|
* `weightedVar(x)` with `length(x) = 1` returned 0 - not NA. Same for
|
||
|
`weightedSd()`.
|
||
|
|
||
|
* `weightedMedian(x, w = NA_real_)` returned `x` rather than
|
||
|
`NA_real_`. This only happened for `length(w) = 1`.
|
||
|
|
||
|
* `allocArray(dim)` failed for `prod(dim) >= .Machine$integer.max`.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* CLEANUP: Defunct argument `centers` for `col-`/`rowMads()`; use
|
||
|
`center`.
|
||
|
|
||
|
* `weightedVar(x, w, method = "0.14.2")` is deprecated.
|
||
|
|
||
|
|
||
|
# Version 0.14.2 [2015-06-23]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `product(x, na.rm = FALSE)` for integer `x` with both zeros and NAs
|
||
|
returned zero rather than NA.
|
||
|
|
||
|
* `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.
|
||
|
|
||
|
* `(col|row)WeightedMedians()` did not handle infinite weights as
|
||
|
`weightedMedian()` does.
|
||
|
|
||
|
* `x_OP_y(x, y, OP, na.rm = FALSE)` returned garbage iff `x` or `y`
|
||
|
had missing values of type integer.
|
||
|
|
||
|
* `rowQuantiles()` and `rowIQRs()` did not work for single-row
|
||
|
matrices. Analogously for the corresponding column functions.
|
||
|
|
||
|
* `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.
|
||
|
|
||
|
* `anyMissing(list(NULL))` returned NULL; now FALSE.
|
||
|
|
||
|
* `rowCounts()` resulted in garbage if a previous column had NAs
|
||
|
(because it forgot to update index kk in such cases).
|
||
|
|
||
|
* `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. Note, this bug was not in `colCumprods()`.
|
||
|
|
||
|
* `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.
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* 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()`.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* CONSISTENCY: Renamed argument `centers` of `col-`/`rowMads()` to
|
||
|
`center`. This is consistent with `col-`/`rowVars()`.
|
||
|
|
||
|
* CONSISTENCY: `col-`/`rowVars()` now use `na.rm = FALSE` as the
|
||
|
default (`na.rm = TRUE` was mistakenly introduced as the default in
|
||
|
v0.9.7).
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* 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()`.
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* ROBUSTNESS/TESTS: Package tests cover 96% of the code (was 91%).
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* CLEANUP: Package no longer depends on **R.methodsS3**.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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-`/`rowAlls()`, and
|
||
|
`col-`/`rowAnys()`. Added more package tests to cover these cases.
|
||
|
|
||
|
* `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.
|
||
|
|
||
|
|
||
|
# Version 0.13.1 [2015-01-21]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* 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()`.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `weightedMean()`, which is ~10 times faster than
|
||
|
`stats::weighted.mean()`.
|
||
|
|
||
|
* Added `count(x, value)` which is a notably faster than `sum(x ==
|
||
|
value)`. This can also be used to count missing values etc.
|
||
|
|
||
|
* Added `allValue()` and `anyValue()` for `all(x == value)` and
|
||
|
`any(x == value)`.
|
||
|
|
||
|
* Added `diff2()`, which is notably faster than `base::diff()` for
|
||
|
vectors, which it is designed for.
|
||
|
|
||
|
* Added `iqrDiff()` and `(col|row)IqrDiffs()`.
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
* ROBUSTNESS: Now column and row methods give slightly more
|
||
|
informative error messages if a data.frame is passed instead of a
|
||
|
matrix.
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* Added vignette summarizing available functions.
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: `(col|row)Diffs()` are now implemented in native code and
|
||
|
notably faster than `diff()` for matrices.
|
||
|
|
||
|
* SPEEDUP: Made `binCounts()` and `binMeans()` a bit faster.
|
||
|
|
||
|
* 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"`.
|
||
|
|
||
|
* SPEEDUP: `(col|row)Anys()` and `(col|row)Alls()` is now notably
|
||
|
faster compared to previous versions.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* 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 no CRAN and Bioconductor packages that rely 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.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `weightedMedian(..., ties = "both")` would give an error if there
|
||
|
was a tie. Added package test for this case.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `weightedMedian(..., ties = "both")` is now defunct.
|
||
|
|
||
|
|
||
|
# Version 0.12.2 [2014-12-07]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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 coercion at the C level.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* `weightedMedian(..., interpolate = FALSE, ties = "both")` is
|
||
|
defunct.
|
||
|
|
||
|
|
||
|
# Version 0.12.1 [2014-12-06]
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* ROBUSTNESS: Updated package tests to check methods in more scenarios,
|
||
|
especially with both integer and numeric input data.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `(col|row)Cumsums(x)` where `x` is integer would return garbage for
|
||
|
columns (rows) containing missing values.
|
||
|
|
||
|
* `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]
|
||
|
|
||
|
* Submitted to CRAN.
|
||
|
|
||
|
|
||
|
# Version 0.11.9 [2014-11-26]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `(col|row)Cumsums()`, `(col|row)Cumprods()`,
|
||
|
`(col|row)Cummins()`, and `(col|row)Cummaxs()`.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `(col|row)WeightedMeans()` with all zero weights gave mean
|
||
|
estimates with values 0 instead of NaN.
|
||
|
|
||
|
|
||
|
# Version 0.11.8 [2014-11-25]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Implemented `(col|row)Mads()`, `(col|row)Sds()`, and
|
||
|
`(col|row)Vars()` in native code.
|
||
|
|
||
|
* 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 though.
|
||
|
|
||
|
* SPEEDUP: Made `rowWeightedMeans()` faster.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `(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]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Now `(col|row)Mins()`, `(col|row)Maxs()`, and
|
||
|
`(col|row)Ranges()` are implemented in native code providing a
|
||
|
significant speedup.
|
||
|
|
||
|
* SPEEDUP: Now `colOrderStats()` also is implemented in native code,
|
||
|
which indirectly makes `colMins()`, `colMaxs()` and `colRanges()`
|
||
|
faster.
|
||
|
|
||
|
* SPEEDUP: `colTabulates(x)` no longer uses `rowTabulates(t(x))`.
|
||
|
|
||
|
* SPEEDUP: `colQuantiles(x)` no longer uses `rowQuantiles(t(x))`.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* CLEANUP: Argument `flavor` of `(col|row)Ranks()` is now ignored.
|
||
|
|
||
|
|
||
|
# Version 0.11.5 [2014-11-15]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* `(col|row)Prods()` now uses default `method = "direct"` (was
|
||
|
`"expSumLog"`).
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Now `colCollapse(x)` no longer utilizes
|
||
|
`rowCollapse(t(x))`. Added package tests for `(col|row)Collapse()`.
|
||
|
|
||
|
* SPEEDUP: Now `colDiffs(x)` no longer uses `rowDiffs(t(x))`. Added
|
||
|
package tests for `(col|row)Diffs()`.
|
||
|
|
||
|
* SPEEDUP: Package no longer utilizes `match.arg()` due to its
|
||
|
overhead; methods `sumOver()`, `(col|row)Prods()` and
|
||
|
`(col|row)Ranks()` were updated.
|
||
|
|
||
|
|
||
|
# Version 0.11.4 [2014-11-14]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* Turned `sdDiff()`, `madDiff()`, `varDiff()`, `weightedSd()`,
|
||
|
`weightedVar()` and `weightedMad()` into plain functions (were
|
||
|
generic functions).
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Removed unnecessary usage of `::`.
|
||
|
|
||
|
|
||
|
# Version 0.11.2 [2014-11-09]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `allocVector()`, `allocMatrix()`, and `allocArray()` for
|
||
|
faster allocation numeric vectors, matrices and arrays,
|
||
|
particularly when filled with non-missing values.
|
||
|
|
||
|
## Deprecated and Defunct
|
||
|
|
||
|
* Calling `indexByRow(X)` with a matrix `X` is deprecated. Instead
|
||
|
call it with `indexByRow(dim(X))`.
|
||
|
|
||
|
|
||
|
# Version 0.11.1 [2014-11-07]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Better support for long vectors.
|
||
|
|
||
|
* PRECISION: Using greater floating-point precision in more internal
|
||
|
intermediate calculations, where possible.
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Made `anyMissing()`, `logSumExp()`, `(col|row)Medians()`,
|
||
|
and `(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`.
|
||
|
|
||
|
* Added benchmark reports for `anyMissing()` and `logSumExp()`.
|
||
|
|
||
|
|
||
|
# Version 0.10.3 [2014-10-01]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `binMeans()` returned 0.0 instead of `NA_real_` for empty bins.
|
||
|
|
||
|
|
||
|
# Version 0.10.2 [2014-09-01]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* Added benchmark reports for also non-**matrixStats** functions
|
||
|
`col-`/`rowSums()` and `col-`/`rowMeans()`.
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* Relaxed some packages tests such that they assert numerical
|
||
|
correctness via `all.equal()` rather than `identical()`.
|
||
|
|
||
|
* Submitted to CRAN.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
|
||
|
# Version 0.9.7 [2014-06-05]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Introduced a bug in v0.9.5 causing `col-`/`rowVars()` and hence
|
||
|
also `col-`/`rowSds()` to return garbage. Add package tests for
|
||
|
these now.
|
||
|
|
||
|
* Submitted to CRAN.
|
||
|
|
||
|
|
||
|
# Version 0.9.6 [2014-06-04]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Now `col-`/`rowProds()` utilizes new `product()` function.
|
||
|
|
||
|
* SPEEDUP: Added `product()` for calculating the product of a numeric
|
||
|
vector via the logarithm.
|
||
|
|
||
|
|
||
|
# Version 0.9.5 [2014-06-04]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* SPEEDUP: Made `weightedMedian()` a plain function (was an S3
|
||
|
method).
|
||
|
|
||
|
* CLEANUP: Now only exporting plain functions and generic functions.
|
||
|
|
||
|
* SPEEDUP: Turned more S4 methods into S3 methods,
|
||
|
e.g. `rowCounts()`, `rowAlls()`, `rowAnys()`, `rowTabulates()` and
|
||
|
`rowCollapse()`.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added argument `method` to `col-`/`rowProds()` for controlling how
|
||
|
the product is calculated.
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Package is now byte compiled.
|
||
|
|
||
|
* SPEEDUP: Made `rowProds()` and `rowTabulates()` notably faster.
|
||
|
|
||
|
* 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).
|
||
|
|
||
|
* SPEEDUP: Made `colVars()` and `colSds()` notably faster and
|
||
|
`rowVars()` and `rowSds()` a slightly bit faster.
|
||
|
|
||
|
* Added benchmark reports, e.g. `matrixStats:::benchmark("colMins")`.
|
||
|
|
||
|
|
||
|
# Version 0.9.4 [2014-05-23]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* SPEEDUP: Turned several S4 methods into S3 methods,
|
||
|
e.g. `indexByRow()`, `madDiff()`, `sdDiff()` and `varDiff()`.
|
||
|
|
||
|
|
||
|
# Version 0.9.3 [2014-04-26]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added argument `trim` to `madDiff()`, `sdDiff()` and `varDiff()`.
|
||
|
|
||
|
|
||
|
# Version 0.9.2 [2014-04-04]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `weighedVar()` and `weightedSd()`.
|
||
|
|
||
|
|
||
|
# Version 0.8.14 [2013-11-23]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
* Submitted to CRAN.
|
||
|
|
||
|
|
||
|
# Version 0.8.13 [2013-10-08]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Bumped up package dependencies.
|
||
|
|
||
|
|
||
|
# Version 0.8.12 [2013-09-26]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Now utilizing `anyMissing()` everywhere possible.
|
||
|
|
||
|
|
||
|
# Version 0.8.11 [2013-09-21]
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* 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'.
|
||
|
|
||
|
* ROBUSTNESS: Updates package system tests such that the can run with
|
||
|
only the **base** package loaded.
|
||
|
|
||
|
|
||
|
# Version 0.8.10 [2013-09-15]
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* CLEANUP: Now only importing two functions from the **methods**
|
||
|
package.
|
||
|
|
||
|
* Bumped up package dependencies.
|
||
|
|
||
|
|
||
|
# Version 0.8.9 [2013-08-29]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* CLEANUP: Now the package startup message acknowledges argument
|
||
|
`quietly` of `library()`/`require()`.
|
||
|
|
||
|
|
||
|
# Version 0.8.8 [2013-07-29]
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* The dimension of the return value was swapped in
|
||
|
`help("rowQuantiles")`.
|
||
|
|
||
|
|
||
|
# Version 0.8.7 [2013-07-28]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* SPEEDUP: Made `(col|row)Mins()` and `(col|row)Maxs()` much faster.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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]
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Bumped up package dependencies.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Forgot to declare S3 methods `(col|row)WeightedMedians()`.
|
||
|
|
||
|
|
||
|
# Version 0.8.5 [2013-05-25]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* Minor speedup of `(col|row)Tabulates()` by replacing `rm()` calls
|
||
|
with NULL assignments.
|
||
|
|
||
|
|
||
|
# Version 0.8.4 [2013-05-20]
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* CRAN POLICY: Now all Rd `\usage{}` lines are at most 90 characters
|
||
|
long.
|
||
|
|
||
|
|
||
|
# Version 0.8.3 [2013-05-10]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* Minor corrections and updates to help pages.
|
||
|
|
||
|
|
||
|
# Version 0.8.1 [2013-05-02]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added argument `preserveShape` to `colRanks()`. For backward
|
||
|
compatibility the default is `preserveShape = FALSE`, but it may
|
||
|
change in the future.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* Since v0.6.4, `(col|row)Ranks()` gave the incorrect results for
|
||
|
integer matrices with missing values.
|
||
|
|
||
|
* Since v0.6.4, `(col|row)Medians()` for integers would calculate
|
||
|
ties as `floor(tieAvg)`.
|
||
|
|
||
|
|
||
|
# Version 0.7.0 [2013-01-14]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added argument `ties.method` to `rowRanks()` and `colRanks()`, but
|
||
|
still only support for `"max"` (as before).
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `anyMissing()` for data type `raw`, which always returns FALSE.
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* ROBUSTNESS: Added system test for `anyMissing()`.
|
||
|
|
||
|
* ROBUSTNESS: Now S3 methods are declared in the namespace.
|
||
|
|
||
|
|
||
|
# Version 0.6.2 [2012-11-15]
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* CRAN POLICY: Made `example(weightedMedian)` faster.
|
||
|
|
||
|
|
||
|
# Version 0.6.1 [2012-10-10]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* In some cases `binCounts()` and `binMeans()` could try to go past
|
||
|
the last bin resulting a core dump.
|
||
|
|
||
|
* `binCounts()` and `binMeans()` would return random/garbage values
|
||
|
for bins that were beyond the last data point.
|
||
|
|
||
|
|
||
|
# Version 0.6.0 [2012-10-04]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
* Added `binCounts()` for fast element counting in bins.
|
||
|
|
||
|
|
||
|
# Version 0.5.3 [2012-09-10]
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Updated package dependencies to match CRAN.
|
||
|
|
||
|
|
||
|
# Version 0.5.1 [2012-06-25]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* GENERALIZATION: Now `(col|row)Prods()` handle missing values.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* Package now only imports the **methods** package.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
|
||
|
# Version 0.5.0 [2012-04-16]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `weightedMad()` from **aroma.core** v2.5.0.
|
||
|
|
||
|
* Added `weightedMedian()` from **aroma.light** v1.25.2.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* This package no longer depends on the **aroma.light** package for
|
||
|
any of its functions.
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* ROBUSTNESS: Added system/redundancy tests for
|
||
|
`rowMads()`/`colMads()`.
|
||
|
|
||
|
* CRAN: Made the system tests "lighter" by default, but full tests
|
||
|
can still be run, cf. `tests/*.R` scripts.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `colMads()` would return the incorrect estimates. This bug was
|
||
|
introduced in **matrixStats** v0.4.0 (2011-11-11).
|
||
|
|
||
|
|
||
|
# Version 0.4.3 [2011-12-11]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `rowAvgsPerColSet()` and `colAvgsPerRowSet()`.
|
||
|
|
||
|
|
||
|
# Version 0.4.1 [2011-11-25]
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* Added help pages with an example to `rowIQRs()` and `colIQRs()`.
|
||
|
|
||
|
* Added example to `rowQuantiles()`.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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]
|
||
|
|
||
|
## Significant Changes
|
||
|
|
||
|
* Dropped the previously introduced expansion of `center` in
|
||
|
`rowMads()` and `colMads()`. It added unnecessary overhead if not
|
||
|
needed.
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `rowRanks()` and `colRanks()`. Thanks Hector Corrada Bravo
|
||
|
(University of Maryland) and Harris Jaffee (John Hopkins).
|
||
|
|
||
|
|
||
|
# Version 0.3.0 [2011-10-13]
|
||
|
|
||
|
## Performance and Memory
|
||
|
|
||
|
* 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.
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* Added additional unit tests for `colMedians()` and `rowMedians()`.
|
||
|
|
||
|
|
||
|
# Version 0.2.2 [2010-10-06]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Now the result of `(col|row)Quantiles()` contains column names.
|
||
|
|
||
|
|
||
|
# Version 0.2.1 [2010-04-05]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added a startup message when package is loaded.
|
||
|
|
||
|
## Code Refactoring
|
||
|
|
||
|
* CLEANUP: Removed obsolete internal `.First.lib()` and
|
||
|
`.Last.lib()`.
|
||
|
|
||
|
|
||
|
# Version 0.2.0 [2010-03-30]
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* Fixed some incorrect cross references.
|
||
|
|
||
|
|
||
|
# Version 0.1.9 [2010-02-03]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `(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]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `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.
|
||
|
|
||
|
* `(col|row)Ranges()` return a matrix with dimension names.
|
||
|
|
||
|
|
||
|
# Version 0.1.7 [2009-06-20]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* 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]
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* Updated the help 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]
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* For some errors in `rowOrderStats()`, the stack would not become
|
||
|
UNPROTECTED before calling error.
|
||
|
|
||
|
|
||
|
# Version 0.1.4 [2009-02-02]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added methods `(col|row)Weighted(Mean|Median)s()` for weighted
|
||
|
averaging.
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
* Added help to more functions.
|
||
|
|
||
|
## Software Quality
|
||
|
|
||
|
* Package passes `R CMD check` flawlessly.
|
||
|
|
||
|
|
||
|
# Version 0.1.3 [2008-07-30]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `(col|row)Tabulates()` for integer and raw matrices.
|
||
|
|
||
|
## Bug Fixes
|
||
|
|
||
|
* `rowCollapse()` was broken and returned the wrong elements.
|
||
|
|
||
|
|
||
|
# Version 0.1.2 [2008-04-13]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `(col|row)Collapse()`.
|
||
|
|
||
|
* Added `varDiff()`, `sdDiff()`, and `madDiff()`.
|
||
|
|
||
|
* Added `indexByRow()`.
|
||
|
|
||
|
|
||
|
# Version 0.1.1 [2008-03-25]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Added `(col|row)OrderStats()`.
|
||
|
|
||
|
* Added `(col|row)Ranges()` and `(col|row)(Min|Max)s()`.
|
||
|
|
||
|
* Added `colMedians()`.
|
||
|
|
||
|
* Now `anyMissing()` support most data types as structures.
|
||
|
|
||
|
|
||
|
# Version 0.1.0 [2007-11-26]
|
||
|
|
||
|
## New Features
|
||
|
|
||
|
* Imported the `rowNnn()` methods from **Biobase**.
|
||
|
|
||
|
* Created.
|