=============
New features
------------
- Trying to import an R package that is not installed will now raise an
exception :class:`rpy2.robjects.packages.PackageNotInstalledError`.
- The R C API functions `void SET_FRAME(SEXP x, SEXP v)`,
`void SET_ENCLOS(SEXP x, SEXP v)` and `void SET_HASHTAB(SEXP x, SEXP v)`
are now accessible through rpy2.
- The module :mod:`rpy2.situation` can now return `LD_LIBRARY_PATH`
information about R. For example with
`python -m rpy2.situation LD_LIBRARY_PATH`
- :meth:`rpy2.robjects.methods.RS4.extends` lists the class names in the
inheritance line.
- The conversion of R objects to Python allows much more flexibility
and better allow the use of independent code converting different classes.
This is currently limited to R objects that are lists, environments, or
S4 objects. The Sphinx documentation contains an example. While this is
still work in progress this should already address concerns
at the origin of issue 539 about S4 classes.
- :class:`rpy2.robjects.language.LangVector` to map R language objects at
the `robjects` level.
- :class:`rpy2.robjects.vectors.PairlistVector` to map R pairlist objects at
the `robjects` level.
- An alternative function to display the output of R cells can be
specified using `-d` or `--display` in the magic arguments
(in :mod:`rpy2.ipython.rmagic`).
- Python classes representing underlying R objects no longer have to
exclusively rely on inheritance from :mod:`rpy2.rinterface` objects`.
An abstract class :class:`rpy2.rinterface_lib.sexp.SupportsSEXP` is added
to identify objects supporting a `__sexp__` protocol, and that abstract
class can also be used with type hints.
- :func:`rpy2.robjects.functions.wrap_r_functions` can create Python functions
with matching signature from R functions
- :func:`rpy2.robjects.functions.wrap_r_functions` can create Python functions
with matching signature from R functions.
- New class :class:`rpy2.rinterface_lib._rinterface_capi.UninitializedRCapsule`
to allow the instanciation of "placeholder" rpy2 objects before the
embedded R is initialized. This facilitate the use of static typing checks
such as mypy, mocking for tests that do not involve the execution of R
code, and allow cleaner implementations of module-level globals
that are R objects.
- New class :class:`rpy2.robjects.vectors.DateVector` to represent R dates.
- :class:`pandas.Series` containing date objects can now be converted to R
`Date` vectors.
Changes
-------
- When calling R C-API's `R_ParseVector` and a error occurs, the
exception message now contains the parsing status.
- :mod:`rpy2.rinterface_lib.embedded` has a module-level "constant"
`DEFAULT_C_STACK_LIMIT` used when initializing the embedded R.
- When creating a :mod:`rpy2.robjects.vectors.DataFrame` from (name, vector)
pairs, the names are no longer transformed to syntactically valid R
symbols (issue 660).
- The value `nan` in :mod:`pandas` Series with strings is now converted
to R NA (issue 668).
- Initial support for :const:`pandas.NA` (still experimental in pandas
at the time of writing, and rpy2 support is limited to arrays of strings).
- :mod:`pandas` series of dtype :class:`pandas.StringDType`, experimental in pandas 1.0,
are now supported by the converted (in the pandas-to-R direction) (issue 669)
- Version checking for the mapping of R packages in :mod:`rpy2.robjects.lib` is
now more permissive (check that version prefixes are matching).
Bugs fixed
-----------
- Building ABI only mode could require an API build environment (and fail
with an error when not present).
- SVG output for the R magic were incorrectly bytes objects.
- :meth:`rpy2.rinterface_lib.sexp.StrSexpVector.__getitem__` was returning the string
`'NA'` when an R NA value. Not it returns `rpy2.rinterface_lib.na_values.NA_Character`.