This blog is updated daily.
A general description is here.
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.
This update was mainly bug fixes but contained a barely documented major change. The set of BLAS routines had 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.
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 will.
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.
There are 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 throw an error if that evaluates to ‘NA’.
‘structure(NULL, <name> = <val>)’ is now defunct.
Setting ‘attributes’ on primitive functions is an error now; 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).
Setting ‘attributes’ on primitive functions is deprecated now and already an error in the development version of R.
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 (as used on Windows), 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.
Defining ‘R_INCLUDE_BOOLEAN_H’ to ‘0’ before including headers ‘R.h’ or ‘Rinternals.h’ (or any other header which includes ‘R_ext/Boolean.h’) stops the inclusion of header ‘R_ext/Boolean.h’ which `defines' constants ‘TRUE’, ‘FALSE’, ‘true’, ‘false’ and the type ‘bool’ which some package maintainers wish to avoid.
Note that the last three are keywords in C23 and C++11 so cannot be avoided entirely. However, with commonly-used compilers they can be masked by a macro of the same name, often with a warning.
Defining ‘R_INCLUDE_BOOLEAN_H’ to ‘0’ before including headers ‘R.h’ or ‘Rinternals.h’ (or any other header which includes ‘R_ext/Boolean.h’) stops the inclusion of header ‘R_ext/Boolean.h’ which `defines' constants ‘TRUE’, ‘true’, ‘false’ and the type ‘bool’ which some package maintainers wish to avoid.
Note that the last three are keywords in C23 and C++11 so cannot be avoided entirely. However, with commonly-used compilers they can be masked by a macro of the same name, often with a warning.
‘str()’ now shows more via ‘format()’ for external pointers.
‘factanal()’ now works correctly also, e.g., for ‘GPArotation’, ‘oblimin()’ rotations, fixing PR#18417, thanks to Coen Bernaards and others.
‘R CMD check’ now reports further ‘clang’ warnings including ‘-Wkeyword-macro’. This is most commonly seen for the C23 keywords ‘bool’, ‘true’ and ‘false’, but is also seen for ‘nullptr’ (C23 and C++11). Masking these by macros _may_ generate correct code (but not always) and always results in confusing-to-read code.
Setting ‘attributes’ on primitive functions is an error now; previously, it modified without copying, as noticed by Henrik Bengtsson on the R-devel mailing list.
‘selectMethod(f, ..)’ now keeps the function name if the function belongs to a group generic and the method is for the generic.
‘model.frame()’ produces more informative error messages in some cases when variables in the formula are not found, thanks to Ben Bolker's PR#18860.
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 is no longer maintained to be buildable using Rtools44 and it is advised to switch to Rtools45.
‘R CMD check’ now also reports bad symbols in package shared objects linked in from local static libraries (PR#18789).
Building with the bundled (and old) version of ‘libintl’ is deprecated and now gives a ‘configure’ warning. This should be selected only if neither the OS's ‘libc’ (as on GNU Linux) nor an external ‘libintl’ library provide suitable functions.
Instead install ‘libintl’ from a recent version of GNU gettext (available for macOS) or use ‘configure’ option ‘--disable-nls’.
The ability to use the bundled version may be removed as soon as R 4.5.1.
‘R CMD check’ gains option ‘--run-demo’ to check demo scripts analogously to tests. This includes a check for undeclared package dependencies: it can also be enabled separately by setting the environment variable ‘_R_CHECK_PACKAGES_USED_IN_DEMO_’ to a true value (as done by ‘R CMD check --as-cran’).
‘isSymmetric(<matrix>)’ gains a new option ‘trans = "C"’; when set to non-default, it tests for “simple” symmetry of complex matrices.
Header ‘R_exts/Utils.h’ no longer contains a declaration for ‘F77_SUB(interv)’. This is intended to be called from Fortran and was wrongly declared: ‘LOGICAL’ in Fortran corresponds to ‘int *’ not ‘Rboolean *’.
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 is no longer maintained to be buildable using Rtools44 and it is advised to switch to Rtools45.
‘trace(coerce, ..)’ now works correctly, fixing PR#18823 thanks to Mikael Jagan.
