This blog is updated daily.
A general description is here.
‘dev.set(1)’ now returns the number and name of the device it opens, as documented, rather than ‘c("null device" = 1)’, thanks to Trevor Davis' report and patch in PR#19281.
The way ‘configure’ tests for C and Objective-C ‘make’ dependencies is now less fragile and works on macOS 27.2.
‘configure’ issues a warning if no way is found to determine C
dependencies, as without this updating a build is unreliable, for
example if ‘Rversion.h’ is changed (and it holds the SVN revision).
(Seen with macOS SDK 27.2.)
‘canCoerce’ did not consider an uncached implicit coercion from the object class to a subclass. Thanks to Hervé Pagès for the report (PR#16423).
‘configure’ issues a warning if no way is found to determine C dependencies, as without this updating a build is unreliable, for example if ‘Rversion.h’ is changed (and it holds the SVN revision). (Seen with macOS SDK 27.2.)
‘validObject(x)’ coerced ‘x’ to simple superclasses unnecessarily. Now validity methods for simple superclasses are called with ‘x’ as the argument. Thanks to Hervé Pagès for the report (PR#17944).
The way ‘configure’ tests for C and ObjC ‘make’ dependencies is now less fragile and works on macOS 27.2.
‘aperm(x, perm)’ and ‘t(x)’ did not support arrays ‘x’ of type ‘"expression"’.
‘delete.response’ did not modify optional attribute ‘dataClasses’.
‘smooth(*, "S")’ now reports a change when the last plateau it splits is unchanged on its right side, so "3RS3R" and "3RSS" are correct now in such cases. Fixes PR#19280 reported with patch by Kevin Ushey.
‘configure’ issues a warning if no way is found to determine C dependencies, as without this updating a build is unreliable, for example if ‘Rversion.h’ is changed (and it holds the SVN revision). (Seen with macOS SDK 27.2.)
‘E <- evalSource(..., cache = FALSE)’ did not create S4 method tables in ‘E’, so ‘insertSource(E, ...)’ did not trace S4 methods. Thanks to Takeshi Arabiki for the report (PR#15242).
‘libzstd’ is required. For R 4.7.0 only, this can be circumvented by configuring with ‘--without-libzstd’.
‘str()’'s output puts a space (‘" "’) after ‘"<some>:"’ and ‘"attr(*, \"<....>\")="’ consistently now, addressing PR#18719 by Dave Slager and Novica Nakov. This was achieved by no longer _pre_pending spaces, such that e.g., ‘str(pi)’'s output no longer starts with a space.
This should have little effect on (‘R CMD check’)s, as ‘R CMD Rdiff’ does _not_ show such differences.
‘extSoftVersion()[["zstd"]]’ now reports the version of the ‘libzstd’ compression library if available, thanks to Trevor Davis' patch proposal in PR#18914.
The X11 on-screen devices now supports history navigation through (customizable) key bindings.
‘R CMD check’ now ‘NOTE’s packages listed more than once in a dependency field other than to give a version range, e.g., ‘Imports: utils, stats, utils’.
Fix for long-standing bug in Cairo raster output that sometimes produced gaps between adjacent filled rectangles (PR#16721). Thanks to Dave Dixon for the original report and to Ella Kaye, George Stagg, Kevin Ushey, and Ivan Krylov for contributions to the fix.
‘capabilities()’ now reports if ‘zstd’ compression is supported.
‘configure’ now reports if ‘zstd’ support was found.
The S4 methods for ‘initialize’ with signature ‘.Object="array"’, ‘.Object="matrix"’, or ‘.Object="ts"’ did not give higher precedence to named components of ‘...’, violating the convention of the default method. Thanks to Dan Murphy for the report (PR#14323).
When interaction terms or offsets were present, ‘drop.terms’ and ‘[.terms’ could return a ‘terms’ object with invalid ‘predvars’ and ‘dataClasses’ attributes. One consequence was that ‘x[-j]’ and ‘x[seq_len(n)[-j]]’ could differ for objects ‘x’ with ‘n’ terms and indices ‘j’ in ‘seq_len(n)’.
The S4 methods for ‘initialize’ with signature ‘.Object="oldClass"’ or ‘.Object=".environment"’ evaluated arguments of type ‘"symbol"’ or ‘"call"’ when dispatching next methods, causing misbehaviour of ‘new(Class, ...)’ with symbols or calls in ‘...’. Thanks to Alexis Sardá-Espinosa for the report (PR#16629).
‘unzip(., unzip = "internal")’ no longer leaks the zip handle on error, thanks to Kevin Ushey, see PR#19233
The internal method of ‘untar()’ now checks the whole path of every member, so that a final component of ‘".."’ or ‘"~"’ can no longer place a link or file outside the extraction directory; rejects hard- and symbolic-link targets restored as file copies, which resolve outside the extraction directory or pass through a symbolic link; applies the ‘umask’ to extracted files; also no longer restores ‘setuid’ or ‘setgid’ permission bits. Similarly, the internal method of ‘unzip()’ no longer extracts through symbolic links below ‘exdir’, both thanks to Kevin Ushey's report and patch in PR#19229.
The internal method of ‘untar()’ now checks the whole path of every member, so that a final component of ‘".."’ or ‘"~"’ can no longer place a link or file outside the extraction directory; rejects hard- and symbolic-link targets restored as file copies, which resolve outside the extraction directory or pass through a symbolic link; applies the umask to extracted files; also no longer restores setuid or setgid permission bits. Similarly, the internal method of ‘unzip()’ no longer extracts through symbolic links below ‘exdir’, both thanks to Kevin Ushey's report and patch in PR#19229.
‘delete.response’ inadvertently converted indices (attributes ‘response’, ‘offset’, ‘specials’) from integer to double. It also replaced ‘NULL’ components of ‘specials’ with ‘logical(0L)’.
‘parse_Rd()’ should no longer leak memory when errors are raised, thanks to Kevin Ushey's report and patch in PR#19184.
‘strsplit(str, perl=TRUE, bytes=TRUE)’ no longer accesses invalid
memory in case ‘str’ is an invalid UTF-8 string, fixing PR#19212,
thanks to Kevin Ushey.
Fixes for ‘grid.pack(row.after=)’ (and ‘row.before’ and ‘col.after’ and ‘col.before’) and ‘grid.pack(dynamic=TRUE)’. Thanks to Athenkosi Nkonyeni for reports.
If ‘wilcox.test(..., exact=TRUE)’'s p-value is close to the 0 or 1 boundaries, the calculation no longer suffers severely from cancellation, thanks to Tasuku Kobayashi's reports and Ahmed Sattar Jabbar's suggestion in PR#19144.
‘strsplit(str, perl=TRUE, bytes=TRUE)’ no longer accesses invalid memory in case ‘str’ is an invalid UTF-8 string, fixing PR#19212, thanks to Kevin Ushey.
‘wilcox.test(x, exact=FALSE, correct = k)’'s p-value computation got a
missing ‘dnorm(z)’ factor, and so did the 2-sample case, in addition to
more fixes.
Further, if ‘wilcox.test(.., exact=TRUE)’'s p-value is close to the 0 or 1 boundaries, the calculation no longer suffers severely from cancellation, thanks to Tasuku Kobayashi's reports and Ahmed Sattar Jabbar's suggestion in PR#19144.
‘wilcox.test(x, exact=FALSE, correct = k)’'s p-value computation got a missing ‘dnorm(z)’ factor, and so did the 2-sample case, in addition to more fixes.
When tracing rematched S4 methods, ‘trace’ could insert a call ‘trace(.local, tracer=, exit=, ...)’ with improper ‘tracer’ and ‘exit’ components. Thanks to Hao Wang for the report (PR#18707).
Fix for ‘grid.pack(..., row.after=)’ (and ‘row.before’ and ‘col.after’ and ‘col.before’). Thanks to Athenkosi Nkonyeni for report.
‘trace’ with non-‘NULL’ ‘exit’ replaced rematched S4 method definitions with non-rematched ones that evaluated ‘exit’ twice, first on ‘.local’ exit and again on method exit.
In plain-text help (‘Rd2txt’), paragraphs are again recognized even when started with a non-indented Rd comment, fixing a regression in R 4.4.0.
‘rhyper(N, m, n, k)’ now switches to the “large” scenario when ‘m + n’ is larger than ‘.Machine$integer.max’, preventing integer overflow, thanks to Jonathan Blood's report on R-devel.
Fix long standing (Fortran compiler optimization related) bug in ‘nlminb’ with constraints, thanks to Kasper Kristensen's PR#19086 report and patch.
Fix for PR#19100: ‘seq.int’ was not handling non-vector ‘along.width’ arguments properly. Thanks to Mitchell O'Hara-Wild.
Wrappers now duplicate even a wrapped object that might be shared before returning a read-only pointer. This prevents cached read-only pointers from becoming invalid. Reported by Ivan Krylov.
‘dummy.coef()’ becomes more robust to non-syntactic variable names, fixing PR#18468. Thanks to Bill Dunlap and ‘R Dev Day’ participants Vincent Arel-Bundock, Cynthia Huang, Tina Rozsos and Marina Marinelli.
Now ‘PROTECT()’ in ‘SubassignTypeFix’, fixing PR#19110 thanks to Kevin Ushey.
‘writeChar()’ in a multibyte locale counts characters and bytes consistently and no longer overflows, thanks to Kevin Ushey's report and patch in PR#19112.
‘dim(a) <- vec’ now checks for too large ‘prod(vec)’, thanks to Kevin Ushey's report and patch in PR#19109.
Tweaks (including to the parsers) for the C23 behaviour (preserving ‘const’) of ‘strchr’, ‘strrchr’ and ‘strstr’. (By Brian Ripley and Duncan Murdoch.)
‘make check-devel’ now works without recommended packages.
‘<matrix>[[i, j]]’ with negative ‘i’ occasionally gives no error but accesses ‘previous content’; thanks to Kevin Ushey's report and very simple fix in PR#19116.
Quartz device now correctly draws long paths (work-around for Quartz built-in stroker breaking long paths). Thanks to R Dev Day @ useR! 2026 contributors, notably Tomek Gieorgijewski, report in PR#18680.
‘strptime(ch, "...%OS<n>...")’ now disregards contiguous digits in "<n>", for symmetry with ‘strftime()’, fulfilling Frederick Eaton's wish in PR#17209, thanks to a patch by Suharto Anggono.
‘strptime()’ now also returns ‘NA’ for out of range ‘"%OS"’ and a correct error message in some wrong multibyte cases, fixing PR#19117 comment #1 and PR#19122 by Michael Chirico; additionally, some overflow to ‘Inf’ times no longer result in ‘NA’.
‘strptime("0", "%w")’ in a ‘"C"’ locale now works in valid cases, returning ‘NA’ for invalid week numbers (‘"%U"’ or ‘"%W"’), fixing PR#19124 thanks to Michael Chirico's report and notably Suharto Anggono's analysis, also correctly fixing PR#15195.
‘ksmooth(x,y, x.points=NULL)’ now returns an empty (x,y) pair instead of crashing R, fixing PR#19153.
Additionally, also by Adam Berkeš, ‘x <- rep(999,0); ksmooth(x, x, x.points = 1)’ no longer writes out of bounds, fixing PR#19171. Ditto for ‘ksmooth(x, x, n.points = 0)’, PR#19219.
‘besselI(1, 1e11)’ and ‘besselK(..)’ now signal a warning and return ‘NaN’ instead of typically segfaulting, fixing PR#19175 thanks to Ben Bolker.
Further, ‘besselK(1, -1e11)’ and similar warn about too large ‘|nu|’, returning ‘NaN’ rather than segfaulting, fixing PR#19196 thanks to Adam Berkeš.
‘text.default(.., col = numeric(0))’ and similar no longer segfault in "instrumented" versions of R, fixing PR#19178 thanks to Jiang Yuancheng's ‘fusion-fuzz’ and Ivan Krylov.
‘R CMD rtags’ (on Unix-alikes) no longer fails from a bad escape if ‘sh’ is ‘bash’ or ‘busybox’.
‘capabilities("X11")’ no longer incorrectly returns ‘TRUE’ on a Unix-alike where X11 is not actually available when built by a C compiler without C23 ‘enum’ base types, thanks to Trevor Davis' report and patch in PR#19180.
‘predict(smooth.spline(..), deriv = -99)’ and similar invalid ‘deriv’ values now signal errors instead of segfaulting, thanks to Adam Berkeš' report and proposal in PR#19190.
‘format(x, width = 2^31 -1)’ for an non-ascii character ‘x’ such as ‘x = "\u00e9"’ now signals an error as the required width is too large, rather than segfaulting, thanks to Adam Berkeš' report in PR#19188.
‘influence.measures()’ inadvertently wasn't updated along with ‘dffits()’, ‘dfbetas()’, ‘covratio()’. PR#19167 by Amal Tawfik.
Long stringed error messages are now protected from premature garbage collection, fixing PR#19210, reported and analyzed by Yuancheng Jiang.
‘isoreg(numeric(0))’ no longer returns unallocated component ‘yc’, fixing PR#19224 thanks to Kevin Ushey.
‘KalmanLike(1:5, list(1,2))’ and similar no longer segfault, fixing PR#19217 thanks to Kevin Ushey and Adam Berkeš.
‘path.expand("~")’ and similar now should work correctly on Windows when the user name is not in ASCII and neither ‘%HOME%’ nor ‘%USER%’ environment variables are set, fixing PR#18949 thanks to the report and patch from Ivan Krylov and Mauricio Vargas's R Dev Day work.
‘file.copy(*, date=TRUE)’ no longer opens files for exclusive access when copying the file time. Consequently, the time _is_ copied now and concurrent attempts to open the source file should work reliably, thanks to Kevin Ushey's report and patch in PR#19187.
Long stringed error messages are now protected from premature garbage
collection, fixing PR#19210, reported and analyzed by Yuancheng Jiang.
‘trace’ with non-‘NULL’ ‘exit’ replaced rematched S4 method definition with non-rematched one that evaluated ‘exit’ twice, first on ‘.local’ exit and again on method exit.
Long stringed error messages are now protected from premature garbage collection, fixing PR#19210, reported and analyzed by Yuancheng Jiang.
‘KalmanLike(1:5, list(1,2))’ and similar no longer segfault, fixing PR#19217 thanks to Kevin Ushey and Adam Berkeš.
‘isoreg(numeric(0))’ no longer returns unallocated component ‘yc’, fixing PR#19224 thanks to Kevin Ushey.
‘ksmooth(x,y, x.points=NULL)’ now returns an empty (x,y) pair instead of crashing R, fixing PR#19153.
Additionally, also by Adam Berkeš, ‘x <- rep(999,0); ksmooth(x, x, x.points = 1)’ no longer writes out of bounds, fixing PR#19171. Ditto for ‘ksmooth(x, x, n.points = 0)’, PR#19219.
Dynamic HTML help pages are postprocessed to link function arguments in the Usage section to their documentation in the Arguments section.
‘strsplit(str, perl=TRUE, bytes=TRUE)’ no longer accesses invalid memory in case ‘str’ is an invalid UTF-8 string, fixing PR#19212, thanks to Kevin Ushey.
The long-standing environment variable ‘PKG_BUILD_DIR’
to control where ‘R CMD INSTALL’ unpacks source tarballs is now documented in the R Internals manual. This is supplemented by ‘PKG_BUILD_DIR_BARE’ to use ‘PKG_BUILD_DIR’ as the unpacking directory without adding a random path component.
Long stringed error messages are now protected from premature garbage collection, fixing PR#19210, reported and analyzed by Yuancheng Jiang.
‘influence.measures()’ inadvertently wasn't updated along with ‘dffits()’, ‘dfbetas()’, ‘covratio()’. PR#19167 by Amal Tawfik.
‘wilcox.test(x, exact=FALSE, correct = k)’'s p-value computation got a missing ‘dnorm(z)’ factor, and so did the 2-sample case, in addition to more fixes.
Further, if ‘wilcox.test(.., exact=TRUE)’'s p-value is close to the 0 or 1 boundaries, the calculation no longer suffers severely from cancellation, thanks to Tasuku Kobayashi's reports and Ahmed Sattar Jabbar's suggestion in PR#19144.
‘path.expand("~")’ and similar now should work correctly on Windows
when the user name is not in ASCII and neither ‘%HOME%’ nor ‘%USER%’
environment variables are set, fixing PR#18949 thanks to the report and
patch from Ivan Krylov and Mauricio Vargas's R Dev Day work.
‘besselI(1, 1e11)’ and ‘besselK(..)’ now signal a warning and return ‘NaN’ instead of typically segfaulting, fixing PR#19175 thanks to Ben Bolker.
Further, ‘besselK(1, -1e11)’ and similar warn about too large ‘|nu|’, returning ‘NaN’ rather than segfaulting, fixing PR#19196 thanks to Adam Berkeš.
‘path.expand("~")’ and similar now should work correctly on Windows when the user name is not in ASCII and neither ‘%HOME%’ nor ‘%USER%’ environment variables are set, fixing PR#18949 thanks to the report and patch from Ivan Krylov and Mauricio Vargas's R Dev Day work.
‘predict(smooth.spline(..), deriv = -99)’ and similar invalid ‘deriv’ values now signal errors instead of segfaulting, thanks to Adam Berkeš' report and proposal in PR#19190.
‘format(x, width = 2^31 -1)’ for an non-ascii character ‘x’ such as ‘x = "\u00e9"’ now signals an error as the required width is too large, rather than segfaulting, thanks to Adam Berkeš' report in PR#19188.
‘file.copy(*, date=TRUE)’ no longer opens files for exclusive access when copying the file time. Consequently, the time _is_ copied now and concurrent attempts to open the source file should work reliably, thanks to Kevin Ushey's report and patch in PR#19187.
‘capabilities("X11")’ no longer incorrectly returns ‘TRUE’ on a Unix-alike where X11 is not actually available when built by a C compiler without C23 ‘enum’ base types, thanks to Trevor Davis' report and patch in PR#19180.
Added protection against out-of-range values for graphical parameters ‘lty’, ‘lend’, and ‘ljoin’ in ‘graphics’ function calls (PR#19170). Thanks to Adam Berkeš.
‘cairo_pdf()’ no longer silently ignores ‘grid.newpage()’ calls after drawing a ‘glyphGrob’ containing two or more glyphs inside a masked ‘viewport’. Thanks to Trevor Davis' patch proposal in PR#19075.
‘R CMD rtags’ (on Unix-alikes) no longer fails from a bad escape if ‘sh’ is ‘bash’ or ‘busybox’.
The ‘anova(.., test = tt)’ methods for ‘"glm"’ and ‘"glmlist"’ now do partially match a string ‘tt’, as documented, thanks to Amal Tawfik's report and patch in PR#19179.
‘text.default(.., col = numeric(0))’ and similar no longer segfault in "instrumented" versions of R, fixing PR#19178 thanks to Jiang Yuancheng's ‘fusion-fuzz’ and Ivan Krylov.
‘chol2inv()’ gains optional switch ‘diag.only’ for shortcutting ‘diag(chol2inv(.))’, wished for with a patch and reproducible analysis in PR#19177 by Adam Marstrand.
‘besselI(1, 1e11)’ and ‘besselK(..)’ now signal a warning and return ‘NaN’ instead of typically segfaulting, fixing PR#19175 thanks to Ben Bolker.
‘ksmooth(x,y, x.points=NULL)’ now returns an empty (x,y) pair instead of crashing R, fixing PR#19153.
Additionally, also by Adam Berkeš, ‘x <- rep(999,0); ksmooth(x, x, x.points = 1)’ no longer writes out of bounds, fixing PR#19171.
‘strptime("0", "%w")’ in a ‘"C"’ locale now works in valid cases, returning ‘NA’ for invalid week numbers (‘"%U"’ or ‘"%W"’), fixing PR#19124 thanks to Michael Chirico's report and notably Suharto Anggono's analysis, also correctly fixing PR#15195.
‘gzcon’ ‘rawConnection’s now can flush and are writable thanks to Ivan Krylov's analysis and patch in PR#19172.
‘strptime(ch, "...%OS<n>...")’ now disregards contiguous digits in
"<n>", for symmetry with ‘strftime()’, fulfilling Frederick Eaton's
wish in PR#17209, thanks to a patch by Suharto Anggono.
‘strptime("0", "%w")’ in a ‘"C"’ locale now works in valid cases,
fixing PR#19124 thanks to Michael Chirico.
The ‘as.list()’ method for class ‘"function"’ now checks its argument and behaves better for a fake "function", fixing PR#19173 thanks to Mark Padgham's report and patch proposal.
‘path.expand("~")’ and similar now should work correctly on Windows when the user name is not in ASCII and neither ‘%HOME%’ nor ‘%USER%’ environment variables are set, fixing PR#18949 thanks to the report and patch from Ivan Krylov and Mauricio Vargas's R Dev Day work.
‘strptime(ch, "...%OS<n>...")’ now disregards contiguous digits in "<n>", for symmetry with ‘strftime()’, fulfilling Frederick Eaton's wish in PR#17209, thanks to a patch by Suharto Anggono.
‘strptime("0", "%w")’ in a ‘"C"’ locale now works in valid cases, fixing PR#19124 thanks to Michael Chirico.
‘glm(*, wtol = <positive>)’ treats very small weights as zeros via ‘glm.fit()’ and ‘glm.control()’, also with new optional ‘tol’ argument, more similar to ‘lm()’, but not equivalently, e.g., for computing ‘AIC()’.
Atypical ‘lm()’ calls now work better, e.g., ‘fm <- lm(rock); update(fm, . ~ . - perm)’ and similar cases, fixing PR#17463 and PR#17476 and part of PR#1861, thanks to Ben Tyner, Elin Waring, Kevin Tappe and other Bugzilla contributors.
‘strptime()’ now also returns ‘NA’ for out of range ‘"%OS"’ and a
correct error message in some wrong multibyte cases, fixing PR#19117
comment #1 and PR#19122 by Michael Chirico; additionally, some overflow
to ‘Inf’ times no longer result in ‘NA’.
‘x[logi]’, with ‘logi’ a logical index, now warns if ‘length(x)’ is not a multiple of ‘length(logi)’, fixing PR#19155 thanks to several participants in two R Dev Days and the R Sprint in 2026.
‘strptime()’ now also returns ‘NA’ for out of range ‘"%OS"’ and a correct error message in some wrong multibyte cases, fixing PR#19117 comment #1 and PR#19122 by Michael Chirico; additionally, some overflow to ‘Inf’ times no longer result in ‘NA’.
‘glm(rock)’ and ‘glm(data = rock)’ work like ‘lm(..)’ now.
‘confint(<free1way>, what = "OVL")’ now includes one for shift effect confidence intervals including zero.
‘summary(<free1way>)’ renames p-values to ‘Pr(..)’ and thus ‘printCoefmat’ recognises them.
‘glm()’ with zero weights now provides correct AIC and ‘logLik()’, fixing PR#16008, thanks to Bill Dunlap and Mauricio Vargas.
‘glm(.., wtol = <positive>)’ treats very small weights as zeros now, similarly to ‘lm()’ via ‘glm.control()’; correct AIC and logLik() for this case, fixing PR#16008, thanks to Bill Dunlap and Mauricio Vargas.
‘summary(<free1way>)’ renames p-values to ‘Pr(..)’ and
thus ‘printCoefmat’ recognises them.
‘ksmooth(x,y, x.points=NULL)’ now returns an empty (x,y) pair instead of crashing R, fixing PR#19153.
The translations have been updated by the R Translation Team, with the patch generated by Gergely Daroczi. This includes a major contribution of over 4000 Arabic translations from Abdulrahman Alswaji.
‘tools::add_datalist()’ now returns a logical (invisibly, instead of ‘NULL’), indicating if it did add a ‘data/datalist’ file (addressing parts of PR#18015).
‘R CMD build’ now excludes an obsolete ‘data/datalist’ file when the package uses ‘LazyData’, and reports when it added one.
‘lm(.., weights = *)’ gets a new optional argument ‘wtol’, defaulting to 0 currently for back compatibility. Setting ‘wtol = 1e-30’ fixes PR#17475 thanks to the ‘R Dev Day’ 2025 participants Kelly Bodwin et al.
Atypical ‘lm()’ calls now work better, e.g., ‘fm <- lm(rock); update(fm, . ~ . - perm)’ and similar cases, fixing PR#17463 and PR#17476 and part of PR#1861, thanks to Ben Tyner, Elin Waring, Kevin Tappe and other bugzilla contributors.
‘pkg2HTML(dir="pkg")’ and other ‘tools’ consuming the ‘Rd_db()’ of a source package, e.g., the ‘undoc()’ QC function (PR#18960, thanks to Michael Chirico), no longer fail from processing ‘DESCRIPTION’-based Rd macros such as \packageTitle when the current directory is not the source package's root directory.
Quartz device now correctly draws long paths (work-around for Quartz built-in stroker breaking long paths). Thanks to R Dev Day @ useR! 2026 contributors, notably Tomek Gieorgijewski, report in PR#18680.
Fix for PR#19035 (piping ‘postscript()’ output) thanks to Jeroen Ooms and Ivan Krylov.
‘strptime("0", "%w")’ in a ‘"C"’ locale now works in valid cases, fixing PR#19124 thanks to Michael Chirico.
‘drop1.glm()’ misbehaved for models fitted with ‘y = FALSE’ (PR#19128,
Amal Tawfik).
‘confint(<free1way>, parm)’ returned confidence intervals for all parameters when ‘parm’ requested a subset.
‘summary(<free1way>)’ renames p-values to ‘Pr()’ and thus ‘printCoefmat’ recognises them.
‘drop1.glm()’ misbehaved for models fitted with ‘y = FALSE’ (PR#19128, Amal Tawfik).
‘confint(<free1way>, parm)’ returned confidence intervals for all parameters when ‘parm’ requested a subset.
‘summary(<free1way>)’ renames p-values to ‘Pr(..)’ and thus ‘printCoefmat’ recognises them.
‘strptime(ch, "...%OS<n>...")’ now disregards contiguous digits in "<n>", for symmetry with ‘strftime()’, fulfilling Frederick Eaton's wish in PR#17209, thanks to a patch by Suharto Anggono.
‘rfree1way’ also accepts ‘offset’ terms equal to the number of simulated observations, allowing to sample from more complex models.
‘data()’ will accept text files with further extension ‘.zst’ or ‘.zstd’, and read them on builds with ‘zstd’ support.
‘free1way(, MPL_Jeffreys = TRUE)’ implements maximum penalised likelihood estimation with Jeffreys prior for all model parameters simultaneously, along with Wald-type inference.
‘drop1.glm()’ misbehaved for models fitted with ‘y = FALSE’ (PR#19128, Amal Tawfik).
‘confint(<free1way>, parm)’ returned confidence intervals for all parameters when ‘parm’ requested a subset.
‘summary(<free1way>)’ renames p-values to ‘Pr()’ and thus ‘printCoefmat’ recognises them.
‘drop1.glm()’ misbehaved for models fitted with ‘y = FALSE’ (PR#19128, Amal Tawfik).
Wrapper objects make sure data pointers remain once obtained remain
valid as long as a wrapper object is reachable. Reported by Ivan
Krylov.
Wrappers now duplicate even a wrapped object that might be shared before returning a read-only pointer. This prevents cached read-only pointers from becoming invalid. Reported by Ivan Krylov.
‘data()’ will accept text files with further extension ‘.zst’ or ‘.zstd’, and read them on builds with ‘zstd’ support.
‘strptime()’ now also returns ‘NA’ for out of range ‘"%OS"’ and a correct error message in some wrong multibyte cases, fixing PR#19117 comment #1 and PR#19122 by Michael Chirico; additionally, some overflow to ‘Inf’ times no longer result in ‘NA’.
The Sweave syntax definition objects ‘SweaveSyntaxNoweb’ and ‘SweaveSyntaxLatex’ now each have their own detailed help page.
Changed ‘model.frame.glm()’ to use same logic as ‘model.frame.lm()’ (PR#19036, Isaac Gravestock).
Fix cases where ‘M’ and ‘X’ matrices could be spanning the same subspace in ‘mauchly.test()’, ‘sphericity()’ ‘anova.mlm()’, ‘anova.mlmlist()’. (PR#16166, originally reported in 2015 by Florent Aubry, essentially analyzed Feb. 2020 just before the corona crisis, triaged 2026 by Michael Chirico)
Fix cases where ‘M’ and ‘X’ matrices could be spanning the same subspace in ‘mauchly.test()’, ‘anova.mlm’, ‘anova.mlmlist’. (PR#16166, originally reported in 2015 by Florent Aubry, essentially analyzed Feb. 2020 just before the corona crisis, triaged 2026 by Michael Chirico)
In ‘nls’, follow suggestion by Ben Bolker to reorder named vectors for ‘lower’ and ‘upper’ arguments to match names of the starting values (PR#18415). This has been extended so that you can now specify _only_ the parameters that you wish to constrain, and also so that it works when parameters are in the form of named lists.
‘dummy.coef()’ becomes more robust to non-syntactic variable names,
fixing PR#18468. Thanks to Bill Dunlap and ‘R Dev Day’ participants
Vincent Arel-Bundock, Cynthia Huang, Tina Rozsos and Marina Marinelli.
‘dummy.coef()’ becomes more robust to non-syntactic variable names, fixing PR#18468. Thanks to Bill Dunlap and ‘R Dev Day’ participants Vincent Arel-Bundock, Cynthia Huang, Tina Rozsos and Marina Marinelli.
Tweaks (including to the parsers) for the C23 behaviour (preserving ‘const’) of ‘strchr’, ‘strrchr’ and ‘strstr’. (By Brian Ripley and Duncan Murdoch.)
‘make check-devel’ now works without recommended packages.
‘<matrix>[[i, j]]’ with negative ‘i’ occasionally gives no error but accesses ‘previous content’; thanks to Kevin Ushey's report and very simple fix in PR#19116.
Deprecated (for more than 9 years!) functions ‘linearizeMlist’, ‘listFromMlist’, and ‘showMlist’ and the ‘"MethodsList"’ class for S4 method handling were removed from package ‘methods’. Deprecated functions ‘balanceMethodsList’, ‘emptyMethodsList’, ‘insertMethod’, ‘makeMethodsList’, ‘mergeMethods’, ‘MethodsList’, ‘MethodsListSelect’, and ‘SignatureMethod’ were made defunct, as were the ‘"MethodsList"’ branches of functions ‘assignMethodsMetaData’, ‘finalDefaultMethod’, and ‘MethodAddCoerce’.
‘dim(a) <- vec’ now checks for too large ‘prod(vec)’, thanks to Kevin Ushey's report and patch in PR#19109.
‘writeChar()’ in a multibyte locale counts characters and bytes consistently and no longer overflows, thanks to Kevin Ushey's report and patch in PR#19112.
Now ‘PROTECT()’ in ‘SubassignTypeFix’, fixing PR#19110 thanks to Kevin Ushey.
New higher-order functions ‘Compose()’, ‘Funcall()’ and ‘Partial()’.
New functions ‘find_calls()’, ‘find_calls_in_package_code()’, ‘gsub_with_transformed_matches()’ and ‘system_with_capture()’ in package ‘tools’.
Fix segfault in ‘postscript()’ and ‘pdf()’ if set ‘papersize’ option to very long string (PR#19108). Thanks to Kevin Ushey.
Fix segfault in ‘grid::gpar()’ if set ‘fontfamily’ longer than 200 characters (PR#19107). Thanks to Kevin Ushey.
‘use()’ gets an argument ‘pos’ with a help example showing how to attach a “chain” of packages to ‘search()’.
Wrappers now duplicate even a wrapped object that might be shared
before returning a read-only pointer. This prevents cached read-only
pointers from becoming invalid. Reported by Ivan Krylov.
Wrapper objects make sure data pointers remain once obtained remain valid as long as a wrapper object is reachable. Reported by Ivan Krylov.
Fixing ‘rbinom()’, see PR#19049 below, to reproduce old results needs ‘RNGkind()’ to get a new ‘binom.kind’ argument and, e.g. ‘RNGversion("4.6")’ keeps previous behaviour.
‘rbinom()’'s BTPE algorithm is fixed thanks to Kate Hudson's findings and report in PR#19049. To ensure reproducibility, ‘RNGkind()’ gets new argument ‘binom.kind’.
Fix long standing (Fortran compiler optimization related) bug in ‘nlminb’ with constraints, thanks to Kasper Kristensen's PR#19086 report and patch.
Fix long standing (Fortran compiler optimization related) bug in
‘nlminb’ with constraints, thanks to Kasper Kristensen's PR#19086
report and patch.
Package ‘methods’ provides a method for implicit generic function ‘rcond’ with signature ‘c(x="ANY", norm="missing")’ so that ‘rcond(x)’ does not break after ‘setGeneric("rcond")’.
New low-level function ‘.OBJSXP()’ enables deparsing of non-S4 ‘"object"’ type objects.
In ‘methods’, ‘as()’ now correctly coerces S4 objects to S4
superclasses extending old-style classes, instead of returning only the
S3 part.
‘dummy.coef()’ becomes more robust to non-syntactic variable names, fixing PR#18468. Thanks to Bill Dunlap and ‘R Dev Day’ participants Vincent Arel-Bundock, Cynthia Huang, Tina Rozsos and Marina Marinelli.
‘summary(<aov>)’ for an almost perfect fit now warns analogously to ‘summary(<lm>)’, using the same check. Fixes fixes PR#18341 thanks to ‘R Dev Day @ useR! 2026’ participants Deepansh Khurana, Stefan Linner and Oscar de Leon.
In ‘methods’, ‘as()’ now correctly coerces S4 objects to S4 superclasses extending old-style classes, instead of returning only the S3 part.
New low-level function ‘.OBJSXP()’ enables deparsing of non-S4
‘"object"’ type objects.
Fix for PR#19100: ‘seq.int’ was not handling non-vector ‘along.width’
arguments properly. Thanks to Mitchell O'Hara-Wild.
Fix for PR#19100: ‘seq.int’ was not handling non-vector ‘along.width’ arguments properly. Thanks to Mitchell O'Hara-Wild.
Wrappers now duplicate even a wrapped object that might be shared before returning a read-only pointer. This prevents cached read-only pointers from becoming invalid. Reported by Ivan Krylov.
‘summary(<aov>)’ for an almost perfect fit now warns analogously to ‘summary(<lm>)’, using the same check. Fixes fixes PR#18341 thanks to R Dev Day members Deepansh Khurana, Stefan Linner and Oscar de Leon.
‘R CMD build’ now excludes an obsolete ‘data/datalist’ file when the package uses ‘LazyData’.
‘tools::texi2pdf()’ now reports BibTeX warnings; in particular, missing references are now noted by ‘R CMD check’ when re-building PDF vignettes.
In ‘nls’, follow suggestion by Ben Bolker to reorder named vectors for ‘lower’ and ‘upper’ arguments to match names of coefficients (PR#18415).
Fix for PR#19100: ‘seq.int’ was not handling non-vector ‘along.width’ arguments properly. Thanks to Mitchell O'Hara-Wild.
New low-level function ‘.OBJSXP()’ enables deparsing of non-S4 ‘"object"’ type objects.
‘rhyper(N, m, n, k)’ now switches to the “large” scenario when ‘m + n’ is larger than ‘.Machine$integer.max’, preventing integer overflow, thanks to Jonathan Blood's report on R-devel.
‘structure()’ now deprecates the old “special” substitute ‘attributes’' names ‘".Dim", ".Dimnames", ".Names", ".Tsp", ".Label"’ in favour of the respective ‘"dim", "dimnames", "names", "tsp", "levels"’ names.
‘tools::texi2pdf()’ now reports BibTeX warnings.
‘cor(*, method="kendall")’ and ‘cov()’ now use the fast N*log(N) algorithm suggested in PR#18934 and offered by David Simcha on R-devel in 2010. With thanks to the R Dev Day @ Nantes 2026 contributors, notably Charles Bordet and Alexis Derumigny.
‘read.dcf()’ and ‘write.dcf()’ now treat DCF files (such as package ‘DESCRIPTION’ and repository ‘PACKAGES’ files) as UTF-8, as required by the Debian control file format. ‘read.dcf()’ returns values in UTF-8 and ‘write.dcf()’ always writes UTF-8 regardless of the session locale; bytes which are not valid UTF-8 are preserved by escaping them as ‘<xx>’ rather than being re-encoded via a ‘Encoding’ field. As a consequence, the ‘useBytes’ argument of ‘write.dcf()’ is ignored, and non-UTF-8 ‘DESCRIPTION’ files (e.g. those declaring ‘Encoding: latin1’) are no longer re-encoded on reading.
‘binom.test()’ and ‘poisson.test()’ can now at least optionally compute central two-sided p-values which match the confidence intervals. Same for ‘fisher.test()’ in the 2 by 2 case and ‘mantelhaen.test()’ in the 2 by 2 by K case if an exact conditional test is performed.
Fix for PR#19094; fill/stroke path based on text with ‘col=NA’. Thanks to Trevor Davis.
Fix for PR#18842; better documentation and warnings when specify inappropriate ‘col’ to ‘filled.contour()’. Thanks to Darakhshan Nehal.
In plain-text help (‘Rd2txt’), paragraphs are again recognized even when started with a non-indented Rd comment, fixing a regression in R 4.4.0.
‘binom.test()’ and ‘poisson.test()’ can now at least optionally compute central two-sided p-values which match the confidence intervals.
In ‘methods’, ‘setOldClass(..., S4Class = )’ no longer warns about undefined subclasses when the supplied S4 class inherits from a class union.
Fix long standing (Fortran compiler optimization related) bug in ‘nlminb’ with constraints, thanks to Kasper Kristensen's PR#19086 report and patch.
‘trace()’ now works for functions whose S3 class attribute has more than one string, e.g., ‘S7’ generics and methods. Thanks to Hadley Wickham for the patch.
‘as(object, to) <- value’ no longer treats ‘to’ as a class union when it was registered via ‘setOldClass()’.
‘merge.data.frame’ now returns the correct column names when at least one of the merged data frames has zero rows and at least one of the merged data frames has only one column, fixing PR#18930. Thanks to David Molnar and Gabriel Becker.
Fix long standing (fortran compiler optimization related) bug in ‘nlminb’ with constraints, thanks to Kasper Kristensen's PR#19086 report and patch.
Overly long ‘dyn.load()’ error messages (C level ‘dlerror()’), should
no longer corrupt its state, thanks to Ivan Krylov's PR#19029 report
and patch.
Fix for PR#18874; ‘"null"’ widths/heights in ‘grid’ layouts are zero if widths/heights to allocate are zero. (Thanks to Maciej Nasinski and Trevor Davis.)
Fix for PR#19055; additional documentation for ‘embedFonts()’. (Thanks to Chris Danek and Ivan Krylov.)
Zeros in the ‘prob’ argument to ‘power.free1way.test’ triggered an error and are now handled correctly.
Overly long ‘dyn.load()’ error messages (C level ‘dlerror()’), should no longer corrupt its state, thanks to Ivan Krylov's PR#19029 report and patch.
The border case ‘zapsmall(x, digits=Inf)’ where ‘x’ contains an ‘Inf’ entry no longer returns all ‘NaN’ but rather ‘x’. The improved help page now has more non-default examples.
The data part of ‘getGenerics()’ listed package names for generic functions defined in more than one package. Now it lists generic function names, as intended. Thanks to Michael Chirico for report and patch proposal (PR#19080).
‘as.matrix(<POSIXlt>)’ again produces a _numeric_ matrix, and the ‘c()’ and subassignment methods for ‘POSIXlt’ objects work correctly more often, e.g., without a ‘"tzone"’ attribute, back porting a few of the PR#18989 fixes from R-devel, both thanks to Suharto Anggono.
The LaTeX class ‘jss’ bundled in ‘share/texmf/tex/latex/jss.cls’ has been updated to work with ‘hyperref’ version 7.01q (2026/04/24).
Plain-text (and legacy HTML) conversion for a simple Rd \eqn{} now handles \geq, \leq, \neq and \ne in addition to \ge and \le (PR#19070).
‘abbreviate(<non-ASCII>)’ now works better, using ‘iswlower()’ and ‘*upper()’ to treat “wide” characters, thanks to Kevin's PR#19058.
‘cut(1:11, {})’ now signals an error for the invalid ‘breaks’, fixing PR#19057, thanks to Kevin Ushey.
‘all(<symbol>)’ signals an error now, as some similar coercions; previously, the coercion of the symbol resulted in ‘NULL’ internally, raised a warning, and could access illegal memory; thanks to Kevin Ushey's PR#19054.
‘stl()’ now checks its 3 x 3 tuning parameters on the R level; ‘stl(*, s.window = 0)’ now “works” instead dumping core, ‘stl(*, s.window = 1)’ “works” correctly, too. Also, the ‘summary()’ method mentions the robustness ‘weights’ only if any robustness iterations happened.
Further, ‘stl()’ is now based on C code, translated from previous Fortran, triggered by a flang 22 compiler optimization bug (‘-O2’).
Border case ‘zapsmall(x, digits=Inf)’ where ‘x’ has an ‘Inf’ entry, no longer returns all ‘NaN’ but rather ‘x’. Help page improved, also with more non-default examples.
‘wilcox.test(x, exact=FALSE, correct = k)’'s p-value computation got a missing ‘dnorm(z)’ factor, and so did the 2-sample case, in addition to more fixes.
Data part of ‘getGenerics()’ listed package names for generic functions defined in more than one package. Now it lists generic function names, as intended. Thanks to Michael Chirico for report and patch proposal (PR#19080).
‘as.matrix(<POSIXlt>)’ again produces a _numeric_ matrix, thanks to Suharto Anggono's PR#19084.
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 (PR#18898).
Data part of ‘getGenerics()’ listed package names for generic functions
defined in more than one package. Now it lists generic function names,
as intended. Thanks to Michael Chirico for report and patch proposal
(PR#19080).
‘strat_ratio != 1’ in ‘rfree1way’ did not work as advertised.
Zeros in ‘prob’ argument to ‘power.free1way.test’ triggered an error and are now handled correctly.
Data part of ‘getGenerics()’ listed package names for generic functions defined in more than one package. Now it lists generic function names, as intended. Thanks to Michael Chirico for report and patch proposal (PR#19080).
Exclude patterns from ‘.Rbuildignore’ are now processed _before_ preparing the package directory for the tarball, avoiding redundant file copies from the source directory (PR#17549). In particular, when a source package ‘foo/’ folder contains broken symlinks matching an exclude pattern, ‘R CMD build foo’ now succeeds, omitting these, thus fixing PR#18186. (Thanks to Ivan Krylov and others, notably Jenny Bryan and R Dev Day @ useR! 2025 contributors.)
When ‘browser()’ is active or when otherwise debugging, R code such as ‘if(TRUE)’ no longer triggers a new browser level, fixing PR#18885 (differently than the fix for PR#15770), with thanks to Ivan Krylov.
In ‘methods’, ‘as()’ now correctly coerces S4 objects to S4 superclasses extending old-style classes, instead of returning only the S3 part.
Installing R (creating ‘libR.pc’) no longer fails with a ‘sed’ error when the new ‘--package-metadata’ linker flag is involved; an ‘s’-command delimiter other than ‘:’ was needed (PR#19060, thanks to Jeroen Ooms and Dirk Eddelbuettel).
Data part of ‘getGenerics()’ listed package names for generic functions defined in more than one package. Now it lists generic function names, as intended. Thanks to Michael Chirico for report and patch proposal (PR#19080).
Exclude patterns from ‘.Rbuildignore’ are now processed _before_ preparing the package directory for the tarball, avoiding redundant file copies from the source directory (PR#17549). In particular, when a source package ‘foo/’ folder contains broken symlinks matching an exclude pattern, ‘R CMD build foo’ now succeeds, omitting these, thus fixing PR#18186. (Thanks to Ivan Krylov and others, notably Jenny Brian and R Dev Day @ useR! 2025 contributors.)
‘as.matrix(<POSIXlt>)’ again produces a _numeric_ matrix, thanks to Suharto Anggono's PR#19084.
When a source package ‘foo/’ folder contains broken symlinks, ‘R CMD build foo’ now succeeds, omitting these, thus fixing PR#18186, thanks to Ivan Krylov and others, notably Jenny Brian and R Dev Day @ useR! 2025 contributors.
Overly long ‘dyn.load()’ error messages (C level ‘dlerror()’), should no longer corrupt its state, thanks to Ivan Krylov's PR#19029 report and patch.
‘wilcox.test(x, exact=FALSE, correct = k)’'s p-value computation got a missing ‘dnorm(z)’ factor, and so did the 2-sample case, in addition to more fixes.
‘fisher.test()’ gains a new option ‘pval.only = TRUE’ for the 2x2 exact case, with substantial speed gains in the case of large counts.
‘abbreviate(<non-ASCII>)’ now works better, using ‘iswlower()’ and
‘*upper()’ to treat “wide” characters, thanks to Kevin's PR#19058.
‘all(<symbol>)’ signals an error now, as some similar coercions;
previously, the coercion of the symbol resulted in ‘NULL’ internally,
raised a warning, and could access illegal memory; thanks to Kevin
Ushey's PR#19054.
‘abbreviate(<non-ASCII>)’ now works better, using ‘iswlower()’ and ‘*upper()’ to treat “wide” characters, thanks to Kevin's PR#19058.
‘all(<symbol>)’ signals an error now, as some similar coercions; previously, the coercion of the symbol resulted in ‘NULL’ internally, raised a warning, and could access illegal memory; thanks to Kevin Ushey's PR#19054.
‘wilcox.test()’ gains new optional argument ‘digits.zap’, _and_ the default for argument ‘digits.rank’ is changed from ‘Inf’ to ‘7’, addressing bugs PR#18035 and PR#19071, in order to deal with both ties of almost equal numbers and almost zeros of differences.
‘wilcox.test(x, exact=FALSE, correct = k)’'s p-value computation got a missing ‘dnorm(z)’ factor.
‘as.POSIXct(x)’ for ‘POSIXlt’ object ‘x’ with ‘.Machine$integer.max - x$year < 1900’ no longer suffers from C level integer overflow, thanks to Suharto Anggono's patch for PR#19038. Currently, this does not apply when the ‘"internal"’ code for date-time conversion and printing is in use, as e.g., on Windows and macOS.
Border case ‘zapsmall(x, digits=Inf)’ where ‘x’ has an ‘Inf’ entry, no longer returns all ‘NaN’ but rather ‘x’. Help page improved, also with more non-default examples.
‘tools::Rd2txt()’ now replaces ‘---’ and ‘--’ by Unicode dashes when the output encoding is UTF-8.
Plain-text (and legacy HTML) conversion for a simple Rd \eqn{} now handles \geq, \leq, \neq and \ne in addition to \ge and \le (PR#19070).
Plain-text (and legacy HTML) conversion for a simple Rd \eqn{} now handles \geq and \leq in addition to \ge and \le (PR#19070).
‘.leap.seconds’ again has no ‘"tzone"’ attribute, as in earlier R versions, fixing PR#19072 thanks to Suharto Anggono.
‘as.POSIXct(x)’ for ‘POSIXlt’ object ‘x’ with ‘.Machine$integer.max - x$year < 1900’ no longer suffers from C level integer overflow, thanks to Suharto Anggono's patch for PR#19038.
‘stl()’ now checks its 3 x 3 tuning parameters on the R level; ‘stl(*, s.window = 0)’ now “works” instead dumping core, ‘stl(*, s.window = 1)’ “works” correctly, too. Also, the ‘summary()’ method mentions the robustness ‘weights’ only if any robustness iterations happened.
Further, ‘stl()’ is now based on C code, translated from previous Fortran, triggered by a flang 22 compiler optimization bug (‘-O2’).
The ‘as.data.frame()’ methods for atomic ‘vector’ classes get an optional switch ‘validRN’, with default true to fix PR#19059 and false for some back compatibility, still allowing data frames in construction to contain ‘NA’s in row names.
‘cut(1:11, {})’ now signals an error for the invalid ‘breaks’, fixing
PR#19057, thanks to Kevin Ushey.
For ‘x <- <large-POSIXlt>’, for some boundary cases with ‘x$sec - floor(x$sec)’ close to 1, ‘c(x)’ could become one second ahead of ‘x’ in R 4.6.0; subassignments such as ‘x[i] <- val’ have improved, thanks to suggestions by Suharto Anggono in PR#18989.
‘all(<symbol>)’ signals an error now, as some similar coercions; previously, the coercion of the symbol resulted in ‘NULL’ internally, raised a warning, and could access illegal memory; thanks to Kevin Ushey's PR#19054.
‘cut(1:11, {})’ now signals an error for the invalid ‘breaks’, fixing PR#19057, thanks to Kevin Ushey.
‘stl()’ now checks its 3 x 3 tuning parameters on the R level; ‘stl(*, s.window = 0)’ now “works” instead dumping core, ‘stl(*, s.window = 1)’ “works” correctly, too. Also, the ‘summary()’ method mentions the robustness ‘weights’ only if any robustness iterations happened.
‘all(<symbol>)’ signal an error now, as other such coercions; previously, the coercion of the symbol to logical resulted in ‘NULL’ internally, raised a warning, and could access illegal memory; thanks to Kevin Ushey's PR#19054.
‘as.data.frame.vector(<row.names_w/_NA>)’ now signals the same error as ‘data.frame()’, fixing Hervé Pagès' PR#19059. From Suharto Anggono's comment #c4, it gives the same error also when ‘row.names = RN’ explicitly, where ‘RN’ has ‘NA’s.
‘abbreviate(<non-ASCII>)’ now works better, using ‘iswlower()’ and ‘*upper()’ to treat “wide” characters, thanks to Kevin's PR#19058.
In an R installation without NLS, e.g., from ‘--disable-nls’ configuration, the C ‘ngettext()’ replacement now also keeps plural for “0 things”, thanks to Michael Chirico's PR#19065.
‘as.data.frame.vector(<row.names_w/_NA>)’ now signals the same error as ‘data.frame()’, fixing Hervé Pagès' PR#19059.
‘cut(1:11, {})’ now signals an error for the invalid ‘breaks’, fixing PR#19057, thanks to Kevin Ushey.
The LaTeX class ‘jss’ bundled in ‘share/texmf/tex/latex/jss.cls’ has been updated to work with ‘hyperref’ version 7.01q (2026/04/24).
Building R, e.g., on Ubuntu 26.04, using ‘--package-metadata’ needs to use a different ‘sed’ separator than ‘:’, fixing PR#19060, thanks to Jeroen Ooms and Dirk Eddelbuettel.
‘cut(1:11, {})’ now signals an error for the invalid ‘breaks’, fixing PR#19060, thanks to Kevin Ushey.
The ‘"tzone"’ attribute of ‘"POSIXlt"’ objects should no longer depend on earlier calls, fixing PR#19005 thanks to Ivan Krylov, a patch by Suharto Anggono and reports of “Non-deterministic POSIXlt tzone in Europe/London ..” on R-devel.
Condition classes used internally for signaling some errors are now documented in ‘?conditions’.
For ‘x <- <large-POSIXlt>’, ‘c(x)’, subsetting (‘[’, ‘[[’) and subassignment such as ‘x[i] <- val’ now work again mostly, thanks to suggestions by Suharto Anggono in PR#18989.
When subassigning ‘"POSIXlt"’, e.g., ‘<dat>[i] <- v’, ‘v’ is now converted to the time zone of ‘dat’, before being assigned, see PR#18919.
New function ‘cumvar()’ to calculate cumulative variances.
_Object not found_ errors now signal error conditions of class ‘objectNotFoundError’. _Function not found_ errors signal conditions of the subclass ‘functionNotFoundError’.
‘rmultinom()’ now uses Kahan's arithmetic instead of ‘LDOUBLE’ to avoid platform dependency, thanks to Mauricio Vargas' proposal in PR#18693.
‘intToUtf8(<negative>)’ now returns ‘NA’ and no longer accesses invalid
memory, thanks to Kevin Ushey's report with patch in PR#19052.
.
When subassigning ‘"POSIXlt"’, e.g., ‘<dat>[i] <- v’, ‘v’ is now converted to the time zone of ‘dat’, before being assigned.
‘intToUtf8(<negative>)’ now returns ‘NA’ and no longer accesses invalid memory, thanks to Kevin Ushey's report with patch in PR#19052.
When ‘file.choose()’ is terminated with an ‘EOF’, it now signals an error rather than returning garbage, thanks to Kevin Ushey's report and patch in PR#19053,
Subassigning ‘"POSIXlt"’, i.e., ‘<tdat>[i] <- val’ and ‘<tdat>[[i]] <- val’ now rebalance as they should; thanks mostly to Mikael Jagan's PR#18919.
