This blog is updated daily.
A general description is here.
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.
‘as.integer(rl)’ and hence ‘as.raw(rl)’ now work for a ‘list’ of ‘raw(1)’ elements, as proposed by Michael Chirico's PR#18696.
‘graphics’' ‘grid()’ gains optional argument ‘nintLog’.
New functions ‘check_package_urls()’ and ‘check_package_dois()’ in package ‘tools’ for checking URLs and DOIs in package sources.
New ‘head()’ and ‘tail()’ methods for class ‘"ts"’ time series, proposed by Spencer Graves on R-devel.
New ‘qr.influence()’ function, a “bare bones” interface to the ‘lm.influence()’ leave-one-out diagnostics computations; wished for in PR#18739.
Package ‘citation()’ results auto-generated from the package metadata now also provide package DOIs for CRAN and Bioconductor packages.
New function ‘grepv()’ identical to ‘grep()’ except for the default ‘value = TRUE’.
‘methods(<pkg>:::<genfun>)’ now does report methods when neither the generic nor the methods have been exported.
‘pdf()’ gains an ‘author’ argument to set the corresponding metadata field, and logical arguments ‘timestamp’ and ‘producer’ to optionally omit the respective metadata. (Thanks to Edzer Pebesma.)
‘grDevices::glyphInfo()’ gains a ‘rot’ argument to allow per-glyph rotation. (Thanks to Daniel Sabanes Bove.)
Package ‘tools’ now exports functions ‘CRAN_current_db()’, ‘CRAN_aliases_db()’, ‘CRAN_rdxrefs_db()’, ‘CRAN_archive_db()’, and ‘CRAN_authors_db()’.
Package ‘tools’ now exports functions ‘R()’ and ‘parse_URI_reference()’.
Package ‘tools’ now exports functions ‘base_aliases_db()’ and ‘base_rdxrefs_db()’.
It is now possible to set the background color for row and column names in the data editor on Windows (‘Rgui’).
‘Rterm’ on Windows now accepts input lines of unlimited length.
‘file.info()’ on Windows now provides file owner name and domain.
‘Sys.info()’ on Windows now provides current user domain.
‘findInterval()’ gets new arguments ‘checkSorted’ and ‘checkNA’ which allow skipping relatively costly checks; related to PR#16567.
‘pnorm(x)’ underflows more gracefully.
‘get(nam, env)’ now signals a _classed_ error, ‘"getMissingError"’, as “subclass” of ‘"missingArgError"’ where the latter is used also in similar situations, e.g., ‘f <- function(x) exp(x); try(f())’ .
The set operations now avoid the ‘as.vector()’ transformation for same-kind apparently vector-like operands.
‘md5sum()’ can be used to compute an MD5 hash of a raw vector of bytes by using the ‘bytes=’ argument instead of ‘files=’. The two arguments are mutually exclusive.
Added function ‘sha256sum()’ in package ‘tools’ analogous to ‘md5sum()’ implementing the SHA-256 hashing algorithm.
The ‘xtfrm()’ method for class ‘"AsIs"’ is now considerably faster thanks to a patch provided by Ivan Krylov.
The ‘merge()’ method for data frames will no longer convert row names used for indexing using ‘I()’, which will lead to faster execution in cases where ‘sort = TRUE’ and ‘all.x’ and/or ‘all.y’ are set to ‘TRUE’.
The ‘methods’ package internal function ‘.requirePackage()’ now calls ‘requireNamespace(p)’ instead of ‘require(p)’, hence no longer adding packages to the ‘search()’ path in cases methods or class definitions are needed. Consequently, previous workflows relying on the old behaviour will have to be amended by adding corresponding ‘library(p)’ calls.
More R-level messages use a common format containing ‘"character string"’ for more consistency and less translation work.
‘available.packages()’ and ‘install.packages()’ get an optional switch ‘cache_user_dir’, somewhat experimentally.
The ‘sunspot.month’ data have been updated to Oct 2024; because of recalibration also historical numbers are changed, and we keep the previous data as ‘sunspot.m2014’ for reproducibility.
The ‘quartz()’ device now supports alpha masks. Thanks to George Stagg, Gwynn Gebeyhu, Heather Turner, and Tomek Gieorgijewski.
The ‘print()’ method for date-time objects (‘POSIX.t’) gets an optional ‘digits’ argument for _fractional_ seconds, passed to improved ‘format.POSIXlt()’; consequently, ‘print(<date.time>, digits = n)’ allows to print fractions of seconds.
‘install.packages()’ and ‘download.packages()’ download packages simultaneously using ‘libcurl’, significantly reducing download times when installing or downloading multiple packages.
Status reporting in ‘download.file()’ has been extended to report the outcome for individual files in simultaneous downloads.
The Rd \link macro now allows markup in the link text when the topic is given by the optional argument, e.g., ‘\link[=gamma]{\eqn{\Gamma(x)}}’.
If ‘La_library()’ is empty, ‘sessionInfo()’ still reports ‘La_version()’ when available.
‘seq.int(from, to, by, ....)’ when |by| = 1 now behaves as if ‘by’ was omitted, and hence returns ‘from:to’, possibly integer.
‘seq.Date(from, to, by, ....)’ and ‘seq.POSIXt(..)’ now also work when ‘from’ is missing and sufficient further arguments are provided, thanks to Michael Chirico's report, patch proposal in PR#17672 and ‘R Dev Day’ contributions.
The ‘Date’ method also works for ‘seq(from, to)’, when ‘by’ is missing and now defaults to ‘"1 days"’.
It is now documented (and tested) that the ‘by’ string may be _abbreviated_ in both ‘seq’ methods.
Both methods return or keep internal type ‘"integer"’ more consistently now. Also, ‘as.POSIXct({})’ is internally integer.
‘duplicated()’, ‘unique()’, and ‘anyDuplicated()’ now also work for class ‘expression’ vectors.
New function ‘use()’ to use packages in R scripts with full control over what gets added to the search path. (Actually already available since R 4.4.0.)
There is some support for ‘zstd’ compression of tarballs in ‘tar()’ and ‘untar()’. (This depends on OS support of ‘libzstd’ or by ‘tar’.)
‘print(summary(<numbers>))’ gets new optional argument ‘zdigits’ to allow more flexible and consistent (double) rounding. The current default ‘zdigits = 4L’ is somewhat experimental. Specifying both ‘digits = *, zdigits = *’ allows behaviour independent of the global ‘digits’ option.
The ‘format()’ method for ‘"difftime"’ objects gets a new back compatible option ‘with.units’.
A ‘summary()’ method for ‘"difftime"’ objects which prints nicely, similar to those for ‘"Date"’ and ‘"POSIXct"’.
‘unique()’'s default method now also deals with ‘"difftime"’ objects.
‘optimize(f, *)’ when ‘f(x)’ is not finite says more about the value in its ‘warning’ message. It no longer replaces ‘-Inf’ by the largest _positive_ finite number.
The documentation of ‘gamma()’ and ‘is.numeric()’ is more specific, thanks to the contributors of PR#18677.
New dataset ‘gait’ thanks to Heather Turner and Ella Kaye, used in examples.
New datasets ‘penguins’ and ‘penguins_raw’ thanks to Ella Kaye, Heather Turner, and Kristen Gorman.
The bundled BLAS and LAPACK sources have been updated to those shipped as part of January 2025's LAPACK 3.12.1.
It is intended that this will be the last update to BLAS and LAPACK in the R sources. Those building R from source are encouraged to use external BLAS and LAPACK and this will be required in future.
This update was mainly bug fixes but contained a barely documented major change. The set of BLAS routines has been unchanged since 1988, so throughout R's history. This update introduced new BLAS routines ‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. This means that BLAS implementations are no longer interchangeable.
To work around this, R can be configured with option ‘--with-2025blas’ which arranges for the 2025 BLAS additions to be compiled into ‘libRlapack’ (the internal LAPACK, not built if an external LAPACK is used).
This option allows the continuation of the practice of swapping the BLAS in use by symlinking ‘lib/libRblas.*’. It has the disadvantage of using the reference BLAS version of the 2025 routines whereas an enhanced BLAS might have an optimized version (OpenBLAS does as from version 0.3.29).
Windows builds currently use the internal LAPACK and by default the internal BLAS: notes on how to swap the latter _via_ ‘Rblas.dll’ are in file ‘src/extra/blas/Makefile.win’.
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-16 and Intel 2024.2 (and 2022.2 should).
Current binary distributions on macOS use Apple ‘clang’ 14 and so do not use C23.
The minimum ‘autoconf’ requirement for a maintainer build has been increased to ‘autoconf’ 2.72.
Building the HTML and Info versions of the R manuals now requires ‘texi2any’ from Texinfo 6.1 or later.
Failures in building the manuals under ‘doc’ now abort the installation, removing any file which caused the failure.
Control of symbol visibility is now supported on macOS (the previous check only worked on ELF platforms).
There is now support for installing the debug symbols for recommended packages on macOS: see ‘REC_INSTALL_OPT’ in file ‘config.site’.
‘configure’ is now able to find an external ‘libintl’ on macOS (the code from an older GNU gettext distribution failed to try linking with the macOS Core Foundation framework).
Both building R and installing packages use the C compiler in C23 mode.
‘is.R()’ is defunct. Environment variable ‘_R_DEPRECATED_IS_R_’ no longer has any effect.
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’, ‘inheritedSubMethodLists’, ‘insertMethod’, ‘insertMethodInEmptyList’, ‘makeMethodsList’, ‘mergeMethods’, ‘MethodsList’, ‘MethodsListSelect’, and ‘SignatureMethod’ were made defunct, as were the ‘"MethodsList"’ branches of functions ‘assignMethodsMetaData’, ‘finalDefaultMethod’, and ‘MethodAddCoerce’.
‘getMethods(*, table = TRUE)’ is deprecated.
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 (as on Alpine Linux) provide suitable functions.
Instead install ‘libintl’ from a recent version of GNU gettext or use ‘configure’ option ‘--disable-nls’.
The deprecated ‘xfig()’ graphics device has been removed.
Packages are now installed using C23 where supported by the OS and R build.
Packages using R's compiler settings can ask *not* to use C23 _via_ including ‘USE_C17’ in ‘SystemRequirements’ or can be installed by ‘R CMD INSTALL --use-C17’. (Some packages ignore these settings in their ‘configure’ script or when compiling in sub-directories of ‘src’, as will those using a ‘src/Makefile’.)
Source installs now report the package version in the log.
There is preliminary support for C++26 with GCC >= 14, Apple ‘clang++’ >= 16 and LLVM ‘clang++’ >= 17.
The non-API and hidden entry points ‘Rf_setIVector’, ‘Rf_setRVector’ and ‘Rf_setSVector’ have been removed.
The internal code for changing the parent of an environment now signals an error if the new parent is not an environment or if the change would create a cycle in the parent chain.
‘SET_TYPEOF’ now signals an error unless the old and new types have compatible memory structure and content. Use of ‘SET_TYPE’ in package C code should be avoided and may be deprecated in the near future. It is better to allocate an object of the desired type in the first place.
The set of LAPACK (double and complex) routines declared in the headers ‘R_ext/Lapack.h’ and ‘R_ext/Applic.h’ has been extended, mostly to routines actually in use by packages.
Memory allocation messages now use the (non-SI notation) ‘"Mb"’, ‘"Gb"’ , ..., and ‘"Mbytes"’ strings as _arguments_ instead of as part of the (translatable format) string. This is one step for PR#18297; from Henrik Bengtsson.
Header ‘R_ext/Constants.h’ (included by ‘R.h’) now always includes header ‘float.h’ or ‘cfloat’ for constants such as ‘DBL_MAX’.
Strict R headers are now the default. This removes the legacy definitions of ‘PI’, ‘Calloc’, ‘Realloc’ and ‘Free’: use ‘M_PI’, ‘R_Calloc’, ‘R_Realloc’ or ‘R_Free’ instead.
The deprecated and seemingly never-used S-compatibility macros ‘F77_COM’ and ‘F77_COMDECL’ have been removed from header ‘R_ext/RS.h’.
The ‘enum’ ‘Rboolean’ defined in header ‘R_ext/Boolean.h’ now has a fixed underlying type of ‘int’ on platforms whose C compiler supports this.
This is a C23 feature (taken from C++11) and also supported in all C standards by some versions of ‘clang’ (from LLVM and Apple) and (with a warning when using ‘-pedantic’) by GCC when in C17 mode.
A fair amount of code has assumed this: it may be changed to a smaller type in future. In particular, as standard compilers do not check the validity of assignment to an ‘enum’, it has been possible to assign ‘NA_INTEGER’ to an ‘Rboolean’ variable, coerce it to ‘int’ and recover the value.
If there were a platform which used an underlying type of a different size this would be an ABI-breaking change (but we are unaware of any such platform).
Header ‘R_ext/Boolean.h’ now ensures that a ‘bool’ type is available either as a keyword (C23 and C++) or by including the C99 header ‘stdbool.h’. This is being used internally in R to replace ‘Rboolean’ by ‘bool’.
There are a new functions ‘asRboolean’ and ‘asBool’, variants of ‘asLogical’ more suited to converting logical arguments to ‘Rboolean’ or to ‘bool’. They require a length-one input and throw an error if that evaluates to ‘NA’.
Header ‘R_exts/Error.h’ now ensures that ‘Rf_error’ and similar are given a ‘noreturn’ attribute when used from C++ under all compilers.
Header ‘R_exts/Utils.h’ no longer contains a declaration for ‘77_SUB(interv)’. This is intended to be called from Fortran and was wrongly declared: ‘LOGICAL’ in Fortran corresponds to ‘int *’ not ‘Rboolean *’.
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 now for Fortran-callable entry points which are part of the API.
‘Writing R Extensions’ has a new section ‘Moving into C API compliance’ to help package authors move away from using non-API endpoints. This section will continue to be updated as work on clarifying and tightening the C API continues.
New API function ‘R_mkClosure’. This checks that its arguments are valid and should be used instead of ‘allocSExp(CLOSXP’ followed by ‘SET_FORMALS’, ‘SET_BODY’, and ‘SET_CLOENV’.
New API functions ‘R_ClosureFormals’, ‘R_ClosureBody’, and ‘R_ClosureEnv’ for extracting closure components. The existing functions ‘R_ClosureExpr’ and ‘R_BytecodeExpr’ have also been added to the API.
New API function ‘R_ParentEnv’ corresponding to R's ‘parent.env()’.
Further non-API entry points have been added to those reported by ‘R CMD check’: ‘COMPLEX0’, ‘ddfind’, ‘DDVAL’, ‘ENSURE_NAMEDMAX’, ‘ENVFLAGS’, ‘FRAME’, ‘HASHTAB’, ‘INTERNAL’, ‘IS_ASCII’, ‘IS_UTF8’, ‘LEVELS’, ‘NAMED’, ‘PRSEEN’, ‘RDEBUG’, ‘REAL0’, ‘Rf_findVarInFrame3’, ‘SET_BODY’, ‘SET_CLOENV’, ‘SET_FORMALS’, ‘SET_PRSEEN’, ‘SET_RDEBUG’, ‘STRING_PTR’, ‘SYMVALUE’, and ‘VECTOR_PTR’. Any declarations for these in public header files will be removed in the near future, and they will be hidden where possible.
Some ‘R CMD check’ ‘NOTE’s on the use of non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points.
Additional non-API entry points have been added to those reported by ‘R CMD check’: ‘IS_LONG_VEC’, ‘PRCODE’, ‘PRENV’, ‘PRVALUE’, ‘R_nchar’, ‘Rf_NonNullStringMatch’, ‘R_shallow_duplicate_attr’, ‘Rf_StringBlank’, ‘SET_TYPEOF’, ‘TRUELENGTH’, ‘XLENGTH_EX’, and ‘XTRUELENGTH’.
Enable defining ‘R_NO_REMAP_RMATH’ and calling ‘Rf_*()’ as has been documented in ‘Writing R Extensions’ for a while, fixing PR#18800 thanks to Mikael Jagan and Suharto Anggono.
‘R_GetCurrentSrcref(skip)’ now skips calls rather than ‘srcref’s, consistent with counting items in the ‘traceback()’ display. If ‘skip == NA_INTEGER’, it searches for the first ‘srcref’, starting at the current evaluation state and proceeding through the call stack; otherwise, it returns the ‘srcref’ of the requested entry from the call stack.
‘R CMD INSTALL’ (and hence ‘check’) now compile C++ code with ‘-DR_NO_REMAP’.
‘Writing R Extensions’ has been revised to describe the remapped entry points, for with the ‘Rf_’ prefix remains optional when used from C code (but is recommended for new C code).
‘R CMD check --as-cran’ notes bad parts in the ‘DESCRIPTION’ file's URL fields.
‘R CMD check’ now reports more warnings on long-deprecated/obsolete Fortran features reported by ‘gfortran -Wall’. For hints on how to modernize these, see <https://fortranwiki.org/fortran/show/Modernizing+Old+Fortran>.
Since almost all supported R versions now use UTF-8, ‘R CMD check’ no longer by default reports on marked UTF-8 or Latin-1 strings in character data. Set environment variable ‘_R_CHECK_PACKAGE_DATASETS_SUPPRESS_NOTES_’ to a false value for the previous behaviour.
‘tools::checkDocFiles()’ notes more cases of usage documentation without corresponding \alias.
‘R CMD check’ with a true value for environment variable ‘_R_CHECK_BASHISMS_’ checks more thoroughly, including for ‘bash’ scripts and bashisms in components of ‘autoconf’-generated ‘configure’ scripts.
‘R CMD check’ gains option ‘--run-demo’ to check demo scripts analogously to tests.
‘R CMD build’ now supports ‘--compression=zstd’ on platforms with sufficient support for ‘zstd’.
‘tools::texi2pdf(..., texinputs=<paths>)’ now _pre_pends the specified <paths> to ‘TEXINPUTS’. When building R itself (‘doc/NEWS.pdf’ and base vignettes) or package manuals using ‘R CMD Rd2pdf’, it is ensured that this R's ‘Rd.sty’ takes precedence over any other (incompatible) versions in default “texmf trees”.
‘tools::Rd2latex()’ no longer outputs an ‘\inputencoding{utf8}’ line by default; such a declaration is obsolete since LaTeX 2018-04-01.
‘update_pkg_po()’ now copies ‘.mo’ files to the ‘translation’ package even if a ‘DESCRIPTION’ file exists, thanks to Michael Chirico fixing PR#18694.
Auto-generated ‘citation()’ entries no longer include (additional) URLs in the ‘note’ field (PR#18547).
‘as.data.frame.list()’ gets a new option ‘new.names’ and now preserves ‘NA’ names, thus fixing the ‘format()’ method for data frames, and also bug PR#18745. Relatedly, the ‘format()’ method gets an option ‘cut.names’.
‘stem()’ formats correctly also in cases where rounding up, e.g., from 9.96 to 10 needs more digits; thanks to Ella Kaye and Kelly Bodwin, fixing PR#8934 during ‘R Dev Day’ at useR!2024.
Additionally, ‘stem(x)’ now works normally also when ‘length(x) == 1’.
‘tools’' ‘toTitleCase()’ now works better, fixing PR#18674, thanks to Shannon Pileggi, Sarah Zeller, Reiko Okamoto, and Hugo Gruson's ‘R Dev Day’ effort.
Printing matrices (typically with many rows and or columns) now also omits columns when desirable according to option ‘max.print’, or argument ‘max’, respectively. This is primarily the work of Lorena Abad, Ekaterina Akimova, Hanne Oberman, Abhishek Ulayil, and Lionel Henry at the ‘R Dev Day’, thus fixing PR#15027.
‘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.
Printing ‘ls.str()’ now shows ‘"<missing>"’ even when R's language setting is not English.
‘xyTable()’ now handles and reports ‘NA’s fixing PR#18654. Thanks to Heather Turner and Zhian Kamvar for report and patch.
‘as(*, "raw")’ now works as documented, thanks to Mikael Jagan's PR#18795.
Informational messages of e.g., ‘print(1:1e4, max=1000)’, now correctly mention ‘max’ in addition to ‘getOption("max.print")’.
‘rowSums(A, dims = dd)’, ‘colMeans(..)’, etc, give a more helpful error message when ‘dd’ is not of length one, thanks to Michael Chirico's PR#18811.
‘seq.Date()’ no longer explicitly coerces results from integer to double, analogously with ‘seq.default()’, ‘seq.int()’ and ‘seq.POSIXt()’, resolving a _modified_ PR#18782.
‘axisTicks(usr, ...)’ documentation clarification for ‘log = TRUE’, fixing bug PR#18821 thanks to Duncan Murdoch.
‘debug()’ and ‘debugonce(fun)’ now also accept a string ‘fun’ when it names an S4 generic, fixing PR#18822 thanks to Mikael Jagan.
‘debugonce(<S4-simple-body>, signature=*)’ now works correctly when “called twice”, fixing PR#18824 thanks to Mikael Jagan.
‘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 "
‘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’.
‘cbind()’ could segfault with ‘NULL’ inputs. (Seen when R was built with ‘gcc-14’, LTO and C99 inlining semantics.)
Fix segfault on ‘quartz()’ from ‘grid.glyph()’ call with ‘glyphInfo()’ that describes non-existent font (PR#18784). Thanks to Tomek Gieorgijewski.
‘format()’ etc, using ‘decimal.mark = s’, by default getting ‘s <- getOption("OutDec")’, signals a warning (to become an error in the future) when ‘s’ is not a string with exactly one character.
When ‘s <- getOption("OutDec")’ is not a string of one character, a warning is signalled now whenever it is used in internal C code, notably when calling the default methods of ‘format()’.
‘pwilcox()’ and ‘qwilcox()’ now check for user interrupt less frequently.
‘summary(<stl>)’ (which prints directly) finally gets the same ‘digits’ default as the formatting printing of default ‘summary()’ method results, and it is documented explicitly.
‘options(show.error.locations = TRUE)’ once again shows the most recent known location when an error is reported. Setting its value to ‘"bottom"’ is no longer supported. Numerical values are converted to logical.
C API function ‘R_GetCurrentSrcref(skip)’ now returns ‘srcref’ entries correctly. (Note that there is also a change to the interpretation of ‘skip’; see the C-LEVEL API entry above.)
‘tools::Rd2latex()’ now removes leading and trailing spaces from \alias entries as documented, fixing indexing and linking hiccups in some PDF manuals.
‘R CMD Rd2pdf’ can now render the package manual from a ‘--latex’ installation also when the help contains figures.
The argument of ‘as.environment()’ is now named ‘x’, not ‘object’, as was always documented and shown when printing it; thanks to Gael Millot's PR#18849.
When ‘R CMD check’ aims at getting the time+date from a world clock, it is more robust against unexpected non-error results, thanks to Michael Chirico's PR#18852.
The ‘tools::parseLatex()’ parser made several parsing errors (PR#18855).
Error messages produced by ‘tools::parseLatex()’ are now more readable (PR#18855).
‘R CMD build <pkg>’ excludes more file patterns when it tars the <pkg> directory, fixing both PR#18432 and PR#18434, for ‘vim’ and ‘GNU Global’ ‘emacs’ users, thanks to Dirk Eddelbuettel's patch.
‘quantile()’'s default method gets an option ‘fuzz’ to protect against floating point inaccuracy before rounding, thus fixing PR#15811 and, en passant, PR#17683.
Printing arrays now also omits columns, rows and slices when desirable according to option ‘max.print’, or argument ‘max’, respectively, addressing most of the remaining part of PR#15027, thanks to Sherry Zhang's patch.
‘drop.terms(y ~ w, 1)’ and similar now work, thanks to Benjamin Sommer's report in PR#18861 and collaboration with Heather Turner improving ‘reformulate()’.
Many arguments which should be length-1 logical are checked more thoroughly. The most commonly seen errors are in ‘unlink(, recursive)’, ‘tempdir()’ and the ‘na.rm’ arguments of ‘max()’, ‘min()’, ‘sum()’, ....
‘grep()’, ‘strsplit()’ and similar took non-‘TRUE’/‘FALSE’ values of their logical arguments as ‘FALSE’, but these were almost always mismatches to unnamed arguments and are now reported as ‘NA’.
‘vignette("reshape")’ is now also available on Windows.
The bundled BLAS and LAPACK sources have been updated to those shipped
as part of January 2025's LAPACK 3.12.1.
It is intended that this will be the last update to BLAS and LAPACK in
the R sources. Those building R from source are encouraged to use
external BLAS and LAPACK and this will be required in future.
This update was mainly bug fixes but contained a barely documented
major change. The set of BLAS routines has been unchanged since 1988,
so throughout R's history. This update introduced new BLAS routines
‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. This
means that BLAS implementations are no longer interchangeable.
To work around this, R can be configured with option ‘--with-2025blas’
which arranges for the 2025 BLAS additions to be compiled into
‘libRlapack’ (the internal LAPACK, not built if an external LAPACK is
used).
This option allows the continuation of the practice of swapping the BLAS in use by symlinking ‘lib/libRblas.*’. It has the disadvantage of using the reference BLAS version of the 2025 routines whereas an enhanced BLAS might have an optimized version (OpenBLAS does as from version 0.3.29).
Windows builds currently use the internal LAPACK and by default the
internal BLAS: notes on how to swap the latter _via_ ‘Rblas.dll’ are in
file ‘src/extra/blas/Makefile.win’.
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-16 and Intel 2024.2 (and 2022.2 should).
Current binary distributions on macOS use Apple ‘clang’ 14 and so do not use C23.
The minimum ‘autoconf’ requirement for a maintainer build has been
increased to ‘autoconf’ 2.72.
Building the HTML and Info versions of the R manuals now requires
‘texi2any’ from Texinfo 6.1 or later.
Failures in building the manuals under ‘doc’ now abort the
installation, removing any file which caused the failure.
Control of symbol visibility is now supported on macOS (the previous
check only worked on ELF platforms).
There is now support for installing the debug symbols for recommended
packages on macOS: see ‘REC_INSTALL_OPT’ in file ‘config.site’.
‘configure’ is now able to find an external ‘libintl’ on macOS (the
code from an older GNU gettext distribution failed to try linking with
the macOS Core Foundation framework).
‘is.R()’ is defunct. Environment variable ‘_R_DEPRECATED_IS_R_’ no
longer has any effect.
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’,
‘inheritedSubMethodLists’, ‘insertMethod’, ‘insertMethodInEmptyList’,
‘makeMethodsList’, ‘mergeMethods’, ‘MethodsList’, ‘MethodsListSelect’,
and ‘SignatureMethod’ were made defunct, as were the ‘"MethodsList"’
branches of functions ‘assignMethodsMetaData’, ‘finalDefaultMethod’,
and ‘MethodAddCoerce’.
‘getMethods(*, table = TRUE)’ is deprecated.
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 (as on Alpine Linux) provide suitable functions.
Instead install ‘libintl’ from a recent version of GNU gettext or use ‘configure’ option ‘--disable-nls’.
The deprecated ‘xfig()’ graphics device has been removed.
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 now for Fortran-callable entry points which are part of the API.
‘Writing R Extensions’ has a new section ‘Moving into C API compliance’
to help package authors move away from using non-API endpoints. This
section will continue to be updated as work on clarifying and
tightening the C API continues.
New API function ‘R_mkClosure’. This checks that its arguments are
valid and should be used instead of ‘allocSExp(CLOSXP’ followed by
‘SET_FORMALS’, ‘SET_BODY’, and ‘SET_CLOENV’.
New API functions ‘R_ClosureFormals’, ‘R_ClosureBody’, and
‘R_ClosureEnv’ for extracting closure components. The existing
functions ‘R_ClosureExpr’ and ‘R_BytecodeExpr’ have also been added to
the API.
New API function ‘R_ParentEnv’ corresponding to R's ‘parent.env()’.
Further non-API entry points have been added to those reported by ‘R
CMD check’: ‘COMPLEX0’, ‘ddfind’, ‘DDVAL’, ‘ENSURE_NAMEDMAX’,
‘ENVFLAGS’, ‘FRAME’, ‘HASHTAB’, ‘INTERNAL’, ‘IS_ASCII’, ‘IS_UTF8’,
‘LEVELS’, ‘NAMED’, ‘PRSEEN’, ‘RDEBUG’, ‘REAL0’, ‘Rf_findVarInFrame3’,
‘SET_BODY’, ‘SET_CLOENV’, ‘SET_FORMALS’, ‘SET_PRSEEN’, ‘SET_RDEBUG’,
‘STRING_PTR’, ‘SYMVALUE’, and ‘VECTOR_PTR’. Any declarations for these
in public header files will be removed in the near future, and they
will be hidden where possible.
Some ‘R CMD check’ ‘NOTE’s on the use of non-API entry points have been
upgraded to ‘WARNING’s in preparation for removing declarations and,
where possible, hiding these entry points.
Additional non-API entry points have been added to those reported by ‘R
CMD check’: ‘IS_LONG_VEC’, ‘PRCODE’, ‘PRENV’, ‘PRVALUE’, ‘R_nchar’,
‘Rf_NonNullStringMatch’, ‘R_shallow_duplicate_attr’, ‘Rf_StringBlank’,
‘SET_TYPEOF’, ‘TRUELENGTH’, ‘XLENGTH_EX’, and ‘XTRUELENGTH’.
Enable defining ‘R_NO_REMAP_RMATH’ and calling ‘Rf_*()’ as has been
documented in ‘Writing R Extensions’ for a while, fixing PR#18800
thanks to Mikael Jagan and Suharto Anggono.
‘R_GetCurrentSrcref(skip)’ now skips calls rather than ‘srcref’s,
consistent with counting items in the ‘traceback()’ display. If ‘skip
== NA_INTEGER’, it searches for the first ‘srcref’, starting at the
current evaluation state and proceeding through the call stack;
otherwise, it returns the ‘srcref’ of the requested entry from the call
stack.
‘R CMD INSTALL’ (and hence ‘check’) now compile C++ code with
‘-DR_NO_REMAP’.
‘Writing R Extensions’ has been revised to describe the remapped entry points, for with the ‘Rf_’ prefix remains optional when used from C code (but is recommended for new C code).
‘R CMD check --as-cran’ notes bad parts in the ‘DESCRIPTION’ file's URL
fields.
‘R CMD check’ now reports more warnings on long-deprecated/obsolete
Fortran features reported by ‘gfortran -Wall’. For hints on how to
modernize these, see
<https://fortranwiki.org/fortran/show/Modernizing+Old+Fortran>.
Since almost all supported R versions now use UTF-8, ‘R CMD check’ no
longer by default reports on marked UTF-8 or Latin-1 strings in
character data. Set environment variable
‘_R_CHECK_PACKAGE_DATASETS_SUPPRESS_NOTES_’ to a false value for the
previous behaviour.
‘tools::checkDocFiles()’ notes more cases of usage documentation
without corresponding \alias.
‘R CMD check’ with a true value for environment variable
‘_R_CHECK_BASHISMS_’ checks more thoroughly, including for ‘bash’
scripts and bashisms in components of ‘autoconf’-generated ‘configure’
scripts.
‘R CMD check’ gains option ‘--run-demo’ to check demo scripts
analogously to tests.
‘R CMD build’ now supports ‘--compression=zstd’ on platforms with
sufficient support for ‘zstd’.
‘tools::texi2pdf(..., texinputs=<paths>)’ now _pre_pends the specified
<paths> to ‘TEXINPUTS’. When building R itself (‘doc/NEWS.pdf’ and
base vignettes) or package manuals using ‘R CMD Rd2pdf’, it is ensured
that this R's ‘Rd.sty’ takes precedence over any other (incompatible)
versions in default “texmf trees”.
‘tools::Rd2latex()’ no longer outputs an ‘\inputencoding{utf8}’ line by
default; such a declaration is obsolete since LaTeX 2018-04-01.
‘update_pkg_po()’ now copies ‘.mo’ files to the ‘translation’ package
even if a ‘DESCRIPTION’ file exists, thanks to Michael Chirico fixing
PR#18694.
Auto-generated ‘citation()’ entries no longer include (additional) URLs
in the ‘note’ field (PR#18547).
‘as.data.frame.list()’ gets a new option ‘new.names’ and now preserves
‘NA’ names, thus fixing the ‘format()’ method for data frames, and also
bug PR#18745. Relatedly, the ‘format()’ method gets an option
‘cut.names’.
‘stem()’ formats correctly also in cases where rounding up, e.g., from
9.96 to 10 needs more digits; thanks to Ella Kaye and Kelly Bodwin,
fixing PR#8934 during ‘R Dev Day’ at useR!2024.
Additionally, ‘stem(x)’ now works normally also when ‘length(x) == 1’.
‘tools’' ‘toTitleCase()’ now works better, fixing PR#18674, thanks to
Shannon Pileggi, Sarah Zeller, Reiko Okamoto, and Hugo Gruson's ‘R Dev
Day’ effort.
Printing matrices (typically with many rows and or columns) now also
omits columns when desirable according to option ‘max.print’, or
argument ‘max’, respectively. This is primarily the work of Lorena
Abad, Ekaterina Akimova, Hanne Oberman, Abhishek Ulayil, and Lionel
Henry at the ‘R Dev Day’, thus fixing PR#15027.
‘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.
Printing ‘ls.str()’ now shows ‘"<missing>"’ even when R's language
setting is not English.
‘xyTable()’ now handles and reports ‘NA’s fixing PR#18654. Thanks to
Heather Turner and Zhian Kamvar for report and patch.
‘as(*, "raw")’ now works as documented, thanks to Mikael Jagan's
PR#18795.
Informational messages of e.g., ‘print(1:1e4, max=1000)’, now correctly
mention ‘max’ in addition to ‘getOption("max.print")’.
‘rowSums(A, dims = dd)’, ‘colMeans(..)’, etc, give a more helpful error
message when ‘dd’ is not of length one, thanks to Michael Chirico's
PR#18811.
‘seq.Date()’ no longer explicitly coerces results from integer to
double, analogously with ‘seq.default()’, ‘seq.int()’ and
‘seq.POSIXt()’, resolving a _modified_ PR#18782.
‘axisTicks(usr, ...)’ documentation clarification for ‘log = TRUE’,
fixing bug PR#18821 thanks to Duncan Murdoch.
‘debug()’ and ‘debugonce(fun)’ now also accept a string ‘fun’ when it
names an S4 generic, fixing PR#18822 thanks to Mikael Jagan.
‘debugonce(<S4-simple-body>, signature=*)’ now works correctly when
“called twice”, fixing PR#18824 thanks to Mikael Jagan.
‘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 "
‘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’.
‘cbind()’ could segfault with ‘NULL’ inputs. (Seen when R was built
with ‘gcc-14’, LTO and C99 inlining semantics.)
Fix segfault on ‘quartz()’ from ‘grid.glyph()’ call with ‘glyphInfo()’
that describes non-existent font (PR#18784). Thanks to Tomek
Gieorgijewski.
‘format()’ etc, using ‘decimal.mark = s’, by default getting ‘s <-
getOption("OutDec")’, signals a warning (to become an error in the
future) when ‘s’ is not a string with exactly one character.
When ‘s <- getOption("OutDec")’ is not a string of one character, a
warning is signalled now whenever it is used in internal C code,
notably when calling the default methods of ‘format()’.
‘pwilcox()’ and ‘qwilcox()’ now check for user interrupt less
frequently.
‘summary(<stl>)’ (which prints directly) finally gets the same ‘digits’
default as the formatting printing of default ‘summary()’ method
results, and it is documented explicitly.
‘options(show.error.locations = TRUE)’ once again shows the most recent
known location when an error is reported. Setting its value to
‘"bottom"’ is no longer supported. Numerical values are converted to
logical.
C API function ‘R_GetCurrentSrcref(skip)’ now returns ‘srcref’ entries
correctly. (Note that there is also a change to the interpretation of
‘skip’; see the C-LEVEL API entry above.)
‘tools::Rd2latex()’ now removes leading and trailing spaces from \alias
entries as documented, fixing indexing and linking hiccups in some PDF
manuals.
‘R CMD Rd2pdf’ can now render the package manual from a ‘--latex’
installation also when the help contains figures.
The argument of ‘as.environment()’ is now named ‘x’, not ‘object’, as
was always documented and shown when printing it; thanks to Gael
Millot's PR#18849.
When ‘R CMD check’ aims at getting the time+date from a world clock, it
is more robust against unexpected non-error results, thanks to Michael
Chirico's PR#18852.
The ‘tools::parseLatex()’ parser made several parsing errors
(PR#18855).
Error messages produced by ‘tools::parseLatex()’ are now more readable
(PR#18855).
‘R CMD build <pkg>’ excludes more file patterns when it tars the <pkg>
directory, fixing both PR#18432 and PR#18434, for ‘vim’ and ‘GNU
Global’ ‘emacs’ users, thanks to Dirk Eddelbuettel's patch.
‘quantile()’'s default method gets an option ‘fuzz’ to protect against
floating point inaccuracy before rounding, thus fixing PR#15811 and, en
passant, PR#17683.
Printing arrays now also omits columns, rows and slices when desirable
according to option ‘max.print’, or argument ‘max’, respectively,
addressing most of the remaining part of PR#15027, thanks to Sherry
Zhang's patch.
‘drop.terms(y ~ w, 1)’ and similar now work, thanks to Benjamin
Sommer's report in PR#18861 and collaboration with Heather Turner
improving ‘reformulate()’.
Many arguments which should be length-1 logical are checked more
thoroughly. The most commonly seen errors are in ‘unlink(,
recursive)’, ‘tempdir()’ and the ‘na.rm’ arguments of ‘max()’, ‘min()’,
‘sum()’, ....
‘grep()’, ‘strsplit()’ and similar took non-‘TRUE’/‘FALSE’ values of their logical arguments as ‘FALSE’, but these were almost always mismatches to unnamed arguments and are now reported as ‘NA’.
‘vignette("reshape")’ is now also available on Windows.
.
‘as.integer(rl)’ and hence ‘as.raw(rl)’ now work for a ‘list’ of
‘raw(1)’ elements, as proposed by Michael Chirico's PR#18696.
‘graphics’' ‘grid()’ gains optional argument ‘nintLog’.
New functions ‘check_package_urls()’ and ‘check_package_dois()’ in
package ‘tools’ for checking URLs and DOIs in package sources.
New ‘head()’ and ‘tail()’ methods for class ‘"ts"’ time series,
proposed by Spencer Graves on R-devel.
New ‘qr.influence()’ function, a “bare bones” interface to the
‘lm.influence()’ leave-one-out diagnostics computations; wished for in
PR#18739.
Package ‘citation()’ results auto-generated from the package metadata
now also provide package DOIs for CRAN and Bioconductor packages.
New function ‘grepv()’ identical to ‘grep()’ except for the default
‘value = TRUE’.
‘methods(<pkg>:::<genfun>)’ now does report methods when neither the
generic nor the methods have been exported.
‘pdf()’ gains an ‘author’ argument to set the corresponding metadata
field, and logical arguments ‘timestamp’ and ‘producer’ to optionally
omit the respective metadata. (Thanks to Edzer Pebesma.)
‘grDevices::glyphInfo()’ gains a ‘rot’ argument to allow per-glyph
rotation. (Thanks to Daniel Sabanes Bove.)
Package ‘tools’ now exports functions ‘CRAN_current_db()’,
‘CRAN_aliases_db()’, ‘CRAN_rdxrefs_db()’, ‘CRAN_archive_db()’, and
‘CRAN_authors_db()’.
Package ‘tools’ now exports functions ‘R()’ and
‘parse_URI_reference()’.
Package ‘tools’ now exports functions ‘base_aliases_db()’ and
‘base_rdxrefs_db()’.
It is now possible to set the background color for row and column names
in the data editor on Windows (‘Rgui’).
‘Rterm’ on Windows now accepts input lines of unlimited length.
‘file.info()’ on Windows now provides file owner name and domain.
‘Sys.info()’ on Windows now provides current user domain.
‘findInterval()’ gets new arguments ‘checkSorted’ and ‘checkNA’ which
allow skipping relatively costly checks; related to PR#16567.
‘pnorm(x)’ underflows more gracefully.
‘get(nam, env)’ now signals a _classed_ error, ‘"getMissingError"’, as
“subclass” of ‘"missingArgError"’ where the latter is used also in
similar situations, e.g., ‘f <- function(x) exp(x); try(f())’ .
The set operations now avoid the ‘as.vector()’ transformation for
same-kind apparently vector-like operands.
‘md5sum()’ can be used to compute an MD5 hash of a raw vector of bytes
by using the ‘bytes=’ argument instead of ‘files=’. The two arguments
are mutually exclusive.
Added function ‘sha256sum()’ in package ‘tools’ analogous to ‘md5sum()’
implementing the SHA-256 hashing algorithm.
The ‘xtfrm()’ method for class ‘"AsIs"’ is now considerably faster
thanks to a patch provided by Ivan Krylov.
The ‘merge()’ method for data frames will no longer convert row names
used for indexing using ‘I()’, which will lead to faster execution in
cases where ‘sort = TRUE’ and ‘all.x’ and/or ‘all.y’ are set to ‘TRUE’.
The ‘methods’ package internal function ‘.requirePackage()’ now calls
‘requireNamespace(p)’ instead of ‘require(p)’, hence no longer adding
packages to the ‘search()’ path in cases methods or class definitions
are needed. Consequently, previous workflows relying on the old
behaviour will have to be amended by adding corresponding ‘library(p)’
calls.
More R-level messages use a common format containing ‘"character
string"’ for more consistency and less translation work.
‘available.packages()’ and ‘install.packages()’ get an optional switch
‘cache_user_dir’, somewhat experimentally.
The ‘sunspot.month’ data have been updated to Oct 2024; because of
recalibration also historical numbers are changed, and we keep the
previous data as ‘sunspot.m2014’ for reproducibility.
The ‘quartz()’ device now supports alpha masks. Thanks to George
Stagg, Gwynn Gebeyhu, Heather Turner, and Tomek Gieorgijewski.
The ‘print()’ method for date-time objects (‘POSIX.t’) gets an optional
‘digits’ argument for _fractional_ seconds, passed to improved
‘format.POSIXlt()’; consequently, ‘print(<date.time>, digits = n)’
allows to print fractions of seconds.
‘install.packages()’ and ‘download.packages()’ download packages
simultaneously using ‘libcurl’, significantly reducing download times
when installing or downloading multiple packages.
Status reporting in ‘download.file()’ has been extended to report the
outcome for individual files in simultaneous downloads.
The Rd \link macro now allows markup in the link text when the topic is
given by the optional argument, e.g., ‘\link[=gamma]{\eqn{\Gamma(x)}}’.
If ‘La_library()’ is empty, ‘sessionInfo()’ still reports
‘La_version()’ when available.
‘seq.int(from, to, by, ....)’ when |by| = 1 now behaves as if ‘by’ was
omitted, and hence returns ‘from:to’, possibly integer.
‘seq.Date(from, to, by, ....)’ and ‘seq.POSIXt(..)’ now also work when
‘from’ is missing and sufficient further arguments are provided, thanks
to Michael Chirico's report, patch proposal in PR#17672 and ‘R Dev Day’
contributions.
The ‘Date’ method also works for ‘seq(from, to)’, when ‘by’ is missing and now defaults to ‘"1 days"’.
It is now documented (and tested) that the ‘by’ string may be _abbreviated_ in both ‘seq’ methods.
Both methods return or keep internal type ‘"integer"’ more consistently now. Also, ‘as.POSIXct({})’ is internally integer.
‘duplicated()’, ‘unique()’, and ‘anyDuplicated()’ now also work for
class ‘expression’ vectors.
New function ‘use()’ to use packages in R scripts with full control
over what gets added to the search path. (Actually already available
since R 4.4.0.)
There is some support for ‘zstd’ compression of tarballs in ‘tar()’ and
‘untar()’. (This depends on OS support of ‘libzstd’ or by ‘tar’.)
‘print(summary(<numbers>))’ gets new optional argument ‘zdigits’ to
allow more flexible and consistent (double) rounding. The current
default ‘zdigits = 4L’ is somewhat experimental. Specifying both
‘digits = *, zdigits = *’ allows behaviour independent of the global
‘digits’ option.
The ‘format()’ method for ‘"difftime"’ objects gets a new back
compatible option ‘with.units’.
A ‘summary()’ method for ‘"difftime"’ objects which prints nicely,
similar to those for ‘"Date"’ and ‘"POSIXct"’.
‘unique()’'s default method now also deals with ‘"difftime"’ objects.
‘optimize(f, *)’ when ‘f(x)’ is not finite says more about the value in
its ‘warning’ message. It no longer replaces ‘-Inf’ by the largest
_positive_ finite number.
The documentation of ‘gamma()’ and ‘is.numeric()’ is more specific,
thanks to the contributors of PR#18677.
New dataset ‘gait’ thanks to Heather Turner and Ella Kaye, used in
examples.
New datasets ‘penguins’ and ‘penguins_raw’ thanks to Ella Kaye, Heather
Turner, and Kristen Gorman.
.
.
Packages are now installed using C23 where supported by the OS and R
build.
Packages using R's compiler settings can ask *not* to use C23 _via_ including ‘USE_C17’ in ‘SystemRequirements’ or can be installed by ‘R CMD INSTALL --use-C17’. (Some packages ignore these settings in their ‘configure’ script or when compiling in sub-directories of ‘src’, as will those using a ‘src/Makefile’.)
Source installs now report the package version in the log.
There is preliminary support for C++26 with GCC >= 14, Apple ‘clang++’
>= 16 and LLVM ‘clang++’ >= 17.
.
The non-API and hidden entry points ‘Rf_setIVector’, ‘Rf_setRVector’
and ‘Rf_setSVector’ have been removed.
The internal code for changing the parent of an environment now signals
an error if the new parent is not an environment or if the change would
create a cycle in the parent chain.
‘SET_TYPEOF’ now signals an error unless the old and new types have
compatible memory structure and content. Use of ‘SET_TYPE’ in package C
code should be avoided and may be deprecated in the near future. It is
better to allocate an object of the desired type in the first place.
The set of LAPACK (double and complex) routines declared in the headers
‘R_ext/Lapack.h’ and ‘R_ext/Applic.h’ has been extended, mostly to
routines actually in use by packages.
Memory allocation messages now use the (non-SI notation) ‘"Mb"’, ‘"Gb"’
, ..., and ‘"Mbytes"’ strings as _arguments_ instead of as part of the
(translatable format) string. This is one step for PR#18297; from
Henrik Bengtsson.
Header ‘R_ext/Constants.h’ (included by ‘R.h’) now always includes
header ‘float.h’ or ‘cfloat’ for constants such as ‘DBL_MAX’.
Strict R headers are now the default. This removes the legacy
definitions of ‘PI’, ‘Calloc’, ‘Realloc’ and ‘Free’: use ‘M_PI’,
‘R_Calloc’, ‘R_Realloc’ or ‘R_Free’ instead.
The deprecated and seemingly never-used S-compatibility macros
‘F77_COM’ and ‘F77_COMDECL’ have been removed from header ‘R_ext/RS.h’.
The ‘enum’ ‘Rboolean’ defined in header ‘R_ext/Boolean.h’ now has a
fixed underlying type of ‘int’ on platforms whose C compiler supports
this.
This is a C23 feature (taken from C++11) and also supported in all C standards by some versions of ‘clang’ (from LLVM and Apple) and (with a warning when using ‘-pedantic’) by GCC when in C17 mode.
A fair amount of code has assumed this: it may be changed to a smaller type in future. In particular, as standard compilers do not check the validity of assignment to an ‘enum’, it has been possible to assign ‘NA_INTEGER’ to an ‘Rboolean’ variable, coerce it to ‘int’ and recover the value.
If there were a platform which used an underlying type of a different size this would be an ABI-breaking change (but we are unaware of any such platform).
Header ‘R_ext/Boolean.h’ now ensures that a ‘bool’ type is available
either as a keyword (C23 and C++) or by including the C99 header
‘stdbool.h’. This is being used internally in R to replace ‘Rboolean’
by ‘bool’.
There are a new functions ‘asRboolean’ and ‘asBool’, variants of
‘asLogical’ more suited to converting logical arguments to ‘Rboolean’
or to ‘bool’. They require a length-one input and throw an error if
that evaluates to ‘NA’.
Header ‘R_exts/Error.h’ now ensures that ‘Rf_error’ and similar are
given a ‘noreturn’ attribute when used from C++ under all compilers.
Header ‘R_exts/Utils.h’ no longer contains a declaration for
‘77_SUB(interv)’. This is intended to be called from Fortran and was
wrongly declared: ‘LOGICAL’ in Fortran corresponds to ‘int *’ not
‘Rboolean *’.
.
The functions in header ‘R_ext/Callbacks.h’ (which is *not* part of the
API) have been converted to use the ‘bool’ type.
Header ‘R_exts/Utils.h’ no longer contains a declaration for ‘77_SUB(interv)’. This is intended to be called from Fortran and was wrongly declared: ‘LOGICAL’ in Fortran corresponds to ‘int *’ not ‘Rboolean *’.
‘configure’ is now able to find an external ‘libintl’ on macOS (the code from an older GNU gettext distribution failed to try linking with the macOS Core Foundation framework).
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’ nor an external ‘libintl’ library provide suitable functions.
Instead install ‘libintl’ from a recent version of GNU gettext or use ‘configure’ option ‘--disable-nls’.
The functions in header ‘R_ext/Callbacks.h’ (which is *not* part of the API) have been converted to use the ‘bool’ type.
‘vignette("reshape")’ is now also available on Windows.
‘findInterval()’ gets new arguments ‘checkSorted’ and ‘checkNA’ which allow skipping relatively costly checks; related to PR#16567.
‘configure’ is now able to find an external ‘libintl’ on macOS (it failed to try linking with the macOS Core Foundation framework).
Building with the bundled (and old) version of ‘libintl’ is deprecated and gives a ‘configure warning’. Use ‘libintl’ from a recent version of GNU gettext instead. (If the OS's ‘libc’ includes ‘libintl’ that will be chosen by ‘configure’ - ‘glibc’ does.)
‘getMethods(*, table = TRUE)’ is deprecated.
There are a new functions ‘asRboolean’ and ‘asBool’, variants of ‘asLogical’ more suited to converting logical arguments to ‘Rboolean’ or to ‘bool’. They require a length-one input and throw an error if that evaluates to ‘NA’.
Header ‘R_exts/Error.h’ now ensures that ‘Rf_error’ and similar are given a ‘noreturn’ attribute when used from C++ under all compilers.
Many arguments which should be length-1 logical are checked more thoroughly. The most commonly seen errors are in ‘unlink(, recursive)’, ‘tempdir()’ and the ‘na.rm’ arguments of ‘max()’, ‘min()’, ‘sum()’, ....
‘grep()’, ‘strsplit()’ and similar took non-‘TRUE’/‘FALSE’ values of their logical arguments as ‘FALSE’, but these were almost always mismatches to unnamed arguments and are now reported as ‘NA’.
New function ‘grepv()’ identical to ‘grep()’ except for the default ‘value = TRUE’.
‘findInterval()’ gets new arguments ‘checkSorted’ and ‘checkNA’ which allow skipling relatively costly checks; related to PR#16567.
Status reporting in ‘download.file()’ has been extended to report the outcome for individual files in simultaneous downloads.
The documentation of ‘gamma()’ and ‘is.numeric()’ is more specific, thanks to the contributors of PR#18677.
This update was mainly bug fixes but contained a barely documented major change. The set of BLAS routines has been unchanged since 1988, so throughout R's history. This update introduced new BLAS routines ‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. This means that BLAS implementations are no longer interchangeable.
To work around this, R can be configured with option ‘--with-2025blas’ which arranges for the 2025 BLAS additions to be compiled into ‘libRlapack’ (the internal LAPACK, not built if an external LAPACK is used).
This option allows the continuation of the practice of swapping the BLAS in use by symlinking ‘lib/libRblas.*’. It has the disadvantage of using the reference BLAS version of the 2025 routines whereas an enhanced BLAS might have an optimized version (OpenBLAS does as from version 0.3.29).
Windows builds currently use the internal LAPACK and by default the internal BLAS: notes on how to swap the latter _via_ ‘Rblas.dll’ are in file ‘src/extra/blas/Makefile.win’.
Building the HTML and Info versions of the R manuals now requires ‘texi2any’ from Texinfo 6.1 or later.
Header ‘R_exts/Error.h’ now ensures that ‘Rf_error’ and similar are given a ‘noreturn’ attribute when uased from C++ under all compilers.
The set of LAPACK (double and complex) routines declared in the headers ‘R_ext/Lapack.h’ and ‘R_ext/Applic.h’ has been extended, mostly to routines actually in use by packages.
The ‘enum’ ‘Rboolean’ defined in header ‘R_ext/Boolean.h’ now has a fixed underlying type of ‘int’ on platforms whose C compiler supports this.
This is a C23 feature (taken from C++11) and also supported in all C standards by some versions of ‘clang’ (from LLVM and Apple) and (with a warning when using ‘-pedantic’) by GCC when in C17 mode.
A fair amount of code has assumed this: it may be changed to a smaller type in future. In particular, as standard compilers do not check the validity of assignment to an ‘enum’, it has been possible to assign ‘NA_INTEGER’ to an ‘Rboolean’ variable, coerce it to ‘int’ and recover the value.
If there were a platform which used an underlying type of a different size this would be an ABI-breaking change (but we are unaware of any such platform).
Header ‘R_ext/Boolean.h’ now ensures that a ‘bool’ type is available either as a keyword (C23 and C++) or by including the C99 header ‘stdbool.h’. This is being used internally in R to replace ‘Rboolean’ by ‘bool’.
There are a new functions ‘asRboolean’ and ‘asBool’, variants of ‘asLogical’ more suited to converting logical arguments to ‘Rboolean’ or to ‘bool’. They require a length-one input and thow an error if that evaluates to ‘NA’.
‘R CMD check’ gains option ‘--run-demo’ to check demo scripts analogously to tests.
‘axisTicks(usr, ...)’ documentation clarification for ‘log = TRUE’, fixing bug PR#18821 thanks to Duncan Murdoch.
‘options(scipen = NULL)’ and other invalid values now signal an error instead of invalidating ops relying on a finite integer value. Values outside the range -9 .. 9999 are now warned about and set to a boundary or to the default ‘0’, e.g., in case of an ‘NA’.
‘format()’ etc, using ‘decimal.mark = s’, by default getting ‘s <- getOption("OutDec")’, signals a warning (to become an error in the future) when ‘s’ is not a string with exactly one character.
The argument of ‘as.environment()’ is now named ‘x’, not ‘object’, as was always documented and shown when printing it; thanks to Gael Millot's PR#18849.
Many arguments which should be length-1 logical are checked more thoroughly. The most commonly seen errors are in ‘unlink(, recursive)’, ‘tempdir()’ and the ‘na.rm’ arguments of ‘max()’, ‘min()’, ‘sum()’, ....
‘grep()’, ‘strsplit()’ and similar took non-‘TRUE’/‘FALSE’ values of their logical arguments as ‘FALSE’, but these were almost always nismatches to unnamed arguments and are now reported as ‘NA’.
The bundled BLAS and LAPACK sources have been updated to those shipped as part of January 2025's LAPACK 3.12.1.
The bundled BLAS and LAPACK sources have been updated to those shipped as part of january 2025's LAPACK 3.12.1.
It is intended that this will be the last update to BLAS and LAPACK in the R sources. Those building R from source are encouraged to use external BLAS and LAPACK and this will be required in future.
This update was mainly bug fixes but contained a barely documented major change. The set of BLAS routines has been unchanged since 1988, so throughout R's history. This update introduced two new BLAS routines ‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. This means that BLAS implementations are no longer interchangeable.
To work around this, R can be configured with option ‘--with-2025blas’ which arranges for the 2025 BLAS additions to be compiled into ‘libRlapack’ (the internal LAPACK, not built if an external LAPACK is used).
This option allows the continuation of swapping the BLAS in use by symlinking ‘lib/libRblas.*’. It has the disadvantage of using the reference BLAS version of the 2025 routines whereas an enhanced BLAS might have an optimized version (OpenBLAS does as from version 0.3.29).
Windows builds use the internal LAPACK and by default the internal BLAS: notes on how to swap the latter _via_ ‘Rblas.dll’ are in file ‘src/extra/blas/Makefile.win’.
The bundled BLAS and LAPACK sources have been updated to those shipped
with LAPACK 3.12.1.
This is mainly bug fixes, but includes a handful of new ancillary routines, including two new BLAS routines ‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. So an external BLAS to be used with the internal LAPACK (unusual) needs to provide those routines, and if an external LAPACK is 3.12.1 or later, the BLAS used must contain the 2025 additions.
There is a new ‘configure’ option ‘--with-2025blas’ which will compile
the 2025 BLAS additions in the internal LAPACK to allow an external
BLAS which lacks them to be used.
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-16 and Intel 2024.2 (and 2022.2 should).
Current binary distributions on macOS use Apple ‘clang’ 14 and so do not use C23.
Many arguments which should be length-1 logical are checked more thoroughly. The most commonly seen errors are in ‘unlink(, recursive)’, ‘tempdir()’ and the ‘na.rm’ arguments of ‘max()’, ‘min()’, ‘sum()’, ....
‘grep()’, ‘strsplit()’ and similar took non-‘TRUE’/‘FALSE’ values of their logical arguments as ‘FALSE’, but these were almost always mistakes and are now reported as ‘NA’.
The bundled BLAS and LAPACK sources have been updated to those shipped with LAPACK 3.12.1.
This is mainly bug fixes, but includes a handful of new ancillary routines, including two new BLAS routines ‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. So an external BLAS to be used with the internal LAPACK (unusual) needs to provide those routines, and if an external LAPACK is 3.12.1 or later, the BLAS used must contain the 2025 additions.
There is a new ‘configure’ option ‘--with-2025blas’ which will compile the 2025 BLAS additions in the internal LAPACK to allow an external BLAS which lacks them to be used.
The bundled BLAS and LAPACK sources have been updated to those shipped with LAPACK 3.12.1. This is mainly bug fixes, but includes a handful of new ancillary routines, including two new BLAS routines ‘dgemmtr’ and ‘zgemmtr’ which are now used by LAPACK routines. So an external BLAS to be used with the internal LAPACK (unusual) needs to provide those routines.
The bundled BLAS and LAPACK sources have been updated to those shipped with LAPACK 3.12.1. This is almost entirely bug fixes, but includes a handful of new ancillary routines.
The bundled BLAS and LAPACK sources have been upadted to those shipped with Lapack 3.12.1. This is almost entirely bug fixes, but includes a handful of new ancilliary routines.
There are a new functions ‘asRboolean’ and ‘asBool’, variants of ‘asLogical’ more suited to converting logical arguments to ‘Rboolean’ or to ‘bool’.
Header ‘R_ext/Boolean.h’ now ensures a ‘bool’ type is available either as a keyword (C23 and C++) or by including the C99 header ‘stdbool.h’. This is used in places in R itself to replace ‘Rboolean’ by ‘bool’.
There are a new functions ‘asRboolean’ and ‘asBool’, variannts of ‘asLogical’ more suited to converting logical arguments to ‘Rboolean’ or to ‘bool’.
There is a new function ‘asRboolean’, a variannt of ‘asLogical’ more suitable to converting logical arguments to ‘Rboolean’.
‘grDevices::glyphInfo()’ gains a ‘rot’ argument to allow per-glyph rotation. (Thanks to Daniel Sabanes Bove.)
Many arguments which should be length-1 logical are checked more thoroughly. The most commonly seen errors are in ‘unlink(, recursive)’, ‘tempdir()’ and the ‘na.rm’ argument of ‘max()’, ‘min()’, ‘sum()’, ....
‘grep()’, ‘strsplit()’ and similar took non-‘TRUE’ values of their logical arguments as ‘FALSE’, but these were almost always mistakes and are now reported as ‘NA’.
.
The ‘enum’ ‘Rboolean’ defined in header ‘R_ext/Boolean.h’ now has a fixed underlying type of ‘int’ on platforms whose C compiler supports this.
This is a C23 feature (taken from C++11) and also supported in all C standards by some versions of ‘clang’ (from LLVM and Apple) and (with a warning when using ‘-pedantic’) by GCC when in C17 mode.
A fair amount of code has assumed this: it may be changed to a smaller type in future.
If there were a platform which used an underlying type of a different size this would be an ABI-breaking change (but we are unaware of any such platform).
Many arguments which should be length-1 logical are checked more thoroughly. The most commonly seen errors are in ‘unlink(, recursive)’, ‘tempdir()’ and the ‘na.rm’ argument of ‘max()’, ‘min()’, ‘sum()’, ....
Arguments which should be length-1 logical, e.g. ‘min(na.rm =)’, are checked more thoroughly.
New datasets ‘penguins’ and ‘penguins_raw’ thanks to Ella Kaye, Heather Turner, and Kristen Gorman.
‘drop.terms(y ~ w, 1)’ and similar now work, thanks to Benjamin Sommer's report in PR#18861 and collaboration with Heather Turner improving ‘reformulate()’.
Arguments which should be length-1 logical, e.g. ‘min(na.rm =)’, are checked more throroughly.
Printing arrays now also omits columns, rows and slices when desirable according to option ‘max.print’, or argument ‘max’, respectively, addressing most of the remaining part of PR#15027, thanks to Sherry Zhang's patch.
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-16 and Intel 2024.2 (and 2022.2 should).
Current binary distributions on macOS use Apple ‘clang’ 14 and so do not use C23.
Packages are now installed using C23 where supported by the OS and R build.
Packages using R's compiler settings can ask *not* to use C23 _via_ including ‘USE_C17’ in ‘SystemRequirements’ or can be installed by ‘R CMD INSTALL --use-C17’. (Some packages ignore these settings in their ‘configure’ script or when compiling in sub-directories of ‘src’, as will those using a ‘src/Makefile’.)
Both building R and installing packages use the C compiler in C23 mode.
‘quantile()’'s default method gets an option ‘fuzz’ to protect against floating point inaccuracy before rounding, thus fixing PR#15811 and, en passant, PR#17683.
R can be installed using C23 (for example with ‘-std=gnu23’ or ‘-std=gnu2x’) with recent compilers including ‘gcc’ 12-14, Apple ‘clang’ 15-16, LLVM ‘clang’ 17-20 and Intel ‘icx’ 2024.2.
It can be installed with the upcoming (at the time of writing) ‘gcc’ 15, which defaults to C23.
Control of symbol visibility is now supported on macOS (the previous
check only worked on ELF platforms).
New dataset ‘gait’ thanks to Heather Turner and Ella Kaye, used in examples.
A C23 compiler (if available) can be selected for compilation of R and
packages _via_ the ‘configure’ flag ‘--with-C23’. The compliance test
is of support of new keywords: C23 does have feature-tests macros for
many of its new features.
It is intended that this will become the default before release: already R's ‘configure’ may select a compiler which defaults to C23 (such as GCC 15).
When C23 is selected, packages using R's compiler settings can ask not to use C23 _via_ including ‘USE_C17’ in ‘SystemRequirements’ or can be installed by ‘R CMD INSTALL --use-C17’.
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-16 and Intel 2024.2 (and 2022.2 should).
Control of symbol visibility is now supported on macOS (the previous check only worked on ELF platforms).
Packages are now installed using C23 where supported by the OS and R build.
Packages using R's compiler settings can ask *not* to use C23 _via_ including ‘USE_C17’ in ‘SystemRequirements’ or can be installed by ‘R CMD INSTALL --use-C17’. (Some packages ignore these settings in their ‘configure’ script or when compiling in sub-directiories af ‘src’, as will those using a ‘src/Makefile’.)
There is preliminary support for C++26 with GCC >= 14, Apple ‘clang++’ >= 16 and LLVM ‘clang++’ >= 17.
R can be installed using C23 (for example with ‘-std=gnu23’ or ‘-std=gnu2x’) with recent compilers including ‘gcc’ 12-14, Apple ‘clang’ 16 and LLVM ‘clang’ 17-19. (LLVM ‘clang’ 18 and 19 objected to apparently valid code using attributes accepted by all the other compilers.)
It can be installed with the upcoming (at the time of writing) ‘gcc’ 15, which defaults to C23.
The functions ‘R_strtod’ and ‘R_atof’ now allow hexadecimal constants without an exponent, for compatibility with their C99 versions (PR#18805).
‘R CMD build’ and ‘R CMD check’ now allow reference output for demo scripts (‘demo/<demo>.Rout.save’ files) to be shipped with the package, as proposed by Torsten Hothorn in PR#18816.
‘kappa(A, exact=TRUE)’ for singular ‘A’ returns ‘Inf’ more generally, fixing PR#18817 reported by Mikael Jagan.
Fixed URLs of the sun spots (‘sunspot.month’ etc) data sets and mention future changes due to recalibration.
The parser now accepts hexadecimal constants with a decimal point without an exponent (taken as ‘p0’) as documented in ‘?NumericConstants’ (PR#18819).
‘rbind()’ now works correctly when inputs include a raw vector and a logical, integer or double vector - previously the inclusion of the latter was garbled.
‘smooth.spline()’ checks validity of its arguments ‘df.offset’ and ‘penalty’: it could segfault if they were ‘NULL’.
‘isGeneric(<primitive>, fdef=*, getName=TRUE)’ now also returns the name instead of just ‘TRUE’, fixing PR#18829 reported by Mikael Jagan.
‘isGeneric(fdef = print)’ now works, fixing PR#18369 thanks to Mikael Jagan.
‘sort(x, method = "qsort")’ made illegal accesses when ‘x’ has length 0.
‘dir.create()’ is protected against being passed an empty string as its ‘path’ argument.
Silent integer overflow could occur in the ‘exact’ computations for ‘fisher.test()’ for unrealistic inputs: this is now an error.
Some invalid C-level memory accesses are avoided for ‘loglin(, margin = NULL)’.
‘loglin(, param = TRUE)’ no longer gives an error in corner cases such as a one-dimensional input.
‘dev.capabilities() $ events’ now reports ‘"Idle"’ if the device provides it, fixing PR#18836, thanks to Trevor Davis.
‘arima(.., seasonal = <wrong-vector>)’ correctly errors now, ditto for ‘arima0()’, thanks to Norbert Kuder's report on the R-devel list.
‘binomial(<link>)$linkinv(eta)’ and ‘.. $mu.eta(eta)’ now also work for ‘"logit"’ link when ‘is.integer(eta)’.
‘as.roman(x)’ now should work platform independently, also for, e.g., ‘x = "IIIII"’ (= V) and ‘x = "IIIIII"’ (= VI).
‘R CMD Rd2pdf’ works again on an installed package directory containing LaTeX help (from option ‘--latex’), thanks to a report by Peter Ruckdeschel.
New dataset ‘gait’ thanks to Heather Turner and Ella Kaye.
‘R CMD build <pkg>’ excludes more file patterns when it tars the <pkg> directory, fixing both PR#18432 and PR#18434, for ‘vim’ and ‘GNU Global’ ‘emacs’ users, thanks to Dirk Eddelbuettel's patch.
The documentation of ‘gamma’ and ‘is.numeric’ is more specific, thanks to the contributors of PR#18677.
Error messages produced by ‘tools::parseLatex()’ are now more readable (PR#18855).
The ‘tools::parseLatex()’ parser made several parsing errors (PR#18855).
When ‘R CMD check’ aims at getting the time+date from a world clock, it is more robust against unexpected non-error results, thanks to Michael Chirico's PR#18852.
The ‘methods’ package internal function ‘.requirePackage()’ now calls ‘requireNamespace(p)’ instead of ‘require(p)’, hence no longer adding packages to the ‘search()’ path in cases methods or class definitions are needed. Consequently, previous workflows relying on the old behaviour will have to be amended by adding corresponding ‘library(p)’ calls.
More R-level messages use a common format containing ‘"character string"’ for more consistency and less translation work.
A C23 compiler (if available) can be selected for compilation of R and packages _via_ the ‘configure’ flag ‘--with-C23’. The compliance test is of support of new keywords: C23 does have feature-tests macros for many of its new features.
It is intended that this will become the default before release: already R's ‘configure’ may select a compiler which defaults to C23 (such as GCC 15).
When C23 is selected, packages using R's compiler settings can ask not to use C23 _via_ including ‘USE_C17’ in ‘SystemRequirements’ or can be installed by ‘R CMD INSTALL --use-C17’.
‘cbind()’ could segfault with ‘NULL’ inputs. (Seen when R was built with ‘gcc-14’, LTO and C99 inlining semantics.)
The argument of ‘as.environment()’ is named ‘x’ now, not ‘object’, as it was always documented and shown when printing it; thanks to Gael Millot's PR#18849.
‘R CMD build’ and ‘R CMD check’ now allow reference output for demo scripts (‘demo/<demo>.Rout.save’ files) to be shipped with the package, as proposed by Torsten Hothorn in PR#18816.
‘optimize(f, *)’ when ‘f(x)’ is not finite says more about the value in its ‘warning’ message. It no longer replaces ‘-Inf’ by the largest _positive_ finite number.
‘R CMD INSTALL’ (and hence ‘check’) now compile C++ code with ‘-DR_NO_REMAP’.
‘Writing R Extensions’ has been revised to describe the remapped entry points, for with the ‘Rf_’ prefix remains optional when used from C code (but is recommended for new C code).
Header ‘R_ext/Rboolean.h’ now defines the type ‘Rboolean’ as an alias
of the standard C type ‘bool’ in C23 mode.
Before release C++ ‘bool’ will be used if the header is included from C++.
The macro ‘_R_RBOOLEAN_IS_BOOL_’ is defined where ‘Rboolean’ is implemented _via_ ‘bool’.
[Deferred pending further testing.]
Header ‘R_ext/Rboolean.h’ now defines the type ‘Rboolean’ as an alias of the standard C type ‘bool’ in C23 mode.
Before release C++ ‘bool’ will be used if the header is included from C++.
The macro ‘_R_RBOOLEAN_IS_BOOL_’ is defined where ‘Rboolean’ is implemented _via_ ‘bool’.
[Deferred pending further testing.]
A C23 compiler (if available) can be selected for compilation of R and packages _via_ the ‘configure’ flag ‘--with-C23’.
It is intended that this will become the default before release. Partial C23 support has been available since GCC 9, and that in GCC 12 has been tested.
Header ‘R_ext/Rboolean.h’ now defines the type ‘Rboolean’ as an alias of the standard C type ‘bool’ in C23 mode.
Before release C++ ‘bool’ will be used if the header is included from C++.
The macro ‘_R_RBOOLEAN_IS_BOOL_’ is defined where ‘Rboolean’ is implemented _via_ ‘bool’.
‘tools::Rd2latex()’ no longer outputs an ‘\inputencoding{utf8}’ line by default; such a declaration is obsolete since LaTeX 2018-04-01.
‘tools::texi2pdf(..., texinputs=<paths>)’ now _pre_pends the specified <paths> to ‘TEXINPUTS’. When building R itself (‘doc/NEWS.pdf’ and base vignettes) or package manuals using ‘R CMD Rd2pdf’, it is ensured that this R's ‘Rd.sty’ takes precedence over any other (incompatible) versions in default “texmf trees”.
‘tools::texi2pdf(..., texinputs=<paths>)’ now _pre_pends the specified <paths> to ‘TEXINPUTS’. When building R (‘doc/NEWS.pdf’ and base vignettes), this now ensures that its own ‘Rd.sty’ takes precedence over (incompatible) versions in default “texmf trees”.
The ‘format()’ method for ‘"difftime"’ objects gets a new back compatible option ‘with.units’.
A ‘summary()’ method for ‘"difftime"’ objects which prints nicely, similar to those for ‘"Date"’ and ‘"POSIXct"’.
‘unique()’'s default method now also deals with ‘"difftime"’ objects.
Header ‘R_ext/Rboolean.h’ now defines the type ‘Rboolean’ as an alias of the standard C type ‘bool’.
Currently this is done from C (not C++) only if ‘__bool_true_false_are_defined’ is defined, which it is in C23 mode or if the C99 header ‘stdbool.h’ is included.
Before release ‘stdbool.h’ will be included from C if C23 mode is not supported, and C++ ‘bool’ will be used if called from C++.
The macro ‘_R_RBOOLEAN_IS_BOOL_’ is defined where ‘Rboolean’ is implemented _via_ ‘bool’.
‘R CMD Rd2pdf’ can now render the package manual from a ‘--latex’ installation also when the help contains figures.
There is preliminary support for C++26 in GCC >= 14, Apple clang >= 16 and LLVM clang >= 17.
‘R_GetCurrentSrcref(skip)’ now skips calls rather than ‘srcref’s, consistent with counting items in the ‘traceback()’ display. If ‘skip == NA_INTEGER’, it searches for the first ‘srcref’, starting at the current evaluation state and proceeding through the call stack; otherwise, it returns the ‘srcref’ of the requested entry from the call stack.
‘R CMD build’ now supports ‘--compression=zstd’ on platforms with sufficient support for ‘zstd’.
‘options(show.error.locations = TRUE)’ once again shows the most recent known location when an error is reported. Setting its value to ‘"bottom"’ is no longer supported. Numerical values are converted to logical.
C API function ‘R_GetCurrentSrcref(skip)’ now returns ‘srcref’ entries correctly. (Note that there is also a change to the interpretation of ‘skip’; see the C-LEVEL API entry above.)
‘tools::Rd2latex()’ now removes leading and trailing spaces from \alias entries as documented, fixing indexing and linking hiccups in some PDF manuals.
‘R CMD Rd2pdf’ works again on an installed package directory containing LaTeX help (from option ‘--latex’), thanks to a report by Peter Ruckdeschel.
A C23 compiler (if available) can be selected for compilation of R and packages _via_ the ‘configure’ flag ‘--with-C23’.
It is intended that this will become the default before release.
‘print(summary(<numbers>))’ gets new optional argument ‘zdigits’ to allow more flexible and consistent (double) rounding. The current default ‘zdigits = 4L’ is somewhat experimental. Specifying both ‘digits = *, zdigits = *’ allows behaviour independent of the global ‘digits’ option.
The ‘quartz()’ device now supports alpha masks. Thanks to George Stagg, Gwynn Gebeyhu, Heather Turner, and Tomek Gieorgijewski.
‘summary(<stl>)’ (which prints directly) finally gets the same ‘digits’ default as the formatting printing of default ‘summary()’ method results, and it is documented explicitly.
R can be installed using C23 (for example with ‘-std=gnu23’ or ‘-std=gnu2x’) with recent compilers including ‘gcc’ 12-14, Apple ‘clang’ 16 and LLVM ‘clang’ 17-19. (LLVM ‘clang’ 18 and 19 objected to apparently valid code using attributes accepted by all the other compilers.)
It can be installed with the upcoming (at the time of writing) ‘gcc’ 15, which defaults to C23.
‘binomial(<link>)$linkinv(eta)’ and ‘.. $mu.eta(eta)’ now also work for ‘"logit"’ link when ‘is.integer(eta)’.
‘as.roman(x)’ now should work platform independently, also for, e.g., ‘x = "IIIII"’ (= V) and ‘x = "IIIIII"’ (= VI).
There is some support for ‘zstd’ compression of tarballs in ‘tar()’ and ‘untar()’. (This depends on OS support of ‘libzstd’ or by ‘tar’.)
‘R CMD check’ gains option ‘--run-demo’ to check demo scripts like tests.
‘R CMD build’ now supports ‘--compression = zstd’ on platforms with sufficient support for ‘zstd’.
‘R CMD check’ with a true value for environment variable ‘_R_CHECK_BASHISMS_’ checks more thoroughly, including for ‘bash’ scripts and bashisms in components of ‘autoconf’-generated ‘configure’ scripts.
‘duplicated()’, ‘unique()’, and ‘anyDuplicated()’ now also work for class ‘expression’ vectors.
New function ‘use()’ to use packages in R scripts with full control over what gets added to the search path. (Actually already available since R 4.4.0.)
‘seq.Date(from, to, by, ....)’ and ‘seq.POSIXt(..)’ now also work when ‘from’ is missing and sufficient further arguments are provided, thanks to Michael Chirico's report, patch proposal in PR#17672 and ‘R Dev Day’ contributions.
The ‘Date’ method also works for ‘seq(from, to)’, when ‘by’ is missing and now defaults to ‘"1 days"’.
It is now documented (and tested) that the ‘by’ string may be _abbreviated_ in both ‘seq’ methods.
Both methods return or keep internal type ‘"integer"’ more consistently now. Also, ‘as.POSIXct({})’ is internally integer.
‘seq.Date(from, to, by, ....)’ and ‘seq.POSIXt(..)’ now also work when ‘from’ is missing and sufficient further arguments are provided, thanks to Michael Chirico's report, patch proposal in PR#17672 and ‘R Dev Day’ contributions.
The ‘Date’ method also works for ‘seq(from, to)’, when ‘by’ is missing and now defaults to ‘"1 days"’.
It is now documented (and tested) that the ‘by’ string may be _abbreviated_ in both ‘seq’ methods.
Both methods return or keep internal type ‘"integer"’ more consistently now. Also, ‘as.POSIXct({})’ is internally integer.
‘duplicated()’, ‘unique()’, and ‘anyDuplicated()’ now also work for class ‘expression’ vectors.
R can be installed using C23 (for example with ‘-std=gnu23’ or ‘-std=gnu2x’) with recent compilers including ‘gcc’ 14, Apple ‘clang’ 16 and LLVM ‘clang’ 17-19. (LLVM ‘clang’ 18 and 19 objected to apparently valid code using attributes accepted by all the other compilers.)
It can be installed with the upcoming (at the time of writing) ‘gcc’ 15, which defaults to C23.
‘binomial(<link>)$linkinv(eta)’ and ‘.. $mu.eta(eta)’ now also work for ‘"logit"’ link when ‘is.integer(eta)’.
‘as.roman(x)’ now should work platform independently, also for, e.g., ‘x = "IIIII"’ (= V) and ‘x = "IIIIII"’ (= VI).
‘binomial(<link>)$linkinv(eta)’ and ‘.. $mu.eta(eta)’ now also work for ‘"logit"’ link when ‘is.integer(eta)’.
Source installs now report the package version in the log.
‘binomial(<link>)$linkinv(eta)’ now also works for ‘"logit"’ link when ‘is.integer(eta)’.
The Rd \link macro now allows markup in the link text when the topic is given by the optional argument, e.g., ‘\link[=gamma]{\eqn{\Gamma(x)}}’.
‘seq.Date(from, to, by, ....)’ and ‘seq.POSIXt(..)’ now also work when ‘from’ is missing and sufficient further arguments are provided, thanks to Michael Chirico's report, patch proposal in PR#17672 and ‘R Dev Day’ contributions.
The ‘Date’ method also works for ‘seq(from, to)’, when ‘by’ is missing and now defaults to ‘"1 days"’.
It is now documented (and tested) that the ‘by’ string may be _abbreviated_ in both ‘seq’ methods.
Both methods return or keep internal type ‘"integer"’ more consistently now. Also, ‘as.POSIXct({})’ is internally integer.
Strict R headers are now the default. This removes the legacy definitions of ‘PI’, ‘Calloc’, ‘Realloc’ and ‘Free’: use ‘M_PI’, ‘R_Calloc’, ‘R_Realloc’ or ‘R_Free’ instead.
‘seq.Date(from, to, by, ....)’ and ‘seq.POSIXt(..)’ now also work when ‘from’ is missing and sufficient further arguments are provided, thanks to Michael Chirico's report, patch proposal in PR#17672 and ‘R Dev Day’ contributions.
The ‘Date’ method also works for ‘seq(from, to)’, when ‘by’ is missing and now defaults to ‘"1 days"’.
Both methods return or keep internal type ‘"integer"’ more consistently now. Also, ‘as.POSIXct({})’ is internally integer.
Strict R headers are now the default. This removes the legacy definitions of ‘PI’, ‘Calloc’, ‘Realloc’ and ‘Free’: use ‘M_PI’, ‘R_Calloc’, ‘R_Realloc’ or ‘R_Free’ instead.
_Pro tem_ ‘STRICT_R_HEADERS’ is defined in header ‘R_ext/RS.h’ if not already defined. This is not used in R itself and will be removed before release.
There is now support for installing the debug symbols for recommended packages on macOS: see ‘REC_INSTALL_OPT’ in file ‘config.site’.
Strict R headers are now the default. This removes the legacy definitions of ‘PI’, ‘Calloc’, ‘Realloc’ and ‘Free’: use ‘M_PI’, ‘R_Calloc’, ‘R_Realloc’ or ‘R_Free’ instead.
‘R CMD check’ with a true value for environment variable ‘_R_CHECK_BASHISMS_’ checks more thoroughly, including for ‘bash’ scripts and components of ‘autoconf’-generated ‘configure’ scripts.
‘arima(.., seasonal = <wrong-vector>)’ correctly errors now, ditto for ‘arima0()’, thanks to Norbert Kuder's report on the R-devel list.
‘seq.int(from, to, by, ....)’ when |by| = 1 now behaves as if ‘by’ was omitted, and hence returns ‘from:to’, possibly integer.
‘seq.Date(from, to, by, ....)’ and ‘seq.POSIXt(..)’ now also work when ‘from’ is missing and sufficient further arguments are provided, thanks to Michael Chirico's report, patch proposal in PR#17672 and ‘R Dev Day’ contributions.
The ‘Date’ method also works for ‘seq(from, to)’, when ‘by’ is missing and now defaults to ‘"1 days"’.
Enable defining ‘R_NO_REMAP_RMATH’ and calling ‘Rf_*()’ as has been documented in ‘Writing R Extensions’ for a while, fixing PR#18800 thanks to Mikael Jagan and Suharto Anggono.
‘R CMD INSTALL’ (and hence ‘check’) now by default compile C++ code with ‘-DR_NO_REMAP’. For the time being this can be reverted by setting environment variable ‘_R_CXX_USE_NO_REMAP_’ to a false value (but that will be removed in the near future).
‘Writing R Extensions’ has been revised to describe the remapped entry points, for with the ‘Rf_’ prefix remains optional when used from C code (but is recommended for new C code).
Some invalid C-level memory accesses are avoided for ‘loglin(, margin = NULL)’.
‘loglin(, param = TRUE)’ no longer gives an error in corner cases such as a one-dimensional input.
If ‘La_library()’ is empty, ‘sessionInfo()’ still reports ‘La_version()’ when available.
‘dev.capabilities() $ events’ now reports ‘"Idle"’ if the device provides it, fixing PR#18836, thanks to Trevor Davis.
Some invalid C-level memory accesses are avoided for ‘loglin(, margin = NULL)’.
‘loglin(, param = TRUE)’ no longer gives an eror in corner cases such as a one-dimensional input.
Some inalid C-level memory accesses are avoided for ‘loglin(, margin = NULL)’.
‘loglin(, param = TRUE)’ no longer gives an eror in corner cases such as a one-dimensional input.
When ‘s <- getOption("OutDec")’ is not a string of one character, a warning is signalled now whenever it is used in internal C code, notably when calling the default methods of ‘format()’.
Silent integer overflow could occur in the ‘exact’ computations for ‘fisher.test()’ for unrealistic inputs: this is now an error.
‘dir.create()’ is protected against being passed an empty string as its ‘path’ argument.
Enable defining ‘R_NO_REMAP_RMATH’ and calling ‘Rf_*()’ as has been documented in WRE for a while, fixing PR#18800 thanks to Mikael Jagan and Suharto Anggono.
‘pwilcox()’ and ‘qwilcox()’ now check for user interrupt less frequently.
‘pwilcox()’ and ‘qwilcox()’ now check for user interrupt less frequencly.
‘R CMD INSTALL’ (and hence ‘check’) now by default compile C++ code with ‘-DR_NO_REMAP’. For the time being this can be reverted by setting environment variable ‘_R_CXX_USE_NO_REMAP_’ to a false value (but that will be removed in the near future).
`Writing R Extensions' has been revised to describe the remapped entry points, for with the ‘Rf_’ prefix remains optional when used from C code (but is recommended for new C code).
The `quartz()` device now supports alpha masks. Thanks to George Stagg, Gwynn Gebeyhu, Heather Turner, and Tomek Gieorgijewski.
‘sort(x, method = "qsort")’ made illegal accesses when ‘x’ has length 0.
‘format()’ etc, using ‘decimal.mark = s’, by default getting ‘s <- getOption("OutDec")’, signals a warning to become an error in the future, when ‘s’ is not a string with exactly one character.
‘isGeneric(fdef = print)’ now works, fixing PR#18369 thanks to Mikael
Jagan.
‘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 "
‘isGeneric(fdef = print)’ now works, fixing PR#18369 thanks to Mikael Jagan.
‘install.packages()’ and ‘download.packages()’ download packages simultaneously using ‘libcurl’, significantly reducing download times when installing or downloading multiple packages.
Status reporting in ‘download.file()’ has been extended to report the outcome for individual files in simultaneous download.
‘smooth.spline()’ checks validity of its arguments ‘df.offset’ and ‘penalty’: it could segfault if they were ‘NULL’.
‘isGeneric(<primitive>, fdef=*, getName=TRUE)’ now also returns the name instead of just ‘TRUE’, fixing PR#18829 reported by Mikael Jagan.
The `quartz()` device now supports alpha masks. Thanks to George Stagg, Heather Turner, and Tomek Gieorgijewski.
‘cbind()’ could segfault with ‘NULL’ inputs. (Seen when R was built with ‘gcc14’, LTO and C99 inlining semantics.)
Fix segfault on ‘quartz()’ from ‘grid.glyph()’ call with ‘glyphInfo()’ that describes non-existent font (PR#18784). Thanks to Tomek Gieorgijewski.
‘options(scipen = NULL)’ and other invalid values now signal an error instead of invalidating ops relying on a finite integer value. Newly values outside the range -9 .. 9999 are warned about and set to a respective boundary or to the default ‘0’, e.g., in case of an ‘NA’.
‘rbind()’ now works correctly when inputs include a raw vector and a logical, integer or double vector - previously the inclusion of the latter was garbled.
‘isGeneric(fdef = print)’ now works, fixing PR#18369 thanks to Mikael Jagan.
‘options(scipen = NULL)’ and other invalid values now signal an error instead of invalidating ops relying on a finite integer value. Newly, values outside the range -9 .. 9999 are warned about and set to a respective boundary or to the default ‘0’, e.g., in case of an ‘NA’.
R can be installed using C23 (for example with ‘-std=gnu23’ or ‘-std=gnu2x’) with recent compilers including ‘gcc’ 14, Apple ‘clang’ 16 and LLVM ‘clang’ 17-19. (LLVM ‘clang’ 18 and 19 objected to apparently valid code using attributes accepted by all the other compilers.)
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 now for Fortran-callable entry points which are part of the API.
‘Writing R Extensions’ has a new section ‘Moving into C API compliance’ to help package authors move away from using non-API endpoints. This section will continue to be updated as work on clarifying and tightening the C API continues.
New API function ‘R_mkClosure’. This checks that its arguments are valid and should be used instead of ‘allocSExp(CLOSXP’ followed by ‘SET_FORMALS’, ‘SET_BODY’, and ‘SET_CLOENV’.
New API functions ‘R_ClosureFormals’, ‘R_ClosureBody’, and ‘R_ClosureEnv’ for extracting closure components. The existing functions ‘R_ClosureExpr’ and ‘R_BytecodeExpr’ have also been added to the API.
New API function ‘R_ParentEnv’ corresponding to R's ‘parent.env()’.
Further non-API entry points have been added to those reported by ‘R CMD check’: ‘COMPLEX0’, ‘ddfind’, ‘DDVAL’, ‘ENSURE_NAMEDMAX’, ‘ENVFLAGS’, ‘FRAME’, ‘HASHTAB’, ‘INTERNAL’, ‘IS_ASCII’, ‘IS_UTF8’, ‘LEVELS’, ‘NAMED’, ‘PRSEEN’, ‘RDEBUG’, ‘REAL0’, ‘Rf_findVarInFrame3’, ‘SET_BODY’, ‘SET_CLOENV’, ‘SET_FORMALS’, ‘SET_PRSEEN’, ‘SET_RDEBUG’, ‘STRING_PTR’, ‘SYMVALUE’, and ‘VECTOR_PTR’. Any declarations for these in public header files will be removed in the near future, and they will be hidden where possible.
Some ‘R CMD check’ ‘NOTE’s on the use of non-API entry points have been upgraded to ‘WARNING’s in preparation for removing declarations and, where possible, hiding these entry points.
Additional non-API entry points have been added to those reported by ‘R CMD check’: ‘IS_LONG_VEC’, ‘PRCODE’, ‘PRENV’, ‘PRVALUE’, ‘R_nchar’, ‘Rf_NonNullStringMatch’, ‘R_shallow_duplicate_attr’, ‘Rf_StringBlank’, ‘SET_TYPEOF’, ‘TRUELENGTH’, ‘XLENGTH_EX’, and ‘XTRUELENGTH’.
The ‘print()’ method for date-time objects (‘POSIX.t’) gets an optional ‘digits’ argument for _fractional_ seconds, passed to improved ‘format.POSIXlt()’; consequently, ‘print(<date.time>, digits = n)’ allows to print fractions of seconds.
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 now for Fortran-callable entry points which are part of the API.
New API function ‘R_mkClosure’. This checks that its arguments are
valid and should be used instead of ‘allocSExp(CLOSXP’ followed by
‘SET_FORMALS’, ‘SET_BODY’, and ‘SET_CLOENV’.
New API functions ‘R_ClosureFormals’, ‘R_ClosureBody’, and
‘R_ClosureEnv’ for extracting closure components. The existing
functions ‘R_ClosureExpr’ and ‘R_BytecodeExpr’ have also been added to
the API.
New API function ‘R_ParentEnv’.
Some non-API entry points have been added to those reported by ‘R CMD
check’: ‘COMPLEX0’, ‘ddfind’, ‘DDVAL’, ‘ENSURE_NAMEDMAX’, ‘ENVFLAGS’,
‘FRAME’, ‘HASHTAB’, ‘INTERNAL’, ‘IS_ASCII’, ‘IS_UTF8’, ‘LEVELS’,
‘NAMED’, ‘PRSEEN’, ‘RDEBUG’, ‘REAL0’, ‘Rf_findVarInFrame3’, ‘SET_BODY’,
‘SET_CLOENV’, ‘SET_FORMALS’, ‘SET_PRSEEN’, ‘SET_RDEBUG’, ‘STRING_PTR’,
‘SYMVALUE’, and ‘VECTOR_PTR’. Any declarations for these in public
header files will be removed in the near future, and they will be
hidden where possible.
‘Writing R Extensions’ has a new section ‘Moving into C API compliance’
to help package authors move away from using non-API endpoints. This
section will continue to be updated as work on clarifying and
tightening the C API continues.
Some ‘NOTE’s for use of non-API entry points have been upgraded to
‘WARNING’s in preparation for removing declarations and, where
possible, hiding these entry points.
Additional non-API entry points added to those reported by ‘R CMD
check’: ‘IS_LONG_VEC’, ‘PRCODE’, ‘PRENV’, ‘PRVALUE’, ‘R_nchar’,
‘Rf_NonNullStringMatch’, ‘R_shallow_duplicate_attr’, ‘Rf_StringBlank’,
‘SET_TYPEOF’, ‘TRUELENGTH’, ‘XLENGTH_EX’, and ‘XTRUELENGTH’.
‘SET_TYPEOF’ now signals an error unless the old and new types have compatible memory structure and content. Use of ‘SET_TYPE’ in package C code should be avoided and may be deprecated in the near future. It is better to allocate an object of the desired type in the first place.
The set of LAPACK (double and complex) routines in headers ‘R_ext/Lapack.h’ and ‘R_ext/Applic.h’ has been extended, mostly to routines actually in use by packages.
Memory allocation messages now use the (non-SI notation) ‘"Mb"’, ‘"Gb"’ , ..., and ‘"Mbytes"’ strings as _arguments_ instead of as part of the (translatable format) string. This is one step for PR#18297; from Henrik Bengtsson.
Header ‘R_ext/Constants.h’ (included by ‘R.h’) now always includes header ‘float.h’ or ‘cfloat’ for constants such as ‘DBL_MAX’.
The deprecated and seemingly never-used S-compatibility macros ‘F77_COM’ and ‘F77_COMDECL’ have been removed from header ‘R_ext/RS.h’.
‘debug()’ and ‘debugonce(fun)’ now also accept a string ‘fun’ when it names an S4 generic, fixing PR#18822 thanks to Mikael Jagan.
‘debugonce(<S4-simple-body>, signature=*)’ now works correctly when “called twice”, fixing PR#18824 thanks to Mikael Jagan.
‘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.
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 now for Fortran-callable entry points which are part of the API.
‘R CMD INSTALL’ (and hence ‘check’) now by default compile C++ code with ‘-DR_NO_REMAP’. For the time being this can be reverted by setting environment variable‘_R_CXX_USE_NO_REMAP_’ to a false value (but that will be removed in the near future).
`Writing R Extensions' has been revised to describe the remapped entry points, for with the ‘Rf_’ prefix remains optional when used from C code (but is recommended for new C code).
‘R CMD check’ now reports more warnings on long-deprecated/obsolete Fortran features reported by ‘gfortran -Wall’. For hints on how to modernize these, see <https://fortranwiki.org/fortran/show/Modernizing+Old+Fortran>.
The ‘sunspot.month’ data have been updated to Oct 2024; because of recalibration also historical numbers are changed, and we keep the previous data as ‘sunspot.m2014’ for reproducibility.
‘axisTicks(usr, ...)’ documentation clarification for ‘log=TRUE’, fixing bug PR#18821 thanks to Duncan Murdoch.
‘debug()’ and ‘debugonce(fun)’ now also accept a string ‘fun’ when it names an S4 generic, fixing PR#18822 thanks to Michael Jagan.
‘debugonce(<S4-simple-body>, signature=*)’ now works correctly when “called twice”, fixing PR#18824 thanks to Michael Jagan.
Strict R headers are now the default. This removes the legacy definitions of ‘PI’, ‘Calloc’, ‘Realloc’ and ‘Free’: use ‘M_PI’, ‘R_Calloc’, ‘R_Realloc’ or ‘R_Free’ instead.
_Pro tem_ ‘STRICT_R_HEADERS’ is defined in header ‘R_ext/RS.h’ if not already defined. This is not used in R itself and will be removed before release.
Header ‘R_ext/Constants.h’ (included by ‘R.h’) now always includes header ‘float.h’ or ‘cfloat’ for constants such as ‘DBL_MAX’
Defining ‘STRICT_R_HEADERS’ is now the default. This removes the legacy definitions of ‘PI’, ‘Calloc’, ‘Realloc’ and ‘Free’: use ‘M_PI’, ‘R_Calloc’, ‘R_Realloc’ or ‘R_Free’ instead.
Installation will define ‘STRICT_R_HEADERS’ if environment variable
‘_R_USE_STRICT_R_HEADERS_’ is set to a true value: this is done by ‘R
CMD check --as-cran’.
‘R CMD INSTALL’ (and hence ‘check’) now by default compile C++ code with ‘-DR_NO_REMAP’. For the time being this can be reverted by setting environment variable‘_R_CXX_USE_NO_REMAP_’ to a false value (but that will be removed in the near future).
The functions ‘R_strtod’ and ‘R_atof’ now allow hexadecimal constants
without an exponent, for compatibility with their C99 versions
(PR#18805).
The parser now accepts hexadecimal constants with a decimal point
without an exponent (taken as ‘p0’) as documented in
‘?NumericConstants’ (PR#18819).
The functions ‘R_strtod’ and ‘R_atof’ now allow hexadecimal constants without an exponent, for compatibility with their C99 versions (PR#18805).
The parser now accepts hexadecimal constants with a decimal point without an exponent (taken as ‘p0’) as documented in ‘?NumericConstants’ (PR#18819).
The functions ‘R_strtod’ and ‘R_atof’ now allow hexadecimal constants without an exponent, for compatibility with their C99 versions (PR#18805).
The parser now accepts hexadecimal constants with a decimal point without an exponent (taken as ‘p0’) as documented in ‘?NumericConstants’ (PR#18819).
Fixed URLs of the sun spots (‘sunspot.month’ etc) data sets and mention future changes due to recalibration.
‘kappa(A, exact=TRUE)’ for singular ‘A’ returns ‘Inf’ more generally, fixing PR#18817 reported by Mikael Jagan.
‘kappa(A, exact=TRUE)’ returns ‘Inf’ more generally, fixing PR#18817 reported by Mikael Jagan.
The functions ‘R_strtod’ and ‘R_atof’ now allow hexadecimal constants without an exponent, for compatibility with their C99 versions, (PR#18805)
Since almost all supported R versions now use UTF-8, ‘R CMD check’ no longer by default reports on marked UTF-8 or Latin-1 strings in character data. Set environment variable ‘_R_CHECK_PACKAGE_DATASETS_SUPPRESS_NOTES_’ to a false value for the previous behaviour.
Since almost all supported R versions now use UTF-8, ‘R CMD check’ no longer by default reports on marked UTF-8 or Latin-1 strings in character data. Set environment variable ‘_R_CHECK_PACKAGE_DATASETS_SUPPRESS_NOTES_’ to a false value for the previous behaviour.
Strings marked as ‘"bytes"’ now give a warning rather than a NOTE. These are better supplied as raw vectors.
‘seq.Date()’ no longer explicitly coerces results from integer to double, analogously with ‘seq.default()’, ‘seq.int()’ and ‘seq.POSIXt()’, resolving a _modified_ PR#18782.
‘getMethods(*, table=TRUE)’ is also deprecated.
‘available.packages()’ and ‘install.packages()’ get an optional switch ‘cache_user_dir’, somewhat experimentally.
Since almost all supported R versions now use UTF-8, ‘R CMD check’ no longer by default reports on marked UTF-8 or Latin-1 strings in character data. Set environment variable ‘_R_CHECK_PACKAGE_DATASETS_SUPPRESS_NOTES_’ to a false value for the previous behaviour.
Strings markaed as ‘"bytes"’ now give a warning rather than a NOTE. These are better supplied as raw vectors.
‘tools::checkDocFiles()’ notes more cases of usage documentation without corresponding \alias.
‘update_pkg_po()’ now copies ‘.mo’ files to the ‘translation’ package even if a ‘DESCRIPTION’ file exists, thanks to Michael Chirico fixing PR#18694.
Since all supported R versions now use UTF-8, ‘R CMD check’ no longer by default reports on marked strings in character data. Set environment variable ‘_R_CHECK_PACKAGE_DATASETS_SUPPRESS_NOTES_’ to a false value for the previous behaviour.
‘tools::checkDocFiles()’ now also notes _nullary_ functions shown in the usage section without corresponding \alias.
More R level messages use a common format containing ‘"character string"’ for more consistency and less translation work.
‘methods’' internal ‘.requirePackage()’ now re-enables primitive method
dispatch when needed; thanks to Ivan Krylov for demystifying CRAN
package check failures on the R-devel mailing lists.
‘methods’' internal ‘.requirePackage()’ now re-enables primitive method dispatch when needed; thanks to Ivan Krylov for demystifying CRAN package check failures on the R-devel mailing list.
The S-compatibility macros ‘F77_COM’ and ‘F77_COMDECL’ defined in header ‘R_ext/RS.h’ are deprecated and will be removed shortly. We could find no record of their use.
Mathlib function ‘lgammacor(x)’ no longer warns about underflow to zero for large ‘x’.
Text widths and heights were incorrectly reported by the Quartz device if the drawing context didn't exist yet (typically when drawing off-screen to a window that is yet to appear, see PR#18591).
The Quartz device could segfault in cases where paths with spaces are used in the new glyph drawing API. Thanks to Tomek Gieorgijewski (PR#18758).
On macOS in R CRAN builds, it is again possible to read little-endian UTF-16 text with a BOM from a connection using ‘encoding="UTF-16"’. Users building R from source should avoid using the system ‘libiconv’ in macOS 14.1 and later.
‘methods’ package internal ‘.requirePackage()’ now calls ‘requireNamespace(p)’ instead of ‘require(p)’, hence no longer adding packages to the ‘search()’ path in cases methods or class definitions are needed. Consequently, previous workflows relying on the old behaviour will have to be amended by adding corresponding ‘library(p)’ calls.
‘rowSums(A, dims = dd)’, ‘colMeans(..)’, etc, give a more helpful error message when ‘dd’ is not of length one, thanks to Michael Chirico's PR#18811.
‘methods’' internal ‘.requirePackage()’ now re-enables primitive method dispatch when needed; thanks to Ivan Krylov for demystifying CRAN package check failures on the R-devel mailing lists.
The ‘xtfrm()’ method for class ‘"AsIs"’ is now considerably faster thanks to a patch provided by Ivan Krylov.
The ‘merge()’ method for data frames will no longer convert row names used for indexing using ‘I()’, which will lead to faster execution in cases where ‘sort = TRUE’ and ‘all.x’ and/or ‘all.y’ are set to ‘TRUE’.
On macOS in R CRAN builds, it is again possible to read little-endian UTF-16 text with a BOM from a connection using ‘encoding="UTF-16"’. Users building R from source should avoid using the system ‘libiconv’ in macOS 14.1 and later.
On macOS in R CRAN builds, it is again possible to read little-endian UTF-16 text with a BOM from a connection using ‘encoding="UTF-16"’. Users building R from source should avoid using the system libiconv in macOS 14.1 and later.