This blog is updated daily.
A general description is here.
The default C++ standard will be changed to C++20 ‘where available’ (which it is on all known platforms from 2021): if not C++17 is used if available otherwise C++ is not supported (as before).
Several CRAN packages already require C++20 and have hundreds of others depending on them. (Packages can request C++17 if essential.)
‘all.equal(obj, simple, check.class=FALSE)’ now is true, also when
‘simple’ is a bare atomic vector and ‘obj’ has a simple class, fixing
the first part of PR#18971 thanks to Jan Gorecki.
‘str(x, give.attr=FALSE)’ no longer shows attributes when ‘x’ is a zero
length ‘"Date"’ or ‘"POSIXt"’ object.
‘model.frame(~1, list(), na.action=na.pass)’ and similar “border-line” uses no longer produce invalid data frames, fixing PR#18977, reported with patch by Mikael Jagan.
‘str(x, give.attr=FALSE)’ no longer shows attributes when ‘x’ is a zero length ‘"Date"’ or ‘"POSIXt"’ object.
‘all.equal(obj, simple, check.class=FALSE)’ now is true, also when ‘simple’ is a bare atomic vector and ‘obj’ has a simple class, fixing the first part of PR#18971 thanks to Jan Gorecki.
The non-API header files ‘R_ext/Callbacks.h’ and ‘R_ext/PrtUtil.h’ are no longer copied to the installed includes directory. The ‘R_ObjectTable’ type definitions formally in ‘R_ext/Callbacks.h’ are now available in the new header file ‘R_ext/ObjectTable.h’. This new header file should be used in packages instead of ‘R_ext/Callbacks.h’. To ease the transition, stub files ‘R_ext/Callbacks.h’ and ‘R_ext/PrtUtil.h’ have been added. These stub files contain ‘#warning’ directives to signal warnings that these files should not be used. The stub ‘R_ext/Callbacks.h’ also includes ‘R_ext/ObjectTable.h’. Packages including these headers will install successfully but with warnings for using these files.
‘x %notin% table’ newly in ‘base’ is an idiom for ‘!(x %in% table)’ and provided almost entirely for convenience and code readability, from an R-devel suggestion, after many years of private definitions mostly hidden in packages, including in R's ‘tools’ package.
New function ‘R_class()’ as the ‘C’ equivalent of ‘class()’ in R.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’, ‘STRING_PTR’, ‘DATAPTR’, ‘XTRUELENGTH’, ‘R_duplicate_attr’, ‘R_shallow_duplicate_attr’, ‘getConnection’, ‘LEVELS’, ‘SETLEVELS’, ‘R_data_class’.
New function ‘DATAPTR_RW()’ for use in implementing ‘ALTREP’ ‘Dataptr’ methods. This function should not be used in any other contexts.
The non-API header files ‘R_ext/Callbacks.h’ and ‘R_ext/PrtUtil.h’ are no longer copied to the installed includes directory. The ‘R_ObjectTable’ type definitions formally in ‘R_ext/Callbacks.h’ are now available in the new header file ‘R_ext/ObjectTable.h’. This new header file should be used in packages instead of ‘R_ext/Callbacks.h’. To ease the transition a stub file ‘R_ext/Callbacks.h’ has been added that just includes ‘R_ext/ObjectTable.h’.
‘diff(m, lag, dif)’ for matrix ‘m’ now still returns matrices, also when ‘lag * dif > nrow(m)’ (PR#18972, thanks to Mikael Jagan and Suharto Anggono). ‘diff(<ts-matrix>)’ remains matrix, even when it has length zero.
The non-API header files ‘R_ext/Callbacks.h’ and ‘R_ext/PrtUtil.h’ are no longer copied to the installed includes directory.
The default C++ standard will be changed to C++20 ‘where available’ (which it is on all known platforms from 2021): if not C++17 is used if available otherwise C++ is not supported (as before).
Several CRAN packages already require C++20 and have hundreds of others depending on them. (Packages can request C++17 if esssential.)
.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’, ‘STRING_PTR’, ‘DATAPTR’, ‘XTRUELENGTH’, ‘R_duplicate_attr’, ‘R_shallow_duplicate_attr’, ‘getConnection’, ‘LEVELS’, ‘SETLEVELS’.
‘str(x, give.attr=FALSE)’ no longer shows attributes when ‘x’ is a zero length ‘"Date"’ or ‘"POSIXt"’ object.
Specifying C++11 or C++14 has long given a note: in 99% of CRAN packages the specification is unnecessary as the default C++17 suffices (in a few cases with a deprecation warning from some compilers). The intention is that support for those standards will be withdrawn before release.
‘diff(m, lag, dif)’ for matrix ‘m’ now still returns matrices, also when ‘lag * dif > nrow(m)’ (PR#18972, thanks to Mikael Jagan).
Specifying C++11 or C++14 has long given a note: in 98% of CRAN packages the specification is unnecessary as the default C++17 suffices. The intention is that support for those standards will be withdrawn before release.
‘all.equal(obj, simple, check.class=FALSE)’ now is true, also when ‘simple’ is a bare atomic vector and ‘obj’ has a simple class, fixing the first part of PR#18971 thanks to Jan Gorecki.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’, ‘STRING_PTR’, ‘DATAPTR’, ‘XTRUELENGTH’, ‘R_duplicate_attr’, ‘R_shallow_duplicate_attr’, ‘getConnection’.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’, ‘STRING_PTR’, ‘DATAPTR’, ‘XTRUELENGTH’, ‘R_duplicate_attr’, ‘R_shallow_duplicate_attr’.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’, ‘STRING_PTR’, ‘DATAPTR’, ‘XTRUELENGTH’.
New connection type ‘zstdfile’ for files compressed by ‘zstd’ if R was built with such support. ‘file()’ and ‘gzfile()’ can automagically read such files.
‘memCompress()’ and ‘memDecompress()’ have options to use ‘zstd’ compression if R was built with support for it.
New function ‘DATAPTR_RW’ for use in implementing ‘ALTREP’ ‘Dataptr’ methods. This function should not be used in any other contexts.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’, ‘STRING_PTR’, ‘DATAPTR’.
New connection type ‘zstdfile’ for files compressed by ‘zstd’ if R was built with such support. ‘file()’ and ‘gafile()’ can automagically read such files.
‘memCompress()’ and ‘memDecompress()’ have optiosn to use ‘zstd’ compression if R was built with support for it.
The deprecated macros ‘CHARACTER_DATA’ and ‘CHARACTER_POINTER’ now return ‘const’ pointers since using writable pointers in packages is not safe.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’, ‘STRING_PTR’.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’, ‘ENVFLAGS’, ‘SET_ENVFLAGS’, ‘SET_FORMALS’, ‘SET_BODY’, ‘SET_CLOENV’.
The help page ‘example(matplot)’ now correctly labels Sepal vs Petal dimensions in its first iris data plot, thanks to Jeff Dick's post on R-devel.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’, ‘SET_TYPEOF’.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’ ‘Rf_GetOption’, ‘SET_FRAME’, ‘SET_HASHTAB’, ‘SET_ENCLOS’, ‘STDVEC_DATAPTR’, ‘SET_S4_OBJECT’, ‘UNSET_S4_OBJECT’, ‘SET_NAMED’, ‘R_lsInternal’, ‘Rf_lazy_duplicate’, ‘EXTPTR_PROT’, ‘EXTPTR_PTR’, ‘EXTPTR_TAG’, ‘NAMED’, ‘FRAME’, ‘HASHTAB’, ‘IS_S4_OBJECT’, ‘BODY’, ‘FORMALS’, ‘CLOENV’, ‘ENCLOS’, ‘Rf_isFrame’, ‘OBJECT’.
‘terms(<formula>, simplify=TRUE)’ now works correctly also in the cases where the formula has more than one term with NAs such as ‘f(u, b=NA)’ or ‘g(NA)’, finally fixing PR#15275 thanks to Mikael Jagan's patch.
‘R CMD check’ ‘NOTE’s on the use of these non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points: ‘R_nchar’, ‘VECTOR_PTR’, ‘R_tryWrap’, ‘Rf_NonNullStringMatch’, ‘Rf_isValidString’.
‘poly(fct, n)’ signals an error again, for a non-‘ordered’ factor ‘fct’, thanks to Roland Fuss' notice on R-devel.
When ‘"POSIXlt"’ date-time objects are ‘NA’-padded from subsetting or
increasing ‘length’ in the ‘`[`’ or ‘`length<-`’ methods, the
‘"balanced"’ attribute is set to ‘NA’, now; noted in PR#18681, thanks
to Mikael Jagan.
When ‘"POSIXlt"’ date-time objects are ‘NA’-padded from subsetting or increasing ‘length’ in the ‘`[`’ or ‘`length<-`’ methods, the ‘"balanced"’ attribute is set to ‘NA’, now; noted in PR#18681, thanks to Mikael Jagan.
‘R CMD check’ now handles archives with extension ‘.tar’ or ‘.tar.zstd’ (where ‘zstd’ compression is supported by the R build).
‘t.test(c(1:3, Inf))’ and similar no longer produce an error but return a (still not so useful) ‘"htest"’ result, fixing PR#18901, thanks to Jesse Alderliesten.
‘attr(., "tsp") <- val’ now uses ‘getOption("ts.eps")’ instead of hardwired ‘1e-5’; consequently, ‘ts(.., ts.eps=*)’ now passes ‘ts.eps’ to the ‘"tsp"’ setting C code; both fixing a long-standing ‘FIXME’.
‘insertSource()’ now ignores the internal ‘.packageName’ object, avoiding a superfluous message.
In static HTML help, links to vignette files from the default ‘doc/index.html’ page now also work for packages not installed in the default ‘.Library’, thanks to a report by Patrice Kiener.
‘fixInNamespace("<S3method>")’ failed to update the S3 methods table when the generic was not on the search path.
In plain-text help (‘Rd2txt’), an initial newline from an Rd inline \eqn no longer breaks the paragraph.
‘hist(*, log = "x")’ now works without a warning, thanks to Martin Smith's PR#18921.
Subassigning ‘"POSIXlt"’, i.e., ‘<tdat>[i] <- val’ and ‘<tdat>[[i]] <- val’ now rebalance as they should, thanks to Mikael Jagan's PR#18919.
‘<POSIXlt>[*]’ (re-)setting ‘"balanced"’, fixing PR#18681 comment #7, thanks to Mikael Jagan.
All four of ‘{col,row}{Sums,Means}(Z, na.rm=TRUE)’ now correctly work with complex ‘Z’ where ‘is.na(Re(Z))’ differs from ‘is.na(Im(Z))’, fixing PR#18942, unearthed by Dirk Eddelbuettel.
Fix for glyph rendering on the ‘quartz()’ device when there is other (“normal”) text drawn on the device. The problem was that the text transformation matrix was not reset so glyphs would be rendered incorrectly (often completely outside the device, i.e., not visible).
Functions ‘install.packages()’ and ‘download.packages()’ again consult option ‘download.file.method’ when the download method is unspecified.
Tanguy Barthelemy and colleagues at the ‘R Dev Day’ following Rencontres R in May 2025 extended the help page of ‘lm()’, fixing PR#18058. As suggested by Thomas Soeiro, such notes were also added to the ‘glm()’, ‘poly()’ and ‘splines::bs()’ and ‘ns()’ pages.
‘lbeta(1i, 1)’ now signals an error, as ‘lbeta()’ is not implemented for ‘complex’, fixing PR#18946 from Ben Bolker and Kasper Kristensen.
The Cairo-based SVG device uses ‘pt’ as the default document unit also with Cairo >= 1.17.8 (PR#18912).
‘pretty(*, eps.correct = 2)’ has been fixed, e.g., to avoid over 1 million length result for ‘pretty(c(0, 1e-322), eps.correct = 2)’.
Non-API entry points ‘Rf_acopy_string’ and ‘Rf_lazy_duplicate’ have been added to those reported by ‘R CMD check’.
When ‘"POSIXlt"’ date-time objects are ‘NA’-padded from subsetting or increasing ‘length’ in the ‘`[`’ or ‘`length<-`’ methods, the ‘"balanced"’ attribute is set to ‘NA’, now; noted in PR#18681, thanks to Mikael Jagan.
Building the R manuals now requires Texinfo 6.8 or later.
‘format(dtime, digits=* / format=*)’ is more consistent when the ‘POSIXt’ date-time object ‘dtime’ has fractional (non integer) seconds. Fixes PR#17350, thanks to new contributions by LatinR's ‘R Dev Day’ participants, Heather Turner and Dirk Eddelbuettel; also fixes more cases, notably when ‘format’ contains ‘%OS<nodigit>’.
Plain-text help now renders Rd \describe lists using line breaks after item labels. Set ‘tools::Rd2txt_options(descStyle=NULL)’ to get the old behaviour with a simple space; a ‘"colon"’ variant is also available.
‘pretty(*, eps.correct = 2)’ has been fixed, e.g., to avoid over 1 million length result for ‘pretty(c(0, 1e-322), eps.correct = 2)’.
The default method for ‘pretty()’ gets a new switch ‘bounds’ for completeness, corresponding to ‘.pretty()’. Also, it now catches typos such as ‘eps.corrected = 2’, noted in PR#18521 by Mikko Korpela.
‘pretty(*, eps.correct = 2)’ has been fixed, e.g., to avoid over 1 mio length result for ‘pretty(c(0, 1e-322), eps.correct = 2)’.
Declarations for non-API functions ‘LOGICAL0’, ‘INTEGER0’, ‘REAL0’, ‘COMPLEX0’, and ‘RAW0’ have been removed from installed header files.
The Cairo-based SVG device uses ‘pt’ as the default document unit also with Cairo >= 1.17.8 (PR#18912).
Default column labels are now correctly aligned when printing a matrix with right alignment (PR#18943, thanks to Mikael Jagan).
The default ‘AIC’ and ‘BIC’ methods now check whether the ‘methods’ namespace is loaded rather than ‘stats4’. They still use ‘stats4::logLik’ (and ‘stats4::nobs’), but packages no longer need to load ‘stats4’ explicitly.
‘confint.default()’ now also works on S4 objects, as long as suitable ‘coef()’ and ‘vcov()’ methods exist.
‘list.files()’ now has optional argument ‘fixed’ to allow literal pattern matching. Suggested and implemented by Duncan Murdoch in PR#18925.
‘substring(txt, i1, i2)’, ‘substr(..)’ and their replacement versions now accept ‘i2 = NULL’ to mean “to the end_of_string”, thus fulfilling Kevin Ushey (and others') suggestions in PR#18851.
Plain-text help (‘Rd2txt’) lacked markup for ‘\cite’d titles, which are now wrapped in single quotes.
‘Rman.css’, the stylesheet for the ‘texi2any’-generated HTML versions of the R manuals, was improved following joint efforts at the ‘R Dev Days’ of useR! 2024 and RSECon25.
New system Rd macro ‘\manual{<name>}{<node>}’ to refer to a specific section _etc_ (possibly empty, for ‘Top’) of one of the R manuals (e.g., ‘R-exts’).
Fix for glyph rendering on the ‘quartz()’ device when there is other
(“normal”) text drawn on the device. The problem was that the text
transformation matrix was not reset so glyphs would be rendered
incorrectly (often completely outside the device, i.e., not visible).
Tanguy Barthelemy and colleagues at the ‘R Dev Day’ following
Rencontres R in May 2025 extended the help page of ‘lm()’, fixing
PR#18058. As suggested by Thomas Soeiro, such notes were also added to
the ‘glm()’, ‘poly()’ and ‘splines::bs()’ and ‘ns()’ pages.
‘jitter(x, amount, factor)’ becomes more robust for non-finite ‘x’ or also negative ‘amount’, ‘factor’. ‘help(jitter)’ is easier to read, fixing PR#17279, thanks to its contributors.
Fix for glyph rendering on the ‘quartz()’ device when there is other (“normal”) text drawn on the device. The problem was that the text transformation matrix was not reset so glyphs would be rendered incorrectly (often completely outside the device, i.e., not visible).
Tanguy Barthelemy and colleagues at the ‘R Dev Day’ following Rencontres R in May 2025 extended the help page of ‘lm()’, fixing PR#18058. As suggested by Thomas Soeiro, such notes were also added to the ‘glm()’, ‘poly()’ and ‘splines::bs()’ and ‘ns()’ pages.
‘lbeta(1i, 1)’ now signals an error, as ‘lbeta()’ is not implemented for ‘complex’, fixing PR#18946 from Ben Bolker and Kasper Kristensen.
Functions ‘install.packages()’ and ‘download.packages()’ again consult option ‘download.file.method’ when the download method is unspecified.
‘confint.default’ now also works on S4 objects, as long as suitable ‘coef()’ and ‘vcov()’ methods exist.
‘AIC.default’ and ‘BIC.default’ now checks whether the ‘methods’ namespace is loaded rather than ‘stats4’. It still uses ‘stats4::logLik’ and ‘stats4::nobs’, but packages no longer need to load ‘stats4’ explicitly.
‘confint.default’ now also works on S4 objects, as long as they have ‘coef()’ and ‘vcov()’ generics.
New function ‘R_eval_with_gd()’ designed to “lock” a graphics device during call to ‘eval()’ within device drawing routines. External _on-screen_ graphics devices should consider using this function to avoid crashes from the device being closed by the user (e.g., a mouse click) during drawing.
New functions ‘GEcreateDD()’ and ‘GEfreeDD()’ for allocating (and initialising) ‘DevDesc’ structures. Can be used by external graphics devices. Satisfies PR#18292.
‘plot.default()’ gets a new switch ‘lim2’ to indicate that the default ‘xlim’ and ‘ylim’ range computations only use _jointly_ finite x- and y-values; indirectly suggested in PR#7986 by Jincai Jiang.
‘confint.default()’ would fail on S4 model objects because it used
‘stats’ methods for ‘coef’ and ‘vcov’ and their defaults did not know
about S4. Now changed to look for the the two functions in the calling
frame. The mechanism for ‘AIC.default’ and ‘BIC.default’ has been
changed to do likewise.
‘confint.default()’ would fail on S4 model objects because it used ‘stats’ methods for ‘coef’ and ‘vcov’ and their defaults did not know about S4. Now changed to look for the the two functions in the calling frame. The mechanism for ‘AIC.default’ and ‘BIC.default’ has been changed to do likewise.
All four of ‘{col,row}{Sums,Means}(Z, na.rm=TRUE)’ now correctly work with complex ‘Z’ where ‘is.na(Re(Z))’ differs from ‘is.na(Im(Z))’, fixing PR#18942, unearthed by Dirk Eddelbuettel.
‘barplot(.., orderH = *)’ for stacked bar plots allows to sort the stacks each according to size.
‘wilcox.test()’ can now perform exact (conditional) inference in case of ties. Based on contributions by Torsten Hothorn.
‘wilcox.test()’ can now perform exact (conditional) inference in case of ties. Based on contributions by Torstehn Hothorn.
‘wilcox.test()’ can now optionally compute improved asymptotic p-values by including up to 3 correction terms of the Edgeworth series for the normal approximation.
‘chkDots()’' optional argument ‘allowed’ has been implemented thanks to Trevor Davis' proposal in PR#18936.
Arguments to ‘loadNamespace()’ which will be ignored because the namespace is already loaded are now noted.
Tanguy Barthelemy and colleagues at the ‘R Dev Day’ following Rencontres R in May 2025 extended the help page of ‘lm()’, fixing PR#18058. As suggested by Thomas Soeiro, such notes were also added to the ‘glm()’, ‘poly()’ and ‘splines::bs()’ and ‘ns()’ pages.
‘rep()’ signals more specific error messages, notably when using both ‘times’ and ‘each’ optional arguments. Fixes PR#18926, thanks to Ella Kaye and collaborators at useR! 2025's ‘R Dev Day’.
Bibliographic citations and references in Rd files can now be auto-generated from bibentries in bibliographic databases in R or BibTeX formats. See ‘RShowDoc("R-exts#Bibliographic-citations-and-references")’ for more information.
‘requireNamespace()’ now throws an error even if the name space is already loaded if it is called with an unmatched argument such as ‘quitely = TRUE’ or ‘quiet = TRUE’ (argument ‘quietly’ cannot be abbreviated as it follows ‘...’).
‘requireNamespace(.., versionCheck = *)’ now shows an error and returns ‘FALSE’ when the package version check is not fulfilled, thanks to Iris Simmons and Trevor Davis's PR#18255. Additionally, the ‘versionCheck’ argument is checked and when invalid, an error is signalled to avoid subsequent confusing error messages.
‘binomial(identity)’ and ‘quasibinomial(identity)’ now work without having to quote the argument.
Three ‘tk*.slaves()’ functions were deprecated in favor of ‘tk*.child()’ which do need Tcl/Tk version ‘8.6’ or higher.
‘gzcon()’ can now decompress a concatenation of compressed streams PR#18887.
‘tools::deparseLatex()’ gains a ‘math’ argument, now used by the default ‘bibstyle’ to format ‘bibentry()’ fields with ‘$...$’ syntax via Rd \eqn markup.
‘requireNamespace(.., versionCheck = *)’ now shows an error and returns ‘FALSE’ when the package version check is not fulfilled, thanks to Iris Simmons and Trevor Davis's PR#18255.
‘loadNamespace(.., versionCheck = *)’ and hence ‘requireNamespace(..)’ now show an error and/or return ‘FALSE’ when the package version check is not fulfilled, thanks to Iris Simmons and Trevor Davis's PR#18522.
Parsing a multi-line string from Rd \Sexpr code no longer doubles the newlines.
‘loadNamespace(.., versionCheck = *)’ and hence ‘requireNamespace(..)’ now show an error and/or return ‘FALSE’ when the package version check is not fulfilled, thanks to Michael Chirico's PR#18522.
Profiling ‘"mle"’ objects (‘stats4’ package) could fail because profile MLE used starting value from full MLE. Now starts from profile MLE from previous step.
‘tools::Rd2HTML()’ detects paragraphs in more cases of \Sexpr-generated Rd code, fixing a regression in R 3.6.0 originally reported by Georgi Boshnakov and later also in PR#18470. An inactive #ifdef block no longer breaks the paragraph.
‘format(<list>)’ calling ‘format.default()’ now calls generic ‘format()’ on each list element (rather than ‘format.default()’).
‘<POSIXlt>[*]’ (re-)setting ‘"balanced"’, fixing PR#18681 comment #7, thanks to Mikael Jagan.
In plain-text help (‘Rd2txt’), an initial newline from an Rd inline \eqn no longer breaks the paragraph.
The R citation now provides a DOI (10.32614/R.manuals): please update your bibliographies accordingly.
‘<complex>[i] <- NA’ now only sets the _real_ part to ‘NA’, consistently with the ‘as.complex(NA)’ behaviour since R 4.4.0; thanks to Mikael Jagan's PR#18918.
Subassigning ‘"POSIXlt"’, i.e., ‘<tdat>[i] <- val’ and ‘<tdat>[[i]] <- val’ now rebalance as they should, thanks to Mikael Jagan's PR#18919.
An initial newline inside an Rd inline \eqn no longer breaks the paragraph in plain-text help (‘tools::Rd2txt’).
‘hist(*, log = "x")’ now works without a warning, thanks to Martin Smith's PR#18921.
The R citation now provides a DOI: please update your bibliographies accordingly.
Credentials for basic HTTP authentication with download method ‘"libcurl"’ can now be provided in a ‘netrc’ file. The path to the file can be specified in ‘options("netrc")’.
In static HTML help, links to vignette files from the default ‘doc/index.html’ page now also work for packages not installed in the default ‘.Library’, thanks to a report by Patrice Kiener.
‘fixInNamespace("<S3method>")’ failed to update the S3 methods table when the generic was not on the search path.
Credentials for basic HTTP authentication with download method ‘"libcurl"’ can now be provided in a ‘netrc’ file. Path to the file can be specified by ‘option()’ ‘netrc’.
‘insertSource()’ now ignores the internal ‘.packageName’ object, avoiding a superfluous message.
‘length(xpr) <- n’ now also works for ‘expression’ vectors, the same as for ‘list’s, i.e., padding with ‘NULL’ entries if the length is increased. Thanks to Mikael Jagan's PR#18917.
Fix for glyph rendering on the ‘quartz()’ device when there is other (“normal”) text drawn on the device. The problem was that the text transformation matrix was not reset so glyphs would be rendered incorrectly (often completely outside the device, i.e., not visible).
‘tools::checkReplaceFuns()’ now deals better with replacement methods _not_ available as regular functions in the namespace.
The ‘precip’ dataset had typos in the names ‘"Bismarck"’ and ‘"Pittsburgh"’ (PR#18895).
New logical ‘option()’ ‘quiet’, defaulting to false, set to ‘TRUE’ by R's command-line option ‘--quiet’ (and similar), now can be switched during an R session. Prompted by Dirk Eddelbuettel's proposal in PR#18913.
It is now possible to convert _to_ ‘"snpc"’ units via, e.g., ‘grid::convertWidth()’, fixing PR#18915. Thanks to Trevor Davis.
‘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’. This also fixes PR#16322.
‘extSoftVersion()[["zstd"]]’ now reports the version of the ‘zstd’ compression library if available, thanks to Trevor Davis' patch proposal in PR#18914.
‘configure’ appends ‘bsdtar’ to the list of command names it tries when
finding a default for ‘TAR’.
‘untar(tar = "internal")’ supports ‘extras = "-P"’ to use unchanged the recorded file paths (as many external ‘tar’ programs do).
‘configure’ appends ‘bsdtar’ to the list of command names it tries when finding a default for ‘TAR’.
‘R CMD check’ when passed a tarball looks at its contents and so no longer derives the package name from the tarball name (which can now be arbitrary).
The cascaded stylesheet ‘R.css’ now adds less vertical white space when rendering Rd files' \itemize, \enumerate, and \describe list \items to HTML.
Where R is used via extensive IDEs such as ‘RStudio’, their maintainers may need to adapt ‘R.css’ files accordingly.
Setting ‘attributes’ on primitive functions is now an error; previously it modified without copying (as noticed by Henrik Bengtsson on the R-devel mailing list).
Relatedly, changing the ‘environment()’ of a primitive function does no longer happen and gives a warning (to become an error, later).
‘<Date> %in% set’ is again as fast as it was before R 4.3.0, _via_ a new S3 method ‘mtfrm.Date’.
‘<character> %in% <Date>’ and vice versa are now documented to work in concordance with ‘==’ and as an exception to the typical ‘match()’ behaviour which relies on “univariate” ‘mtfrm()’ alone.
‘t.test(c(1:3, Inf))’ and similar no longer produce an error but return
a (still not so useful) ‘"htest"’ result, fixing PR#18901, thanks to
Jesse Alderliesten.
‘attr(., "tsp") <- val’ now uses ‘getOption("ts.eps")’ instead of
hardwired ‘1e-5’; consequently, ‘ts(.., ts.eps=*)’ now passes ‘ts.eps’
to the ‘"tsp"’ setting C code; both fixing a long-standing ‘FIXME’.
‘<Date> %in% set’ has become as fast again, as it was before R 4.3.0, via new S3 method ‘mtfrm.Date’. Additionally, ‘<character> %in% <Date>’ and vice versa are documented to work in concordance with ‘==’ and as an exception to the typical ‘match()’ behaviour which relies on “univariate” ‘mtfrm()’ alone.
‘attr(., "tsp") <- val’ now uses ‘getOption("ts.eps")’ instead of hardwired ‘1e-5’; consequently, ‘ts(.., ts.eps=*)’ now passes ‘ts.eps’ to the ‘"tsp"’ setting C code; both fixing a long-standing ‘FIXME’.
‘t.test(c(1:3, Inf))’ and similar no longer produce an error but return a (still not so useful) ‘"htest"’ result, fixing PR#18901, thanks to Jesse Alderliesten.
The cascaded stylesheet ‘R.css’ now adds less vertical white space when rendering Rd files' \itemize, \enumerate, and \describe list \items to HTML.
Where R is used via extensive IDEs such as ‘RStudio’, their maintainers may need to adapt ‘R.css’ files accordingly.
‘R CMD check’ when passed a tarball looks at its contents and so no longer derives the package name from the tarball name (which can now be arbitrary).
‘<Date> %in% set’ has become as fast again, as it was before R 4.3.0, via new S3 method ‘mtfrm.Date’.
The cascaded stylesheet ‘R.css’ now adds less vertical white space when rendering Rd files' \itemize, \enumerate, and \describe list \items to HTML.
Where R is used via extensive IDEs such as ‘RStudio’, their maintainers may need to adapt ‘R.css’ files accordingly.
‘R CMD check’ when passed a tarballl looks at its contents and so no longer derives the package name from the tarball name (which can now be arbitrary).
‘R CMD check’ now handles archives with extension ‘.tar’ or ‘.tar.zstd’ (where ‘zstd’ compression is supported by the R build).
‘R CMD check’ now handles archives with extension ‘.tar’ and ‘.tar.zstd’ (where ‘zstd’ compression is supported by the R build).
‘configure’ appends ‘bsdtar’ to the list of command names it tries when finding a default for ‘TAR’.
The graphics engine version, ‘R_GE_version’, has been bumped to ‘17’ and so packages that provide graphics devices should be reinstalled.
The ‘glyphFont()’ function gains a ‘variations’ argument, which allows variable font axes to be specified, e.g., ‘c(wght = 100)’.
Only the ‘quartz()’ device and Cairo-based graphics devices (but not ‘cairo_pdf()’) support variable font axes so far.
‘text()’ now truncates ‘labels’ to maximum length of ‘x’ and ‘y’ (if it is longer), fixing PR#7084. Thanks to Heather Turner, Ella Kaye, and Philippe Grosjean.
.
‘tcltk::tclVersion()’ now only optionally includes the ‘patch level’, as Tcl full versions can be of the form ‘8.7a5’ or ‘9.0b1’ without three clear components.
The graphics engine version, ‘R_GE_version’, has been bumped to ‘17’ and so packages that provide graphics devices should be reinstalled.
The ‘glyphFont()’ function gains a ‘variations’ argument, which allows variable font axes to be specified, e.g., ‘c(wght = 100)’.
Only Cairo-based graphics devices (but not ‘cairo_pdf()’) support variable font axes so far.
‘attr(., "tsp") <- val’ now uses ‘getOption("ts.eps")’ instead of hardwired ‘1e-5’; consequently, ‘ts(.., ts.eps=*)’ now passes ‘ts.eps’ to the ‘"tsp"’ setting C code; both fixing a long-standing ‘FIXME’.
Tcl/Tk 9 can be used to build package ‘tcltk’: this has become the default in some Linux distributions.
‘as.vector()’ gains a ‘data.frame’ method which returns a simple named list, also clearing a long-standing ‘FIXME’ to enable ‘as.vector(<data.frame>, mode="list")’. This breaks code relying on ‘as.vector(<data.frame>)’ to return the unchanged data frame.
‘text()’ now truncates ‘labels’ to maximum length of ‘x’ and ‘y’ (if it is longer), fixing PR#7084. Thanks to Heather Turner and Ella Kaye.
The internal method of ‘unzip()’ now follows ‘unzip 6.00’ in how it handles extracted file paths which contain ‘"../"’. With thanks to Ivan Krylov.
The graphics engine version, ‘R_GE_version’, has been bumped to ‘17’ and so packages that provide graphics devices should be reinstalled.
The ‘glyphFont()’ function gains a ‘variations’ argument, which allows variable font axes to be specified, e.g., ‘c(wght=100)’.
Only Cairo-based graphics devices (but not ‘cairo_pdf()’) support variable font axes so far.
‘tcltk::tclVersion()’ now only optionally includes the ‘patch level’, as Tcl full versions can be of the the form ‘8.7a5’ or ‘9.0b1’ without three clear components.
‘read.dcf()’ now recognizes lines starting with ‘#’ as comment lines. By Dirk Eddelbuettel, Laurent Gatto and Hugo Gruson.
‘t.test(c(1:3, Inf))’ and similar no longer produce an error but return a (still not so useful) ‘"htest"’ result, fixing PR#18901, thanks to Jesse Alderliesten.
Subsetting ‘"table"’ objects keeps S3 classes more consistently, fixing PR#18845.
When ‘browser()’ is active or when otherwise debugging, R code such as ‘if(TRUE)’ now longer triggers a new browser level, fixing PR#18885 (differently than the fix for PR#15770), with thanks to Ivan Krylov.
‘read.dcf’ now recognizes lines starting with ‘#’ as comment lines. By Dirk Eddelbuettel, Laurent Gatto and Hugo Gruson.
‘prettyNum(*, zero.print={>=1-char}, replace.zero=TRUE)’ now works as documented, thanks to Marttila Mikko and Ivan Krylov's messages on R-devel.
‘pbeta(x, a,b, ..)’ for very large ‘a,b’ no longer returns ‘NaN’ but the correct values (0 or 1, or their logs for ‘log.p = TRUE’). This improves Mathlib's C level ‘bratio()’ and hence also ‘pnbinom()’, etc..
Standalone ‘nmath’ can be built with early-2025 versions of ‘clang’-based compilers such as LLVM ‘clang’ 20, Apple ‘clang’ 17 and Intel ‘icx’ 2025.0.
Tcl/Tk 9 can be used to build package ‘tcltk’: this has become the default in some Linux distributions. *N.B.* several third-party packages currently require Tcl/Tk 8 or even 8.6 without declaring so.
Java detection in ‘javareconf’ could not detect ‘libjvm.*’ in the ‘zero’ variant of the JDK (PR#18884). All valid variants as of JDK 24u are now supported.
‘factanal(.., rotation=*)’ now correctly updates ‘rotmat’, fixing PR#18886.
‘dnbinom(<large>, <muchlarger>, ..)’ now is ‘0’ correctly, instead of ‘NaN’ or ‘Inf’ sometimes.
‘dbinom(<large>, n=Inf, ..)’ is ‘0’ now correctly, instead of ‘NaN’ which also fixes many ‘dnbinom()’ cases, notably those mentioned in PR#16727 comment #5.
Fixing C level “binomial deviance” ‘bd0()’ for extreme arguments (preventing under-/overflow) solves more PR#16727 cases and also prevents some full accuracy loss in such cases for ‘dbinom()’, ‘dnbinom()’, and via ‘dbinom_raw()’ potentially ‘dgeom()’, ‘dhyper()’, ‘dbeta()’, and ‘df()’.
‘signif(1.**e308, digits)’ no longer truncates unnecessarily (but still to prevent overflow to ‘Inf’), fixing PR#18889.
‘prettyNum(*, zero.print={>=1-char}, replace.zero=TRUE)’ now works as documented, thanks to Marttila Mikko and Ivan Krylov's messages on R-devel.
‘pbeta(x, a,b, ..)’ for very large ‘a,b’ no longer returns ‘NaN’ but the correct values (0 or 1, or their logs for ‘log.p = TRUE’). This improves Mathlib's C level ‘bratio()’ and hence also ‘pnbinom()’, etc..
The ‘Pair(x,y)’ construction in the formula interface to paired tests did not work with the ‘subset’ argument, due to the absence of a ‘[.Pair’ method, which has now been added.
‘tools::analyze_license()’ now also computes SPDX license identifiers, thanks to Thierry Onkelinx and LLuís Revilla.
‘signif(1.**e308, digits)’ no longer truncates unnecessarily (but still to prevent overflow to ‘Inf’), fixing PR#18889.
‘prettyNum(*, zero.print={>=1-char}, replace.zero=TRUE)’ now works as documented, thanks to Marttila Mikko and Ivan Krylov's messages on R-devel.
‘pbeta(x, a,b, ..)’ for very large ‘a,b’ no longer returns ‘NaN’ but the correct values (0 or 1, or their logs for ‘log.p = TRUE’). This improves Mathlib's C level ‘bratio()’ and hence also ‘pnbinom()’, etc..
‘signif(1.**e308, digits)’ no longer truncates unnecessarily (but still to prevent overflow to ‘Inf’), fixing PR#18889.
‘pbeta(x, a,b, ..)’ for very large ‘a,b’ no longer returns ‘NaN’ but the correct values (0 or 1, or their logs for ‘log.p = TRUE’). This improves Mathlib's C level ‘bratio()’ and hence also ‘pnbinom()’, etc..
Failures in building the documentation for the base packages, including from parsing their Rd files, are no longer ignored by ‘make docs’.
Dataset ‘LifeCycleSavings’ had a misspelled row name: ‘"Guatamala"’ was corrected to ‘"Guatemala"’.
Standalone ‘nmath’ can be built with early-2025 versions of ‘clang’-based compilers such as LLVM ‘clang’ 20, Apple ‘clang’ 17 and Intel ‘icx’ 2025.0.
Tcl/Tk 9 can be used to build package ‘tcltk’: this has become the default in some Linux distributions. *N.B.* several third-party packages currently require Tcl/Tk 8 or even 8.6 without declaring so.
Standalone ‘nmath’ can be built with early-2025 versions of
‘clang’-based compilers such as LLVM ‘clang’ 20, Apple ‘clang’ 17 and
Intel ‘icx’ 2025.0.
Setting ‘attributes’ on primitive functions is deprecated now and already an error in the development version of R. Changing the ‘environment’ of a primitive does no longer happen and signals a warning.
‘signif(1.**e308, digits)’ no longer truncates unnecessarily (but still to prevent overflow to ‘Inf’), fixing PR#18889.
Fixing C level “binomial deviance” ‘bd0()’ for extreme arguments (preventing under-/overflow) solves more PR#16727 cases and also prevents some full accuracy loss in such cases for ‘dbinom()’, ‘dnbinom()’, and via ‘dbinom_raw()’ potentially ‘dgeom()’, ‘dhyper()’, ‘dbeta()’, and ‘df()’.
‘dbinom(<large>, n=Inf, ..)’ is ‘0’ now correctly, instead of ‘NaN’ which also fixes many ‘dnbinom()’ cases, notably those mentioned in PR#16727 comment #5.
‘dnbinom(<large>, <muchlarger>, ..)’ now is ‘0’ correctly, instead of ‘NaN’ or ‘Inf’ sometimes.
In ‘*.Rd’ help files, the \linkS4class macro now also works for links to other packages via \linkS4class[<pkg>]{<myClass>}, much nicer than the “workaround” \link[<pkg>:<myClass>-class]{<myClass>} necessary in earlier versions of R.
Packages with the new syntax need to formally depend on ‘R >= 4.6.0’.
‘help.start()’ gets a ‘lib.loc’ option and its default for ‘make.packages.html()’ is enhanced to allow, e.g., fast access to ‘.Library’ when that contains only base and recommended packages.
‘factanal(.., rotation=*)’ now correctly updates ‘rotmat’, fixing PR#18886.
A C23 compiler (if available) is now selected by default for compilation of R and packages. R builds can opt out _via_ the ‘configure’ flag ‘--without-C23’, unless the specified or default (usually ‘gcc’) compiler defaults to C23: ‘gcc’ 15 does.
A C23 compiler is known to be selected with ‘gcc’ 13-15, LLVM ‘clang’ 18-20 (and 15 should), Apple ‘clang’ 15-17 and Intel 2024.2-2025.0 (and 2022.2 should).
Current binary distributions on macOS use Apple ‘clang’ 14 and so do not use C23.
‘terms(<formula>, specials = *)’ now treats non-syntactic specials more gracefully, thanks to Mikael Jagan's PR#18568.
The cascaded stylesheet ‘R.css’ now adds less vertical white space when rendering Rd files' \itemize, \enumerate, and \describe list \items to HTML.
Where R is used via extensive IDEs such as ‘RStudio’, their maintainers may need to adapt ‘R.css’ files accordingly.
‘terms(<formula>, specials = *)’ now treats non-syntactic specials more
gracefully, thanks to Mikael Jagan's PR#18568.
Java detection in ‘javareconf’ could not detect ‘libjvm.*’ in the ‘zero’ variant of the JDK (PR#18884). All valid variants as of JDK 24u are now supported.
Standalone ‘nmath’ can be built with early-2025 versions of ‘clang’-based compilers such as LLVM ‘clang’ 20, Apple ‘clang’ 17 and Intel ‘icx’ 2025.0.
Standalone ‘nmath’ can be built again with early-2025 versions of ‘clang’-based compilers such as LLVM ‘clang’ 20, Apple ‘clang’ 17 and Intel ‘icx’ 2025.0.
R on Windows by default uses ‘pkg-config’ for linking against external libraries. This makes it easier to test R and packages with alternative toolchains (such as from Msys2, e.g., testing with LLVM and possibly with sanitizers). It also allows more significant Rtools updates within a single R minor release.
The installer scripts for Windows have been tailored to Rtools45, an update of the Rtools44 toolchain. It is based on GCC 14. The experimental support for 64-bit ARM (‘aarch64’) CPUs is based on LLVM 19. R-devel and R 4.5.x are no longer maintained to be buildable using Rtools44 and it is advised to switch to Rtools45.
The ‘Writing R Extensions’ Texinfo source now contains very experimental annotations for more clearly identifying the API status of C entry points. These annotations are used to produce indices for API, experimental API, and embedded API entry points in the rendered versions. This is very preliminary and may be dropped if a better approach emerges.
Also for Fortran-callable entry points which are part of the API.
‘Sys.setLanguage()’ now works in an ‘LC_ALL=C R’ session on some
platforms, warns about _some_ failures to change the language and gets
an option related to these warning messages.
‘Sys.setLanguage()’ now warns about _some_ failures to change the language.
