This blog is updated daily.
A general description is here.
New function ‘grepv()’ identical to ‘grep()’ except for the default ‘value = TRUE’.
‘findInterval()’ gets new arguments ‘checkSorted’ and ‘checkNA’ which allow skipling relatively costly checks; related to PR#16567.
Status reporting in ‘download.file()’ has been extended to report the outcome for individual files in simultaneous downloads.
The documentation of ‘gamma()’ and ‘is.numeric()’ is more specific, thanks to the contributors of PR#18677.
This update was mainly bug fixes but contained a barely documented major change. The set of BLAS routines has been unchanged since 1988, so throughout R's history. This update introduced new BLAS routines ‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. This means that BLAS implementations are no longer interchangeable.
To work around this, R can be configured with option ‘--with-2025blas’ which arranges for the 2025 BLAS additions to be compiled into ‘libRlapack’ (the internal LAPACK, not built if an external LAPACK is used).
This option allows the continuation of the practice of swapping the BLAS in use by symlinking ‘lib/libRblas.*’. It has the disadvantage of using the reference BLAS version of the 2025 routines whereas an enhanced BLAS might have an optimized version (OpenBLAS does as from version 0.3.29).
Windows builds currently use the internal LAPACK and by default the internal BLAS: notes on how to swap the latter _via_ ‘Rblas.dll’ are in file ‘src/extra/blas/Makefile.win’.
Building the HTML and Info versions of the R manuals now requires ‘texi2any’ from Texinfo 6.1 or later.
Header ‘R_exts/Error.h’ now ensures that ‘Rf_error’ and similar are given a ‘noreturn’ attribute when uased from C++ under all compilers.
The set of LAPACK (double and complex) routines declared in the headers ‘R_ext/Lapack.h’ and ‘R_ext/Applic.h’ has been extended, mostly to routines actually in use by packages.
The ‘enum’ ‘Rboolean’ defined in header ‘R_ext/Boolean.h’ now has a fixed underlying type of ‘int’ on platforms whose C compiler supports this.
This is a C23 feature (taken from C++11) and also supported in all C standards by some versions of ‘clang’ (from LLVM and Apple) and (with a warning when using ‘-pedantic’) by GCC when in C17 mode.
A fair amount of code has assumed this: it may be changed to a smaller type in future. In particular, as standard compilers do not check the validity of assignment to an ‘enum’, it has been possible to assign ‘NA_INTEGER’ to an ‘Rboolean’ variable, coerce it to ‘int’ and recover the value.
If there were a platform which used an underlying type of a different size this would be an ABI-breaking change (but we are unaware of any such platform).
Header ‘R_ext/Boolean.h’ now ensures that a ‘bool’ type is available either as a keyword (C23 and C++) or by including the C99 header ‘stdbool.h’. This is being used internally in R to replace ‘Rboolean’ by ‘bool’.
There are a new functions ‘asRboolean’ and ‘asBool’, variants of ‘asLogical’ more suited to converting logical arguments to ‘Rboolean’ or to ‘bool’. They require a length-one input and thow an error if that evaluates to ‘NA’.
‘R CMD check’ gains option ‘--run-demo’ to check demo scripts analogously to tests.
‘axisTicks(usr, ...)’ documentation clarification for ‘log = TRUE’, fixing bug PR#18821 thanks to Duncan Murdoch.
‘options(scipen = NULL)’ and other invalid values now signal an error instead of invalidating ops relying on a finite integer value. Values outside the range -9 .. 9999 are now warned about and set to a boundary or to the default ‘0’, e.g., in case of an ‘NA’.
‘format()’ etc, using ‘decimal.mark = s’, by default getting ‘s <- getOption("OutDec")’, signals a warning (to become an error in the future) when ‘s’ is not a string with exactly one character.
The argument of ‘as.environment()’ is now named ‘x’, not ‘object’, as was always documented and shown when printing it; thanks to Gael Millot's PR#18849.
Many arguments which should be length-1 logical are checked more thoroughly. The most commonly seen errors are in ‘unlink(, recursive)’, ‘tempdir()’ and the ‘na.rm’ arguments of ‘max()’, ‘min()’, ‘sum()’, ....
‘grep()’, ‘strsplit()’ and similar took non-‘TRUE’/‘FALSE’ values of their logical arguments as ‘FALSE’, but these were almost always nismatches to unnamed arguments and are now reported as ‘NA’.