This blog is updated daily.
A general description is here.
It is planned that the 4.1.x series will be the last to support 32-bit Windows, with production of binary packages for that series continuing until early 2023.
Data set ‘esoph’ in package ‘datasets’ now provides the correct numbers of controls; previously it had the numbers of cases added to these. (Reported by Alexander Fowler in PR#17964.)
‘str(xS4)’ now also shows extraneous attributes of an S4 object ‘xS4’.
Function ‘package_dependencies()’ (in package ‘tools’) can now use different dependency types for direct and recursive dependencies.
Using ‘c()’ to combine a factor with other factors now gives a factor, an ordered factor when combining ordered factors with identical levels.
‘apply()’ gains a ‘simplify’ argument to allow disabling of simplication of results.
The ‘format()’ method for class ‘"ftable"’ gets a new option ‘justify’. (Suggested by Thomas Soeiro.)
New ‘...names()’ utility. (Proposed by Neal Fultz in PR#17705.)
‘capabilities()’ gets new entry ‘"Rprof"’ which is ‘TRUE’ when R has been configured with the equivalent of ‘--enable-R-profiling’ (as it is by default). (Related to Michael Orlitzky's report PR#17836.)
Rudimentary support for vi-style tags in ‘rtags()’ and ‘R CMD rtags’ has been added. (Based on a patch from Neal Fultz in PR#17214.)
Functions ‘URLencode()’ and ‘URLdecode()’ in package ‘utils’ now work on vectors of URIs. (Based on patch from Bob Rudis submitted with PR#17873.)
For HTML help (both dynamic and static), Rd file links to help pages in external packages are now treated as references to topics rather than file names, and fall back to a file link only if the topic is not found in the target package. The earlier rule which prioritized file names over topics can be restored by setting the environment variable ‘_R_HELP_LINKS_TO_TOPICS_’ to a false value.
‘c()’ now removes ‘NULL’ arguments before dispatching to methods, thus simplifying the implementation of ‘c()’ methods, _but_ for back compatibility keeps ‘NULL’ when it is the first argument. (From a report and patch proposal by Lionel Henry in PR#17900.)
Function ‘...elt()’ now propagates visibility consistently with ‘..n’. (Thanks to Lionel Henry's PR#17905.)
‘capture.output()’ no longer uses non-standard evaluation to evaluate its arguments. This makes evaluation of functions like ‘parent.frame()’ more consistent. (Thanks to Lionel Henry's PR#17907.)
‘packBits(bits, type="double")’ now works as inverse of ‘numToBits()’. (Thanks to Bill Dunlap's proposal in PR#17914.)
‘bquote(splice = TRUE)’ can now splice expression vectors with attributes: this makes it possible to splice the result of ‘parse(keep.source = TRUE)’. (Report and patch provided by Lionel Henry in PR#17869.)
‘get()’, ‘exists()’, and ‘get0()’ now signal an error if the first argument has length greater than 1. Previously additional elements were silently ignored. (Suggested by Antoine Fabri on R-devel.)
R now provides a simple native forward pipe syntax ‘|>’. The simple form of the forward pipe inserts the left-hand side as the first argument in the right-hand side call. A syntax is also provided for passing the left-hand side as an argument other than the first. The pipe implementation as a syntax transformation was motivated by suggestions from Jim Hester and Lionel Henry. This feature is experimental and may change prior to release.
‘.libPaths()’ gets a new option ‘include.site’, allowing to _not_ include the site library. (Thanks to Dario Strbenac's suggestion and Gabe Becker's PR#18016.)
Lithuanian translations are now available. (Thanks to Rimantas Žakauskas.)
There is optional support for tracing the progress of ‘loadNamespace()’ - see its help.
New function ‘gregexec()’ which generalizes ‘regexec()’ to find _all_ disjoint matches and well as all substrings corresponding to parenthesized subexpressions of the given regular expression. (Contributed by Brodie Gaslam.)
The ‘grid’ package now allows ‘gpar(fill)’ to be a ‘linearGradient()’, a ‘radialGradient()’, or a ‘pattern()’. The ‘viewport(clip)’ can now also be a grob, which defines a clipping path, and there is a new ‘viewport(mask)’ that can also be a grob, which defines a mask.
These new features are only supported so far on the Cairo-based graphics devices and on the ‘pdf()’ device.
Cairo-based graphics devices on platforms without Pango but with FreeType/FontConfig will make use of the latter for font selection.
The default personal library directory on builds with ‘--enable-aqua’ (including CRAN builds) now differs by CPU type, one of
~/Library/R/x86_64/x.y/library ~/Library/R/arm64/x.y/library
This uses the CPU type R (and hence the packages) were built for, so when a ‘x86_64’ build of R is run under Rosetta emulation on an ‘arm64’ Mac, the first is used.
‘R CMD build’ now omits tarballs and binaries of previous builds from the top-level package directory. (PR#17828, patch by Sebastian Meyer.)
There are warnings (including from the parser) on the use of unpaired surrogate Unicode points such as ‘\uD834’. (These cannot be converted to valid UTF-8.)
The code for evaluating default (extended) regular expressions now uses the same character-classification functions as the rest of R (previously they differed on Windows, macOS and AIX).
Subsetting/indexing, such as ‘ddd[*]’ or ‘ddd$x’ on a ‘DOTSXP’ (dot-dot-dot) object ‘ddd’ has been disabled; it worked by accident only and was undocumented.
‘R CMD check’ etc now warn when a package exports non-existing S4 classes or methods, also in case of no “methods” presence. (Reported by Alex Bertram; reproducible example and patch by Sebastian Meyer in PR#16662.)
‘boxplot()’ now also accepts ‘call’s for labels such as ‘ylab’, the same as ‘plot()’. (Reported by Marius Hofert.)
The help page for ‘xtabs()’ now correctly states that ‘addNA’ is setting ‘na.action = na.pass’ among others. (Reported as PR#17770 by Thomas Soeiro.)
The ‘R CMD check <pkg>’ gives a longer and more comprehensible message when ‘DESCRIPTION’ misses dependencies, e.g., in ‘Imports:’. (Thanks to the contributors of PR#17179.)
‘update.default()’ now calls the generic ‘update()’ on the formula to work correctly for models with extended formulas. (As reported and suggested by Neal Fultz in PR#17865.)
The horizontal position of leaves in a dendrogram is now correct also with ‘center = FALSE’. (PR#14938, patch from Sebastian Meyer.)
‘all.equal.POSIXt()’ no longer warns about and subsequently ignores inconsistent ‘"tzone"’ attributes, but describes the difference in its return value (PR#17277). This check can be disabled _via_ the new argument ‘check.tzone = FALSE’ as suggested by Sebastian Meyer.
‘x[[2^31]] <- v’ now works. (Thanks to the report and patch by Suharto Anggono in PR#17330.)
‘sum(df)’ and similar ‘"Summary"’- and ‘"Math"’-group member functions now work for data frames ‘df’ with ‘logical’ columns, notably also of zero rows. (Reported to R-devel by Martin “b706”.)
‘unsplit()’ had trouble with tibbles due to unsound use of ‘rep(NA, len)’-indexing, which should use ‘NA_integer_’ (Reported to R-devel by Mario Annau.)
Too long lines in environment files (e.g. ‘Renviron’) no longer crash R. This limit has been increased to 100,000 bytes. (PR#18001.)
‘add_datalist(*, force = TRUE)’ (from package ‘tools’) now actually updates an existing ‘data/datalist’ file for new content. (Thanks to a report and patch by Sebastian Meyer in PR#18048.)
‘cut.Date()’ and ‘cut.POSIXt()’ could produce an empty last interval for ‘breaks = "months"’ or ‘breaks = "years"’. (Reported as PR#18053 by Christopher Carbone.)