This blog is updated daily.
A general description is here.
‘Sys.glob()’ now supports all characters from the Unicode Basic Multilingual Plane, no longer corrupting some (less commonly used) characters (PR#17638).
‘Rterm’ now correctly displays multi-byte-coded characters representable in the current native encoding (at least on Windows 10 they were sometimes omitted, PR#17632).
‘scan()’ issues with UTF-8 data when running in a DBCS locale have been resolved (PR#16520, PR#16584).
‘matrix’ objects now also inherit from class ‘"array"’, so e.g., ‘class(diag(1))’ is ‘c("matrix", "array")’. This invalidates code incorrectly assuming that ‘class(matrix_obj))’ has length one.
S3 methods for class ‘"array"’ are now dispatched for ‘matrix’ objects.
There is a new syntax for specifying _raw_ character constants similar to the one used in C++: ‘r"(...)"’ with ‘...’ any character sequence not containing the sequence ‘)"’. This makes it easier to write strings that contain backslashes or both single and double quotes. For more details see ‘?Quotes’.
Reference counting is now used instead of the ‘NAMED’ mechanism for determining when objects can be safely mutated in base C code. This reduces the need for copying in some cases and should allow further optimizations in the future. It should help make the internal code easier to maintain.
This change is expected to have almost no impact on packages using supported coding practices in their C/C++ code.
This version of R is built against the PCRE2 library for Perl-like regular expressions, if available. (On non-Windows platforms PCRE1 can optionally be used if PCRE2 is not available at build time.) The version of PCRE in use can be obtained via ‘extSoftVersion()’: PCRE1 (formerly known as ‘PCRE’) has versions <= 8, PCRE2 versions >= 10.
Making PCRE2 available when building R from source is strongly recommended (preferably version 10.30 or later) as PCRE1 is no longer developed: version 8.44 is ‘likely to be the final release’.
The internal traceback object produced when an error is signalled (‘.Traceback’), now contains the ‘call’s rather than the _‘deparse()’d_ calls, deferring the deparsing to the user-level functions ‘.traceback()’ and ‘traceback()’. This fulfils the wish of PR#17580, reported including two patch proposals by Brodie Gaslam.
For ‘head(x, n)’ and ‘tail()’ the default and other S3 methods notably for _vector_ ‘n’, e.g. to get a “corner” of a matrix, hace been extended to ‘array’'s of higher dimension thanks to the patch proposal by Gabe Becker in PR#17652. Consequently, optional argument ‘addrownums’ is deprecated and replaced by the (more general) arguemnt ‘keepnums’. An invalid second argument ‘n’ now leads to typically more easily readable error messages.
Printing ‘methods(..)’ now uses a new ‘format()’ method.
‘sort.list(x)’ now works for non-atomic objects ‘x’ and ‘method = "auto"’ (the default) or ‘"radix"’ in cases ‘order(x)’ works.
Where they are thavailable, ‘writeBin()’ allows long vectors.
‘wilcox.test()’ enhancements: In the (non-paired) two-sample case, ‘Inf’ values are treated as very large for robustness consistency. If exact computations are used, the result now has ‘"exact"’ in the ‘method’ element of its return value. New arguments ‘tol.root’ and ‘digits.rank’ where the latter may be used for stability to treat very close numbers as ties.
‘readBin()’ and ‘writeBin()’ now report an error for an invalid ‘endian’ value. The affected code needs to be fixed with care as the old undocumented behavior was to swap endian-ness in such cases.
‘sequence()’ is now an S3 generic with an internally implemented default method, and gains arguments to generate more complex sequences. Based on code from the ‘S4Vectors’ Bioconductor package and the advice of Hervé Pagès.
The default fill colour for ‘hist()’ and ‘boxplot()’ is now ‘col = "lightgray"’.
The default order of the levels on the y-axis for ‘spineplot()’ and ‘cdplot()’ has been reversed.
New function ‘R_user_dir()’ in package ‘tools’ suggests paths appropriate for storing R-related user-specific data, configuration and cache files.
The internal implementation of ‘grid’ units has changed, but the only visible effects at user-level should be
• a slightly different print format for some units (especially unit arithmetic),
• faster performance (for unit operations) and
• two new functions ‘unitType()’ and ‘unit.psum()’.
Based on code contributed by Thomas Lin Pedersen.
For consistency, ‘N <- NULL; N[[1]] <- val’ now turns ‘N’ into a ‘list’ also when ‘val)’ has length one. This enables ‘dimnames(r1)[[1]] <- "R1"’ for a 1-row matrix ‘r1’, fixing PR#17719 reported by Serguei Sokol.
‘deparse(..)’, ‘dump(..)’, and ‘dput(x, control = "all")’ now include control option ‘"digits17"’ which typically ensures 1:1 invertibility. New option ‘control = "exact"’ ensures numeric exact invertibility via ‘"hexDigits"’.
When loading data sets via ‘read.table()’, ‘data()’ now uses ‘LC_COLLATE=C’ to ensure locale-independent results for possible string-to-factor conversions.
‘Rterm’ gains a new option ‘--workspace’ to specify the workspace to be restored. This allows equals to be part of the name when opening _via_ Windows file associations (reported by Christian Asseburg).
Either PCRE2 or PCRE1 >= 8.32 (Nov 2012) is required: the deprecated provision for 8.20-8.31 has been removed.
‘Sys.glob()’ on Windows now supports all characters from the Unicode
Basic Multilingual Plane, no longer corrupting (less commonly used)
characters (PR#17638).
(Windows) ‘Rterm’ now correctly displays multi-byte-coded characters
representable in the current native encoding (at least on Windows 10
they were sometimes omitted, PR#17632).
‘scan()’ issues with UTF-8 data when running in a DBCS locale (on
Windows) have been resolved (PR#16520,PR#16584).
A rare C-level array overflow in ‘chull()’ has been worked around.
Some invalid specifications of the day-of-the-year (_via_ ‘%j’) are now detected by ‘strptime()’ and give an error.
‘postscript(.., title = *)’ now signals an error when the title string contains a character which would produce corrupt PostScript, thanks to PR#17607 by Daisuko Ogawa.
A better error message for ‘contour(*, levels = Inf)’.
‘dnorm’ had a problematic corner case with ‘sd == -Inf’ or negative ‘sd’ which was not flagged as an error in all cases. Thanks to Stephen D. Weigand for reporting and Wang Jiefei for analyzing this; similar change has been made in ‘dlnorm()’.
Operator ‘?’ now has lower precedence than ‘=’ to work as documented, so ‘=’ behaves like ‘<-’ in help expressions (PR#16710).
‘smoothEnds(x)’ now returns ‘integer’ type in _both_ cases when ‘x’ is ‘integer’, thanks to a report and proposal by Bill Dunlap PR#17693.
‘subset()’ had problems with 0-col dataframes (reported by Bill Dunlap, PR#17721).