This blog is updated daily.
A general description is here.
Fix (new) bug in ‘hcl.colors(2, *)’, by Achim Zeileis (PR#18523).
Package code syntax on Windows is checked in UTF-8 when UTF-8 is the native encoding.
New startup option ‘--max-connections’ to set the maximum number of connections for the session. Defaults to 128 as before: allowed values up to 4096 (but resource limits may in practice restrict to smaller values).
‘S3method(<gen>, <class>, <func>)’ in the ‘NAMESPACE’ file now works (again) when ‘<func>’ is visible from the namespace, e.g., imported, or in base.
‘as.complex(x)’ now returns ‘NA_complex_’ also for ‘NA_real_’ arguments, as it does for all other ‘NA’s.
‘head(., <illegal>)’ and ‘tail(..)’ now produce more useful ‘"Error in ...."’ error messages, fixing PR#18362.
The C prototypes for LAPACK calls ‘dspgv’ and ‘dtptrs’ in ‘R_exts/Lapack.h’ had one too many and one too few character length arguments - but this has not caused any known issues. To get the corrected prototypes, include
#include <Rconfig.h> // for PR18534fixed #ifdef PR18534fixed # define usePR18534fix 1 #endif #include <R_exts/Lapack.h>
in your C/C++ code (PR#18534).
‘tools::xgettext()’ no longer extracts the (non-translatable) class names from ‘warningCondition’ and ‘errorCondition’ calls.
Startup banners, ‘R --version’, ‘sessionInfo()’ and ‘R CMD check’ no longer report ‘(64-bit)’ as part of the platform as this is almost universal - the increasingly rare 32-bit platforms will still report ‘(32-bit)’.
On Windows, ditto for window titles.
Startup banners and ‘R --version’ no longer report ‘(64-bit)’ as this is almost universal - the increasingly rare 32-bit platforms will still report ‘(32-bit)’.
On Windows, ditto for window titles.
Serializations can now be interrupted (e.g., by ‘Ctrl-C’ on a Unix-alike) if they take too long, as e.g., from ‘save.image()’, thanks to suggestions by Ivan Krylov and others on R-devel.
‘configure’ will warn if it encounters a 32-bit build, as that is nowadays almost untested.
‘tools::Rdiff()’ is now more robust against invalid strings, fixing installation tests on Windows without Rtools installed (PR#18530).
‘palette.colors()’ gains a ‘name’ argument that defaults to ‘FALSE’ controlling whether the vector of colours that is returned has names (where possible). PR#18529.
‘methods()’ and ‘.S3methods()’ gain a ‘all.names’ option for the (rare) case where functions starting with a ‘.’ should be included.
Serializations can now be interrupted (e.g., by ‘Ctrl-C’ on a Unix-alike) if they take too long, as e.g., from ‘save.image()’, thanks to suggestions by Ivan Krylow and others on R-devel.
In ‘setRepositories()’ the repositories can be set using their names via ‘name=’ instead of index ‘ind=’.
Directories are now omitted by ‘file.copy(,recursive = FALSE)’ and in ‘file.append()’ (PR#17337).
‘gsub()’ and ‘sub()’ are now more robust to integer overflow when reporting errors caused by too large input strings (PR#18346).
Top-level handlers are now more robust to attempts to remove a handler whilst handlers are running (PR#18508).
The handling of ‘Alt+F4’ in dialogs created on Windows using GraphApp has been fixed (PR#13870).
‘density()’ more consistently computes grid values for the FFT based convolution, following Robert Schlicht's analysis and proposal in PR#18337, correcting density values typically by a factor of about 0.999. Optional ‘old.coords=TRUE’ provides back compatibility.
The C-level API version of R's ‘integrate()’, ‘Rdqags()’ in ‘Applic.h’, now returns the correct number of integrand evaluations ‘neval’, fixing PR#18515 reported and diagnosed by Stephen Wade.
‘.S3methods()’, typically called from ‘methods()’, again marks methods from package ‘base’ as ‘visible’.
.
.
Many of the checks of esoteric Internet operations and those using unreliable external sites have been moved to a new target that is not run by default and primarily intended for the core developers. To run them use
cd tests; make test-Internet-dev
C API ‘Applic.h’ version of R's ‘integrate()’, ‘Rdqags()’ now returns the correct number of integrand evaluations ‘neval’, fixing PR#18515 reported and diagnosed by Stephen Wade.
.
‘as.complex(x)’ now returns ‘NA_complex_’ also for ‘NA_real_’, as it does for all other ‘NA’s.
Probability distribution functions ‘[dpq]<distrib>(x, *)’, but also ‘bessel[IKJY](x, .)’ are now consistently preserving ‘attributes(x)’ when ‘length(x) == 0’, e.g., for a 2 x 0 matrix, thanks to Karolis Koncevičius' report PR#18509.
Probablity distribution functions ‘[dpq]<distrib>(x, *)’, but also ‘bessel[IKJY](x, .)’ are now consistently preserving ‘attributes(x)’ when ‘length(x) == 0’, e.g., for a 2 x 0 matrix, thanks to Karolis Koncevičius' report PR#18509.
Group “Summary” computations such as ‘sum(1:3, 4, na.rm = 5, NA, 7, na.rm = LL)’ now give an error instead of either ‘17’ or ‘NN’ for ‘LL’ true or false, as proposed by Ivan Krylov on the R-devel mailing list. (This also means it is now an error to specify ‘na.rm’ more than once.)
Group “Summary” computations such as ‘sum(1:3, 4, na.rm=5, NA, 7, na.rm = LL)’ now give an error instead of either ‘17’ or ‘NN’ for ‘LL’ true or false, as proposed by Ivan Krylov on the R-devel mailing list.
Probablity distribution functions ‘[dpq]<distrib>(x, *)’, but also ‘bessel[IKJY](x, .)’ are now consistently preserving ‘attributes(x)’ when ‘length(x) == 0’, e.g., for a 2 x 0 matrix, thanks to Karolis Koncevičius report PR#18509.
The ‘"glm"’ method for ‘anova()’ computes test statistics and p-values by default, using a chi-squared test or an F test depending on whether the dispersion is fixed or free. Test statistics can be suppressed by giving argument ‘test’ a false logical value.
The ‘"glm"’ method for ‘anova()’ computes test statistics and p-values
by default, using a chi-squared test or an F test depending on whether
the dispersion is fixed or free. Test statistics can be suppressed by
giving argument ‘test’ a false logical value.
‘R CMD’ on Windows now skips the site profile with ‘--no-site-file’ and ‘--vanilla’ even when ‘R_PROFILE’ is set (PR#18512, from Kevin Ushey).
The ‘Rcomplex’ definition (in header ‘R_ext/Complex.h’) has been extended to prevent possible mis-compilation when interfacing with Fortran (PR#18430). The new definition causes compiler warnings with static initializers such as ‘{1, 2}’, which can be changed to ‘{.r=1, .i=2}’.
Using the new definition from C++ depends on compiler extensions supporting C features that have not been incorporated into the C++ standards but are available in ‘g++’ and ‘clang++’: this may result in C++ compiler warnings but these have been worked around for recent versions of common compilers (GCC, Apple/LLVM clang, Intel).
It is intended to change the inclusion of header ‘R_ext/Complex.h’ by other R headers, so C/C++ code files which make use of ‘Rcomplex’ should include that header explicitly.
The ‘Rcomplex’ definition (in header ‘R_ext/Complex.h’) has been extended to prevent possible mis-compilation when interfacing with Fortran (PR#18430). The new definition causes compiler warnings with static initializers such as ‘{1, 2}’, which can be changed to ‘{.r=1, .i=2}’.
Using the new definition from C++ depends on compiler extensions supporting C features that have not been incorporated into the C++ standards but are available in ‘g++’ and ‘clang++’: this may result in C++ compiler warnings.
It is intended to change the inclusion of header ‘R_ext/Complex.h’ by other R headers, so C/C++ code files which make use of ‘Rcomplex’ should include that header explicitly.
The ‘Rcomplex’ definition (in header ‘R_ext/Complex.h’) has been extended to prevent possible mis-compilation when interfacing with Fortran (PR#18430). The new definition causes compiler warnings with static initializers such as ‘{1, 2}’, which can be changed to ‘{.r=1, .i=2}’.
Using the new definition from C++ depends on compiler extensions supporting C features that have not been incorporated into the C++ standards but are available in ‘g++’ and ‘clang++’: this may result in C++ compiler warnings.
‘bs()’ and ‘ns()’ in the (typical) case of automatic knot construction, when some of the supposedly inner knots coincide with boundary knots, now moves them inside (with a warning), building on PR#18442 by Ben Bolker.
The ‘tapply()’ function now accepts a data frame as its ‘X’ argument, and allows ‘INDEX’ to be a formula in that case. ‘by.data.frame()’ similarly allows ‘INDICES’ to be a formula.
The ‘"glm"’ method for ‘anova()’ computes test statistics and p-values by default, using a chi-squared test or an F test depending on whether the dispersion is fixed or free. Test statistics can be suppressed by giving argument ‘test’ a false logical value.
New function ‘array2DF()’ to convert arrays to data frames, particularly useful for the list arrays created by ‘tapply()’.
The performance of ‘df[j] <- value’ (including for missing ‘j’) and ‘write.table(df)’ has been improved for data frames ‘df’ with a large number of columns. (Thanks to Gabriel Becker's PR#18500, PR#18503 and discussants, prompted by a report from Toby Dylan Hocking on the R-devel mailing list.)
‘Rcomplex’ definition has been extended to prevent mis-compilation when interfacing with Fortran (PR#18430). The new definition causes compiler warnings with static initializers such as ‘{1, 2}’, which can be changed to ‘{.r=1, .i=2}’. The new definition depends on C++ compiler extensions supporting C features that haven't been incorporated into the C++ standards, which may result in C++ compiler warnings.
New generic ‘.AtNames()’ added to enable class-specific completions after ‘@’. The formerly internal function ‘findMatches()’ is now exported, mainly for use in methods for ‘.DollarNames()’ and ‘.AtNames()’.
The matrix multiply operator ‘%*%’ is now an S3 generic, belonging to new group generic ‘matrixOps’. From Tomasz Kalinowski's contribution in PR#18483.
The performance of ‘write.table()’ has been improved for data frames with a large number of unclassed columns. (Thanks to Gabriel Becker's PR#18500, prompted by a report from Toby Dylan Hocking on the R-devel mailing list.)
New generic ‘chooseOpsMethod()’ provides a mechanism for objects to resolve cases where two suitable methods are found for an Ops Group Generic. This supports experimenting with alternative object systems. Based on contributions by Tomasz Kalinowski in PR#18484.
The ‘"data.frame"’ method for ‘subset()’ now warns about extraneous arguments, typically catching the use of ‘=’ instead of ‘==’ in the ‘subset’ expression.
‘density(x, weights = *)’ now warns if automatic bandwidth selection happens without using ‘weights’; new optional ‘warnWbw’ may suppress the warning. Prompted by Christoph Dalitz' PR#18490 and its discussants.
The ‘print()’ method for class ‘"summary.glm"’ no longer shows summary statistics for the deviance residuals by default. Its optional argument ‘show.residuals’ can be used to show them if required.
The ‘tapply()’ function now accepts a data frame as its ‘X’ argument, and allows ‘INDEX’ to be a formula in that case.
The ‘"glm"’ method for ‘anova()’ computes test statistics and p-values by default, using a Chisq test or an F test depending on whether the dispersion is fixed or free. Test statistics can be suppressed by giving argument ‘test’ a false logical value.
new generic ‘chooseOpsMethod()’ provides a mechanism for objects to resolve cases where two suitable methods are found for an Ops Group Generic. This supports experimenting with alternative object systems. Based on contributions by Tomasz Kalinowski in PR#18484.
‘inherits(x, what)’ now accepts values other than a simple character vector for argument ‘what’. A new generic, ‘nameOfClass()’, is called to resolve the class name from ‘what’. This supports experimenting with alternative object systems. Based on contributions by Tomasz Kalinowski in PR#18485.
‘anova.glm()’ prints test statistics and p-values by default, using either a Chisq test or an F test, depending on whether the dispersion is fixed or free. Test statistics can be suppressed with ‘test=FALSE’.
The ‘tapply()’ function now accepts a data frame as the ‘X’, and allows ‘INDEX’ to be a formula in that case.
.
System valgrind headers are required to use ‘configure’ option ‘--with-valgrind-instrumentation’ with value ‘1’ or ‘2’.
‘libcurl’ 8.x is now accepted by ‘configure’: despite a change in major version number it changes neither API nor ABI.
Calling ‘&&’ or ‘||’ with LHS or (if evaluated) RHS of length greater than one is now always an error, with a report of the form
'length = 4' in coercion to 'logical(1)'
Environment variable ‘_R_CHECK_LENGTH_1_LOGIC2_’ no longer has any effect.
The included BLAS sources have been updated to those shipped with LAPACK version 3.10.1. (This caused some platform-dependent changes to package check output.) And then to the sources from LAPACK version 3.11.0 (with changes only to double complex subroutines).
The included LAPACK sources have been updated to include the four Fortran 90 routines rather than their Fortran 77 predecessors. This may give some different signs in SVDs or eigendecompositions.. (This completes the transition to LAPACK 3.10.x begun in R 4.2.0.)
The LAPACK sources have been updated to version 3.11.0. (No new subroutines have been added, so this almost entirely bug fixes: Those fixes do affect some computations with ‘NaN’s, including R's ‘NA’.)
The parser now signals _classed_ errors, notably in case of the pipe operator ‘|>’. The error object and message now give line and column numbers, mostly as proposed and provided by Duncan Murdoch in PR#18328.
‘toeplitz()’ is now generalized for asymmetric cases, with a ‘toeplitz2()’ variant.
‘xy.coords()’ and ‘xyz.coords()’ and consequently, e.g., ‘plot(x,y, log = "y")’ now signal a _classed_ warning about negative values of y (where ‘log(.)’ is ‘NA’). Such a warning can be specifically suppressed or caught otherwise.
Regular expression functions now check more thoroughly whether their inputs are valid strings (in their encoding, e.g. in UTF-8).
The performance of ‘grep()’, ‘sub()’, ‘gsub()’ and ‘strsplit()’ has been improved, particularly with ‘perl = TRUE’ and ‘fixed = TRUE’. Use of ‘useBytes = TRUE’ for performance reasons should no longer be needed and is discouraged: it may lead to incorrect results.
‘apropos()’ gains an argument ‘dot_internals’ which is used by the completion (‘help(rcompgen)’) engine to also see ‘base’ internals such as ‘.POSIXct()’.
Support in ‘tools::Rdiff()’ for comparing uncompressed PDF files is further reduced - see its help page.
‘qqplot(x, y, ...)’ gains ‘conf.level’ and ‘conf.args’ arguments for computing and plotting a confidence band for the treatment function transforming the distribution of ‘x’ into the distribution of ‘y ’ (Switzer, 1976, _Biometrika_). Contributed by Torsten Hothorn.
Performance of ‘package_dependencies()’ has been improved for cases when the number of dependencies is large.
Strings newly created by ‘gsub()’, ‘sub()’ and ‘strsplit()’, when any of the inputs is marked as ‘"bytes"’, are also marked as ‘"bytes"’. This reduces the risk of creating invalid strings and accidental substitution of bytes deemed invalid.
Support for ‘readLines(encoding = "bytes")’ has been added to allow processing special text files byte-by-byte, without creating invalid strings.
‘iconv(from = "")’ now takes into account any declared encoding of the input elements and uses it in preference to the native encoding. This reduces the risk of accidental creation of invalid strings, particularly when different elements of the input have different encoding (including ‘"bytes"’).
Package repositories in ‘getOption("repos")’ are now initialized from the ‘repositories’ file when ‘utils’ is loaded (if not already set, e.g., in ‘.Rprofile’). (From a report and patch proposal by Gabriel Becker in PR#18405.)
‘compactPDF()’ gets a ‘verbose’ option.
‘type.convert()’ and hence ‘read.table()’ get new option ‘tryLogical = TRUE’ with back compatible default. When set to false, converts ‘"F"’ or ‘"T"’ columns to character.
Added new unit prefixes ‘"R"’ and ‘"Q"’ for abbreviating (unrealistically large) sizes beyond 10^{27} in ‘standard = "SI"’, thanks to Henrik Bengtsson's PR#18435.
‘as.data.frame()’'s default method now also works fine with atomic objects inheriting from classes such as ‘"roman"’, ‘"octmode"’ and ‘"hexmode"’, such fulfilling the wish of PR#18421, by Benjamin Feakins.
The ‘as.data.frame.vector()’ utility now errors for wrong-length ‘row.names’. It warned for almost six years, with “Will be an error!”.
‘sessionInfo()’ now also contains ‘La_version()’ and reports codepage and timezone when relevant, in both ‘print()’ and ‘toLatex()’ methods which also get new option ‘tzone’ for displaying timezone information when ‘locale = FALSE’.
New function ‘R_compiled_by()’ reports the C and Fortran compilers used to build R, if known.
‘predict(<lm>, newdata = *)’ no longer unnecessarily creates an ‘offset’ of all ‘0’s.
‘solve()’ for complex inputs now uses argument ‘tol’ and by default checks for ‘computational singularity’ (as it long has done for numeric inputs).
‘predict(<rank-deficient lm>, newdata=*)’ now obeys a new argument ‘rankdeficient’, with new default ‘"warnif"’, warning only if there are non-estimable cases in ‘newdata’. Other options include ‘rankdeficient = "NA"’, predicting ‘NA’ for non-estimable ‘newdata’ cases. This addresses PR#15072 by Russ Lenth and is based on his original proposal and discussions in PR#16158 also by David Firth and Elin Waring. Still somewhat experimental.
‘Rgui’ console implementation now works better with the ‘NVDA’ screen reader when the full blinking cursor is selected. The underlying improvements in cursor handling may help also other screen readers on Windows.
The drop-field control in GraphApp can now be left with the TAB key and all controls can be navigated in the reverse order using the Shift+TAB key, improving accessibility of the ‘Rgui’ configuration editor.
‘qnorm(<very large negative>, log.p=TRUE)’ is now fully accurate (instead of to “only” minimally five digits).
‘demo(error.catching)’ now also shows off ‘withWarnings()’ and ‘tryCatchWEMs()’.
As an experimental feature the placeholder ‘_’ can now also be used in the ‘rhs’ of a forward pipe ‘|>’ expression as the first argument in an extraction call, such as ‘_$coef’. More generally, it can be used as the head of a chain of extractions, such as ‘_$coef[[2]]’.
Spaces in the environment variable used to choose the R session's temporary directory (‘TMPDIR’, ‘TMP’ and ‘TEMP’ are tried in turn) are now fatal. (On Windows the ‘short path’ version of the path is tried and used if that does not contain a space.)
‘all.equal.numeric()’ gets a new optional switch ‘giveErr’ to return the numeric error as attribute. Relatedly, ‘stopifnot(all.equal<some>(a, b, ..))’ is as “smart” now, as ‘stopifnot(all.equal(....))’ has been already, thus allowing customized ‘all.equal<Some>()’ wrappers.
R on Windows is now able to work with path names longer than 260 characters when these are enabled in the system (requires at least Windows 10 version 1607). Packages should be updated to work with long paths as well, instead of assuming ‘PATH_MAX’ to be the maximum length. Custom front-ends and applications embedding R need to update their manifests if they wish to allow this feature. See <URL: https://blog.r-project.org/2023/03/07/path-length-limit-on-windows> for more information.
‘Object not found’ and ‘Missing argument’ errors now give a more accurate error context. Patch provided by Lionel Henry in PR#18241.
The ‘@’ operator is now an S3 generic. Based on contributions by Tomasz Kalinowski in PR#18482.
Detection of BLAS/LAPACK in use (‘sessionInfo()’) with FlexiBLAS now reports the current backend.
‘subset.data.frame()’ now warns about extraneous arguments, typically catching the use of ‘=’ instead of ‘==’ in the ‘subset’ expression.
Calling ‘a:b’ when numeric ‘a’ or ‘b’ is longer than one may now be made into an error by setting environment variable ‘_R_CHECK_LENGTH_COLON_’ to a true value, along the proposal in PR#18419 by Henrik Bengtsson.
‘density(x, weights=*)’ now warns if automatic bandwidth selection happens without using ‘weights’; new optional ‘warnWbw’ may suppress the warning. Prompted by Christoph Dalitz' PR#18490 and its discussants.
‘rm(list = *)’ is faster and more readable thanks to Kevin Ushey's PR#18492.
The ‘plot.lm()’ function no longer produces a normal Q-Q plot for GLMs. Instead it plots a half-normal Q-Q plot of the absolute value of the standardized deviance residuals.
The ‘print.summary.glm()’ function no longer shows summary statistics for the deviance residuals by default. The optional argument ‘show.residuals’ can be used to show them if required.
On platforms where (non-UTC) datetimes before 1902 (or before 1900 as with system functions on recent macOS) are guessed by extrapolating time zones from 1902-2037, there is a warning at the first use of extrapolation in a session. (As all time zones post 2037 are extrapolation, we do not warn on those.)
(Platforms using ‘--with-internal-tzone’, including Windows and by default macOS). How years are printed in dates or date-times can be controlled by environment variable ‘R_PAD_YEARS_BY_ZERO’. The default remains to pad to 4 digits by zeroes, but setting value ‘no’ gives no padding (as used by default by ‘glibc’).
‘strftime()’ tries harder to determine the offset for the ‘"%z"’ format, and succeeds on the mainstream R platforms.
‘strftime()’ has a limit of 2048 bytes on the string produced - attempting to exceed this is an error. (Previously it silently truncated at 255 bytes.)
‘sessionInfo()’ records (and by default prints) the system time zone as part of the locale information. Also, the source (system/internal) of the date-time conversion and printing functions.
Objects of class ‘"POSIXlt"’ created in this version of R always have 11 components: component ‘zone’ is always set, and component ‘gmtoff’ is set for times in UTC and usually set on the (almost all) platforms which have C-level support, otherwise is ‘NA’.
There are comprehensive validity checks on the structure of objects of class ‘"POSIXlt"’ when converting (including formatting and printing). (This avoids mis-conversions of hand-crafted objects.)
There is some support for using the native date-time routines on macOS: this is only viable on recent versions (e.g. 12.6 and 13) and does get wrong some historical changes (before 1900, during WWII). Use of ‘--with-internal-tzone’ remains the default.
‘as.POSIXct(<numeric>)’ and ‘as.POSIXlt(.)’ (without specifying ‘origin’) now work. So does ‘as.Date(<numeric>)’.
‘as.Date.POSIXct(., tz)’ now treats several ‘tz’ values, notably ‘"GMT"’ as equivalent to ‘"UTC"’, proposed and improved by Michael Chirico and Joshua Ulrich in PR#17674.
Experimental ‘balancePOSIXlt()’ utility allows using “ragged” and or out-of-range ‘"POSIXlt"’ objects more correctly, e.g., in subsetting and subassignments. Such objects are now documented.
More experimentally, a ‘"POSIXlt"’ object may have an attribute ‘"balanced"’ indicating if it is known to be filled or fully balanced.
Functions ‘axis.Date()’ and ‘axis.POSIXct()’ are rewritten to gain better default tick locations and better default formats by using ‘prettyDate()’. Thanks to Swetlana Herbrandt.
The mapping of Windows' names for time zones to IANA's ‘Olson’ names has been updated. When ICU is available (it is by default), it is used to get a mapping for the current region set in Windows. This can be overridden by setting environment variable ‘TZ’ to the desired Olson name - see ‘OlsonNames()’ for those currently available.
The graphics engine version, ‘R_GE_version’, has been bumped to ‘16’ and so packages that provide graphics devices should be reinstalled.
The ‘grDevices’ and ‘grid’ packages have new functions for rendering typeset glyphs, primarily: ‘grDevices::glyphInfo()’ and ‘grid::grid.glyph()’.
Rendering of typeset glyphs is only supported so far on the Cairo-based graphics devices and on the ‘pdf()’ and ‘quartz()’ devices.
The defined behaviour for ‘"clear"’ and ‘"source"’ compositing operators (via ‘grid::grid.group()’) has been changed (to align better with simple interpretation of original Porter-Duff definitions).
Support for gradients, patterns, clipping paths, masks, groups, compositing operators, and affine transformations has been added to the ‘quartz()’ device.
A system installation of generic LAPACK 3.10.0 or later will be preferred to the version in the R sources.
‘configure’ option ‘--with-lapack=no’ (equivalently ‘--without-lapack’) forces compilation of the internal LAPACK sources.
If ‘--with-lapack’ is not specified, a system ‘liblapack’ is looked for and used if it reports version 3.10.0 or later and does not contain BLAS routines.
Packages using LAPACK will need to be reinstalled if this changes to using an external library.
On ‘aarch64’ Linux platforms using GCC, ‘configure’ now defaults to ‘-fPIC’ (instead of ‘-fpic’), as desired in PR#18326.
‘configure’ now checks conversion of datetimes between ‘POSIXlt’ and ‘POSIXct’ around year 2020. Failure (which has been seen on platforms missing ‘tzdata’) is fatal.
If ‘configure’ option ‘--with-valgrind-instrumentation’ is given value ‘1’ or ‘2’, option ‘--with-system-valgrind-headers’ is now the default and ignored (with a warning). It is highly recommended that the system headers are installed alongside ‘valgrind’: they are part of its packaging on some Linux distributions and packaged separately (e.g. in the ‘valgrind-devel’ RPM) on others. ‘configure’ will give a warning if they are not found.
The system headers will be required in a future release of R to build with ‘valgrind’ instrumentation.
The makefiles and installer scripts for Windows have been tailored to ‘Rtools43’, an update of the ‘Rtools42’ toolchain. It is based on ‘gcc’ 12 and newer versions of MinGW-W64, binutils and libraries. At this time R-devel can still be built using Rtools42 without changes, but when R-devel is installed via the installer, it will by default look for Rtools43.
Old make targets ‘rsync-extsoft’ and 32-bit ones that are no longer needed have been removed.
Default builds (including for packages) no longer select C99. Thus the C standard used is the default for the compiler, which for the toolchain in ‘Rtools43’ is C17. (This is consistent with Unix builds.)
The default C++ standard has been changed to C++17 where available (which it is on all currently checked platforms): if not C++14 or C++11 is used if available otherwise C++ is not supported.
‘USE_FC_LEN_T’ is the default: this uses the correct (compiler-dependent) prototypes for Fortran BLAS/LAPACK routines called from C/C++, and requires adjustment of many such calls - see ‘Writing R Extensions’ §6.6.1.
There is initial support for C++23 as several compilers are now supporting ‘-std=c++23’ or ‘-std=c++2b’ or similar. As for C++20, there no additional ‘configure’ checks for C++23 features beyond a check that the compiler reports a ‘__cplusplus’ value greater than that in the C++20 standard. C++ feature tests should be used.
There is support for a package to indicate the version of the C standard which should be used to compile it, and for the installing user to specify this. In most cases R defaults to the C compiler's default standard which is C17 (a `bug-fix' of C11) - earlier versions of R or compilers may have defaulted to C99.
Current options are:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards become the default, including packages using new keywords as identifiers or with K&R-style function declarations. This will use C17 if available, falling back to C11.
USE_C90 Use the C90 (aka C89) standard. (As that standard did not require compilers to identify that version, all we can verify is that the compiler does not claim to be using a later standard. It may accept C99 features - for example ‘clang’ accepts // to make comments.)
USE_C99 Use the C99 standard. This should be rarely needed - it avoids the few new features of C11/C17 which can be useful if a package assumes them if C17 is specified and they are not implemented.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang from 15.0.0 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and so on of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
(Windows) A ‘src/Makefile.ucrt’ or ‘src/Makefile.win’ file is now included after ‘R_HOME/etcR_ARCH/Makeconf’ and so no longer needs to include that file itself. Installation of a package with such a file now uses a site ‘Makevars’ file in the same way as a package with a ‘src/Makevars.win’ file would.
‘configure’ is now passed crucial variables such as ‘CC’ and ‘CFLAGS’ in its environment, as many packages were not setting them (as documented in ‘Writing R Extensions’ §1.2).
This has most effect where ‘configure’ is used to compile parts of the package - most often by ‘cmake’ or ‘libtool’ which obfuscate the actual compile commands used.
Also used for ‘configure.win’ and ‘configure.ucrt’ on Windows.
The flag ‘-fno-optimize-sibling-calls’ is no longer forced for ‘gfortran’ 7 and later. It should no longer be needed now using ‘hidden’ character-length arguments when calling BLAS/LAPACK routines from C/C++ is the default even for packages. (Unless perhaps packages call Fortran code from C/C++ without using R's headers and without allowing for these arguments.)
The deprecated S-compatibility macros ‘DOUBLE_*’ in ‘R_ext/Constants.h’ (included by ‘R.h’) have been removed.
The deprecated legacy typedefs of ‘Sint’ and ‘Sfloat’ in header ‘R.h’ are no longer defined, and that header no longer includes header ‘limits.h’ from C nor ‘climits’ from C++.
New macro ‘CAD5R()’ is provided in ‘Rinternals.h’ and used in a few places in the R sources.
ALTREP now supports ‘VECSXP’ vectors. Contributed by Gabor Csardi in PR#17620.
‘R CMD check’ does more checking of package ‘.Rd’ files, warning about invalid email addresses and (some) invalid URIs and noting empty ‘\item’ labels in description lists.
‘R CMD check’ now also reports problems when reading package news in md (file ‘NEWS.md’) and (optionally) plain text (file ‘NEWS’) formats.
‘_R_CHECK_TIMINGS_’ defaults to a value from the environment even for ‘R CMD check --as-cran’; this allows for exceptionally fast or slow platforms.
It now applies to checking PDF and HTML versions of the manuals, and ‘checking CRAN incoming feasibility’.
‘R CMD check’ can optionally (but included in ‘--as-cran’) check whether HTML math rendering _via_ KaTeX works for the package ‘.Rd’ files.
Non-interactive debugger invocations can be trapped by setting the environment variable ‘_R_CHECK_BROWSER_NONINTERACTIVE_’ to a true value. This is enabled by ‘R CMD check --as-cran’ to detect the use of leftover ‘browser()’ statements in the package.
The use of ‘sprintf’ and ‘vsprintf’ from C/C++ has been deprecated in macOS 13 and is a known security risk. ‘R CMD check’ now reports (on all platforms) if their use is found in compiled code: replace by ‘snprintf’ or ‘vsnprintf’ respectively. [*NB:* whether such calls get compiled into the package is platform-dependent.]
Where recorded at installation, ‘R CMD check’ reports the C and Fortran compilers used to build R.
It reports the OS in use (if known, as given by ‘osVersion’) as well as that R was built for.
It notes if a C++ standard was specified which is older than the current default: many packages have used C++11 to mean ‘not C++98’ - as C++11 is the minimum supported since R 4.0.0, that specification can probably be removed.
‘R CMD INSTALL’ reports the compilers (and on macOS, the SDK) used, and this is copied to the output of ‘R CMD check’.
Where a C++ standard is specified, it is reported.
‘R CMD check’'s ‘checking compilation flags in Makevars’ has been relaxed to accept the use of flags such as ‘-std=f2008’ in ‘PKG_FFLAGS’.
‘tools::buildVignettes()’ has a new argument ‘skip’, which is used by ‘R CMD check’ to skip (and note) vignettes with unavailable ‘\VignetteDepends’ (PR#18318).
‘default.stringsAsFactors()’ is defunct.
Calling ‘as.data.frame.<class>()’ directly (for 12 atomic classes) is going to be formally deprecated, currently activated by setting the environment variable ‘_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_’ to non-empty, which also happens in ‘R CMD check --as-cran’.
Hashed ‘environment’s with sizes less than 5 can now grow. (Reported to R-devel by Duncan Garmonsway.)
‘as.character(<Rd>, deparse = TRUE)’ failed to re-escape curly braces in LaTeX-like text. (Reported by Hadley Wickham in PR#18324.)
‘library()’ now passes its ‘lib.loc’ argument when requiring ‘Depends’ packages; reported (with fix) in PR#18331 by Mikael Jagan.
‘R CMD Stangle’: improved message about ‘Output’ files.
‘head(x, n)’ and ‘tail(x, n)’ now signal an error if ‘n’ is not numeric, instead of incidentally “working” sometimes returning all of ‘x’. Reported and discussed by Colin Fay, in PR#18357.
The ‘"lm"’ method for ‘summary()’ now gives the correct F-statistic when the model contains an offset. Reported in PR#18008.
‘C()’ and ‘`contrasts<-`()’ now preserve factor level names when given a function object (as opposed a function name which did preserve names). Reported in PR#17616.
‘c(a = 1, 2)[[]]’ no longer matches ‘2’ but rather signals a _classed_ error. Reported and analysed by Davis Vaughan in PR#18367, a duplicate of PR#18004, by Jan Meis et al. For consistency, ‘NULL[[]]’ is also erroneous now. ‘x[[]] <- v’ gives an error of the same class ‘"MissingSubscriptError"’.
The ‘relist()’ function of ‘utils’ now supports ‘NULL’ elements in the skeleton (PR#15854).
‘ordered(levels = *)’ (missing ‘x’) now works analogously to ‘factor(, ordered=TRUE)’; reported (with fix) by Achim Zeileis in PR#18389.
User-defined Rd macro definitions can now span multiple lines, thanks to a patch from Duncan Murdoch. Previously, the Rd parser silently ignored everything after the first line.
Plain-text help (‘tools::Rd2txt()’) now preserves an initial blank line for text following description list items.
‘tools::Rd2HTML()’ and ‘tools::Rd2latex()’ no longer split \arguments and \value lists at Rd comments.
‘tools::Rd2latex()’ now correctly handles optional text outside \items of argument lists as well as bracketed text at the beginning of sections, e.g., \value{[NULL]}.
‘as.character(<POSIXt>)’ now behaves more in line with the methods for atomic vectors such as numbers, and is no longer influenced by ‘options()’. Ditto for ‘as.character(<Date>)’. The ‘as.character()’ method gets arguments ‘digits’ and ‘OutDec’ with defaults _not_ depending on ‘options()’. Use of ‘as.character(*, format = .)’ now warns.
Similarly, the ‘as.character.hexmode()’ and ‘*.octmode()’ methods also behave as ‘good citizen’ methods and back compatibility option ‘keepStr = TRUE’.
The ‘as.POSIXlt(<POSIXlt>)’ and ‘as.POSIXct(<POSIXct>)’ default methods now do obey their ‘tz’ argument, also in this case.
‘as.POSIXlt(<Date>)’ now does apply a ‘tz’ (time zone) argument, as does ‘as.POSIXct()’; partly suggested by Roland Fuß on the R-devel mailing list.
‘as.Date.POSIXlt(x)’ now also works when the list components are of unequal length, aka “partially filled” or “ragged”.
‘expand.model.frame()’ looked up variables in the wrong environment when applied to models fitted without ‘data’. Reported in PR#18414.
‘time()’ now (also) uses the ‘ts.eps = getOption("ts.eps")’ argument and thus by default rounds values very close to the start (or end) of a year. Based on a proposal by Andreï V. Kostyrka on R-help.
Printing of a ‘factanal()’ result with just one factor and ‘sort = TRUE’ now works regularly, fixing PR#17863 by Timothy Bates, thanks to the ‘R Contributors’ working group.
Printing 0-length objects of class ‘"factor"’, ‘"roman"’, ‘"hexmode"’, ‘"octmode"’, ‘"person"’, ‘"bibentry"’, or ‘"citation"’ now prints something better, one of which fixes PR#18422, reported by Benjamin Feakins.
‘Sys.timezone()’ queries ‘timedatectl’ only if ‘systemd’ is loaded; addressing a report by Jan Gorecki in PR#17421.
The formula method of ‘cor.test()’ had scoping problems when ‘environment(formula)’ was not the calling environment; reported with a patch proposal by Mao Kobayashi in PR#18439.
‘attach()’ of an environment with active bindings now preserves the active bindings. Reported by Kevin Ushey in PR#18425.
BLAS detection now works also with system-provided libraries not available as regular files. This fixes detection of the Accelerate framework on macOS since Big Sur. Reported by David Novgorodsky.
‘download.file()’ gives a helpful error message in case of an invalid ‘download.file.method’ option, thanks to Colin Fay's report in PR#18455.
Sporadic crashes of ‘Rterm’ when using completion have been fixed.
‘Rprof()’ is now more reliable. A livelock in thread initialization with too short sampling interval has been fixed on macOS. A deadlock in using the C runtime has been fixed on Windows. A potential deadlock has been prevented on Unix.
Cursor placement in ‘Rgui’ now works even after a fixed-width font is selected.
Mandatory options (‘options()’) are now set on startup so that saving and restoring them always works (PR#18372).
Package installation, ‘R CMD INSTALL’ or ‘install.packages(*)’, now parses each of the ‘<pkg>/R/*.R’ files individually instead of first concatenating and then ‘parse()’ing the large resulting file. This allows parser or syntax errors to be diagnosed with correct file names and line numbers, thanks to Simon Dedman's report and Bill Dunlap's patch in PR#17859.
This _does_ require syntactically self contained R source files now, fixing another inadvertent bug.
‘predict.lm(<model with offset>)’ now finds the offset in the correct environment, thanks to André Gillibert's report and patch in PR#18456.
‘getInitial(<formula>)’ now finds the ‘selfStart’ model in the correct environment. (Reported by Ivan Krylov in PR#18368.)
Fix for possible segfault when using recently-added graphics features, such as gradients, clipping paths, masks, and groups with ‘pdf(file=NULL)’.
‘class(m) <- class(m)’ no longer changes a matrix ‘m’ by adding a class _attribute_.
‘packageDate(pkg)’ now only warns once if there is no ‘pkg’.
When ‘ts()’ creates a multivariate time series, ‘"mts"’, it also inherits from ‘"array"’ now, and ‘is.mts()’ is documented _and_ stricter.
‘Rd2txt()’ now preserves line breaks of \verb Rd content and from duplicated \cr. The former also fixes the rendering of verbatim output from Rd \Sexpr in plain-text help.
‘uniroot(f, interval)’ should no longer wrongly converge _outside_ the interval in some cases where ‘abs(f(x)) == Inf’ for an ‘x’ at the interval boundary, thanks to posts by Ben Bolker and Serguei Sokol on R-devel.
Vectorized alpha handling in palette functions such as in ‘gray()’, ‘rainbow()’, or ‘hcl.colors()’ works correctly now, thanks to Achim Zeileis' report and patch in PR#18476.
Formatting and ‘print()’ing of ‘bibentry’ objects has dropped the deprecated ‘citation.bibtex.max’ argument, such that the ‘bibtex’ argument's default for ‘print.bibentry()’ depends directly on the ‘citation.bibtex.max’ option, whereas in ‘format.bibentry()’ the option no longer applies.
Attempting to use a character string naming a foreign function entry point in a foreign function call in a package will now signal an error if the packages has called ‘R_forceSymbols’ to specify that symbols must be used.
An error in ‘table()’ could permanently set ‘options(warn=2)’ promoting all subsequent warnings to errors.
The ‘sigma()’ function gave misleading results for binary GLMs. A new method for objects of class ‘"glm"’ returns the square root of the estimate of the dispersion parameter using the same calculation as ‘summary.glm()’.
On platforms where (non-UTC) datetimes before 1902 (or before 1900 as
with system functions on recent macOS) are guessed by extrapolating
time zones from 1902-2037, there is a warning at the first use of
extrapolation in a session. (As all time zones post 2037 are
extrapolation, we do not warn on those.)
(Platforms using ‘--with-internal-tzone’, including Windows and by
default macOS). How years are printed in dates or date-times can be
controlled by environment variable ‘R_PAD_YEARS_BY_ZERO’. The default
remains to pad to 4 digits by zeroes, but setting value ‘no’ gives no
padding (as used by default by ‘glibc’).
‘strftime()’ tries harder to determine the offset for the ‘"%z"’
format, and succeeds on the mainstream R platforms.
‘strftime()’ has a limit of 2048 bytes on the string produced -
attempting to exceed this is an error. (Previously it silently
truncated at 255 bytes.)
‘sessionInfo()’ records (and by default prints) the system time zone as
part of the locale information. Also, the source (system/internal) of
the date-time conversion and printing functions.
Objects of class ‘"POSIXlt"’ created in this version of R always have
11 components: component ‘zone’ is always set, and component ‘gmtoff’
is set for times in UTC and usually set on the (almost all) platforms
which have C-level support, otherwise is ‘NA’.
There are comprehensive validity checks on the structure of objects of
class ‘"POSIXlt"’ when converting (including formatting and printing).
(This avoids mis-conversions of hand-crafted objects.)
There is some support for using the native date-time routines on macOS:
this is only viable on recent versions (e.g. 12.6 and 13) and does get
wrong some historical changes (before 1900, during WWII). Use of
‘--with-internal-tzone’ remains the default.
‘as.POSIXct(<numeric>)’ and ‘as.POSIXlt(.)’ (without specifying
‘origin’) now work. So does ‘as.Date(<numeric>)’.
‘as.Date.POSIXct(., tz)’ now treats several ‘tz’ values, notably
‘"GMT"’ as equivalent to ‘"UTC"’, proposed and improved by Michael
Chirico and Joshua Ulrich in PR#17674.
Experimental ‘balancePOSIXlt()’ utility allows using “ragged” and or
out-of-range ‘"POSIXlt"’ objects more correctly, e.g., in subsetting
and subassignments. Such objects are now documented.
More experimentally, a ‘"POSIXlt"’ object may have an attribute ‘"balanced"’ indicating if it is known to be filled or fully balanced.
Functions ‘axis.Date()’ and ‘axis.POSIXct()’ are rewritten to gain
better default tick locations and better default formats by using
‘prettyDate()’. Thanks to Swetlana Herbrandt.
The mapping of Windows' names for time zones to IANA's ‘Olson’ names
has been updated. When ICU is available (it is by default), it is used
to get a mapping for the current region set in Windows. This can be
overridden by setting environment variable ‘TZ’ to the desired Olson
name - see ‘OlsonNames()’ for those currently available.
The graphics engine version, ‘R_GE_version’, has been bumped to ‘16’
and so packages that provide graphics devices should be reinstalled.
The ‘grDevices’ and ‘grid’ packages have new functions for rendering
typeset glyphs, primarily: ‘grDevices::glyphInfo()’ and
‘grid::grid.glyph()’.
Rendering of typeset glyphs is only supported so far on the Cairo-based graphics devices and on the ‘pdf()’ and ‘quartz()’ devices.
The defined behaviour for ‘"clear"’ and ‘"source"’ compositing
operators (via ‘grid::grid.group()’) has been changed (to align better
with simple interpretation of original Porter-Duff definitions).
Support for gradients, patterns, clipping paths, masks, groups,
compositing operators, and affine transformations has been added to the
‘quartz()’ device.
A system installation of generic LAPACK 3.10.0 or later will be
preferred to the version in the R sources.
‘configure’ option ‘--with-lapack=no’ (equivalently ‘--without-lapack’) forces compilation of the internal LAPACK sources.
If ‘--with-lapack’ is not specified, a system ‘liblapack’ is looked for and used if it reports version 3.10.0 or later and does not contain BLAS routines.
Packages using LAPACK will need to be reinstalled if this changes to using an external library.
On ‘aarch64’ Linux platforms using GCC, ‘configure’ now defaults to
‘-fPIC’ (instead of ‘-fpic’), as desired in PR#18326.
‘configure’ now checks conversion of datetimes between ‘POSIXlt’ and
‘POSIXct’ around year 2020. Failure (which has been seen on platforms
missing ‘tzdata’) is fatal.
If ‘configure’ option ‘--with-valgrind-instrumentation’ is given value
‘1’ or ‘2’, option ‘--with-system-valgrind-headers’ is now the default
and ignored (with a warning). It is highly recommended that the system
headers are installed alongside ‘valgrind’: they are part of its
packaging on some Linux distributions and packaged separately (e.g. in
the ‘valgrind-devel’ RPM) on others. ‘configure’ will give a warning
if they are not found.
The system headers will be required in a future release of R to build with ‘valgrind’ instrumentation.
The flag ‘-fno-optimize-sibling-calls’ is no longer forced for
‘gfortran’ 7 and later. It should no longer be needed now using
‘hidden’ character-length arguments when calling BLAS/LAPACK routines
from C/C++ is the default even for packages. (Unless perhaps packages
call Fortran code from C/C++ without using R's headers and without
allowing for these arguments.)
‘R CMD check’ does more checking of package ‘.Rd’ files, warning about
invalid email addresses and (some) invalid URIs and noting empty
‘\item’ labels in description lists.
‘R CMD check’ now also reports problems when reading package news in md
(file ‘NEWS.md’) and (optionally) plain text (file ‘NEWS’) formats.
‘_R_CHECK_TIMINGS_’ defaults to a value from the environment even for
‘R CMD check --as-cran’; this allows for exceptionally fast or slow
platforms.
It now applies to checking PDF and HTML versions of the manuals, and ‘checking CRAN incoming feasibility’.
‘R CMD check’ can optionally (but included in ‘--as-cran’) check
whether HTML math rendering _via_ KaTeX works for the package ‘.Rd’
files.
Non-interactive debugger invocations can be trapped by setting the
environment variable ‘_R_CHECK_BROWSER_NONINTERACTIVE_’ to a true
value. This is enabled by ‘R CMD check --as-cran’ to detect the use of
leftover ‘browser()’ statements in the package.
The use of ‘sprintf’ and ‘vsprintf’ from C/C++ has been deprecated in
macOS 13 and is a known security risk. ‘R CMD check’ now reports (on
all platforms) if their use is found in compiled code: replace by
‘snprintf’ or ‘vsnprintf’ respectively. [*NB:* whether such calls get
compiled into the package is platform-dependent.]
Where recorded at installation, ‘R CMD check’ reports the C and Fortran
compilers used to build R.
It reports the OS in use (if known, as given by ‘osVersion’) as well as that R was built for.
It notes if a C++ standard was specified which is older than the current default: many packages have used C++11 to mean ‘not C++98’ - as C++11 is the minimum supported since R 4.0.0, that specification can probably be removed.
‘R CMD INSTALL’ reports the compilers (and on macOS, the SDK) used, and
this is copied to the output of ‘R CMD check’.
Where a C++ standard is specified, it is reported.
‘check’'s ‘checking compilation flags in Makevars’ has been relaxed to
accept the use of flags such as ‘-std=f2008’ in ‘PKG_FFLAGS’.
‘default.stringsAsFactors()’ is defunct.
Calling ‘as.data.frame.<class>()’ directly (for 12 atomic classes) is
going to be formally deprecated, currently activated by setting the
environment variable ‘_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_’ to
non-empty, which also happens in ‘R CMD check --as-cran’.
Hashed ‘environment’s with sizes less than 5 can now grow. (Reported
to R-devel by Duncan Garmonsway.)
‘as.character(<Rd>, deparse = TRUE)’ failed to re-escape curly braces
in LaTeX-like text. (Reported by Hadley Wickham in PR#18324.)
‘library()’ now passes its ‘lib.loc’ argument when requiring ‘Depends’
packages; reported (with fix) in PR#18331 by Mikael Jagan.
‘R CMD Stangle’: improved message about ‘Output’ files.
‘head(x, n)’ and ‘tail(x, n)’ now signal an error if ‘n’ is not
numeric, instead of incidentally “working” sometimes returning all of
‘x’. Reported and discussed by Colin Fay, in PR#18357.
The ‘"lm"’ method for ‘summary()’ now gives the correct F-statistic
when the model contains an offset. Reported in PR#18008.
‘C()’ and ‘`contrasts<-`()’ now preserve factor level names when given
a function object (as opposed a function name which did preserve
names). Reported in PR#17616.
‘c(a = 1, 2)[[]]’ no longer matches ‘2’ but rather signals a _classed_
error. Reported and analysed by Davis Vaughan in PR#18367, a duplicate
of PR#18004, by Jan Meis et al. For consistency, ‘NULL[[]]’ is also
erroneous now. ‘x[[]] <- v’ gives an error of the same class
‘"MissingSubscriptError"’.
The ‘relist()’ function of ‘utils’ now supports ‘NULL’ elements in the
skeleton (PR#15854).
‘ordered(levels = *)’ (missing ‘x’) now works analogously to ‘factor(,
ordered=TRUE)’; reported (with fix) by Achim Zeileis in PR#18389.
User-defined Rd macro definitions can now span multiple lines, thanks
to a patch from Duncan Murdoch. Previously, the Rd parser silently
ignored everything after the first line.
Plain-text help (‘tools::Rd2txt()’) now preserves an initial blank line
for text following description list items.
‘tools::Rd2HTML()’ and ‘tools::Rd2latex()’ no longer split \arguments
and \value lists at Rd comments.
‘tools::Rd2latex()’ now correctly handles optional text outside \items
of argument lists as well as bracketed text at the beginning of
sections, e.g., \value{[NULL]}.
‘as.character(<POSIXt>)’ now behaves more in line with the methods for
atomic vectors such as numbers, and is no longer influenced by
‘options()’. Ditto for ‘as.character(<Date>)’. The ‘as.character()’
method gets arguments ‘digits’ and ‘OutDec’ with defaults _not_
depending on ‘options()’. Use of ‘as.character(*, format = .)’ now
warns.
Similarly, the ‘as.character.hexmode()’ and ‘*.octmode()’ methods also
behave as ‘good citizen’ methods and back compatibility option ‘keepStr
= TRUE’.
The ‘as.POSIXlt(<POSIXlt>)’ and ‘as.POSIXct(<POSIXct>)’ default methods
now do obey their ‘tz’ argument, also in this case.
‘as.POSIXlt(<Date>)’ now does apply a ‘tz’ (time zone) argument, as
does ‘as.POSIXct()’; partly suggested by Roland Fuß on the R-devel
mailing list.
‘as.Date.POSIXlt(x)’ now also works when the list components are of
unequal length, aka “partially filled” or “ragged”.
‘expand.model.frame()’ looked up variables in the wrong environment
when applied to models fitted without ‘data’. Reported in PR#18414.
‘time()’ now (also) uses the ‘ts.eps = getOption("ts.eps")’ argument
and thus by default rounds values very close to the start (or end) of a
year. Based on a proposal by Andreï V. Kostyrka on R-help.
Printing of a ‘factanal()’ result with just one factor and ‘sort =
TRUE’ now works regularly, fixing PR#17863 by Timothy Bates, thanks to
the ‘R Contributors’ working group.
Printing 0-length objects of class ‘"factor"’, ‘"roman"’, ‘"hexmode"’,
‘"octmode"’, ‘"person"’, ‘"bibentry"’, or ‘"citation"’ now prints
something better, one of which fixes PR#18422, reported by Benjamin
Feakins.
‘Sys.timezone()’ queries ‘timedatectl’ only if ‘systemd’ is loaded;
addressing a report by Jan Gorecki in PR#17421.
The formula method of ‘cor.test()’ had scoping problems when
‘environment(formula)’ was not the calling environment; reported with a
patch proposal by Mao Kobayashi in PR#18439.
‘attach()’ of an environment with active bindings now preserves the
active bindings. Reported by Kevin Ushey in PR#18425.
BLAS detection now works also with system-provided libraries not
available as regular files. This fixes detection of the Accelerate
framework on macOS since Big Sur. Reported by David Novgorodsky.
‘download.file()’ gives a helpful error message in case of an invalid
‘download.file.method’ option, thanks to Colin Fay's report in
PR#18455.
Sporadic crashes of ‘Rterm’ when using completion have been fixed.
‘Rprof()’ is now more reliable. A livelock in thread initialization
with too short sampling interval has been fixed on macOS. A deadlock
in using the C runtime has been fixed on Windows. A potential deadlock
has been prevented on Unix.
Cursor placement in ‘Rgui’ now works even after a fixed-width font is
selected.
Mandatory options (‘options()’) are now set on startup so that saving
and restoring them always works (PR#18372).
Package installation, ‘R CMD INSTALL’ or ‘install.packages(*)’, now
parses each of the ‘<pkg>/R/*.R’ files individually instead of first
concatenating and then ‘parse()’ing the large resulting file. This
allows parser or syntax errors to be diagnosed with correct file names
and line numbers, thanks to Simon Dedman's report and Bill Dunlap's
patch in PR#17859.
This _does_ require syntactically self contained R source files now, fixing another inadvertent bug.
‘predict.lm(<model with offset>)’ now finds the offset in the correct
environment, thanks to André Gillibert's report and patch in PR#18456.
‘getInitial(<formula>)’ now finds the ‘selfStart’ model in the correct
environment. (Reported by Ivan Krylov in PR#18368.)
Fix for possible segfault when using recently-added graphics features,
such as gradients, clipping paths, masks, and groups with
‘pdf(file=NULL)’.
‘class(m) <- class(m)’ no longer changes a matrix ‘m’ by adding a class
_attribute_.
‘packageDate(pkg)’ now only warns once if there is no ‘pkg’.
When ‘ts()’ creates a multivariate time series, ‘"mts"’, it also
inherits from ‘"array"’ now, and ‘is.mts()’ is documented _and_
stricter.
‘Rd2txt()’ now preserves line breaks of \verb Rd content and from
duplicated \cr. The former also fixes the rendering of verbatim output
from Rd \Sexpr in plain-text help.
‘uniroot(f, interval)’ should no longer wrongly converge _outside_ the
interval in some cases where ‘abs(f(x)) == Inf’ for an ‘x’ at the
interval boundary, thanks to posts by Ben Bolker and Serguei Sokol on
R-devel.
Vectorized alpha handling in palette functions such as in ‘gray()’,
‘rainbow()’, or ‘hcl.colors()’ works correctly now, thanks to Achim
Zeileis' report and patch in PR#18476.
Formatting and ‘print()’ing of ‘bibentry’ objects has dropped the
deprecated ‘citation.bibtex.max’ argument, such that the ‘bibtex’
argument's default for ‘print.bibentry()’ depends directly on the
‘citation.bibtex.max’ option, whereas in ‘format.bibentry()’ the option
no longer applies.
Attempting to use a character string naming a foreign function entry
point in a foreign function call in a package will now signal an error
if the packages has called ‘R_forceSymbols’ to specify that symbols
must be used.
An error in ‘table()’ could permanently set ‘options(warn=2)’ promoting
all subsequent warnings to errors.
Calling ‘&&’ or ‘||’ with LHS or (if evaluated) RHS of length greater
than one is now always an error, with a report of the form
'length = 4' in coercion to 'logical(1)'
Environment variable ‘_R_CHECK_LENGTH_1_LOGIC2_’ no longer has any effect.
.
The included BLAS sources have been updated to those shipped with
LAPACK version 3.10.1. (This caused some platform-dependent changes to
package check output.) And then to the sources from LAPACK version
3.11.0 (with changes only to double complex subroutines).
The included LAPACK sources have been updated to include the four
Fortran 90 routines rather than their Fortran 77 predecessors. This
may give some different signs in SVDs or eigendecompositions.. (This
completes the transition to LAPACK 3.10.x begun in R 4.2.0.)
The LAPACK sources have been updated to version 3.11.0. (No new
subroutines have been added, so this almost entirely bug fixes: Those
fixes do affect some computations with ‘NaN’s, including R's ‘NA’.)
The parser now signals _classed_ errors, notably in case of the pipe
operator ‘|>’. The error object and message now give line and column
numbers, mostly as proposed and provided by Duncan Murdoch in PR#18328.
‘toeplitz()’ is now generalized for asymmetric cases, with a
‘toeplitz2()’ variant.
‘xy.coords()’ and ‘xyz.coords()’ and consequently, e.g., ‘plot(x,y, log
= "y")’ now signal a _classed_ warning about negative values of y
(where ‘log(.)’ is ‘NA’). Such a warning can be specifically
suppressed or caught otherwise.
Regular expression functions now check more thoroughly whether their
inputs are valid strings (in their encoding, e.g. in UTF-8).
The performance of ‘grep()’, ‘sub()’, ‘gsub()’ and ‘strsplit()’ has
been improved, particularly with ‘perl = TRUE’ and ‘fixed = TRUE’. Use
of ‘useBytes = TRUE’ for performance reasons should no longer be needed
and is discouraged: it may lead to incorrect results.
‘apropos()’ gains an argument ‘dot_internals’ which is used by the
completion (‘help(rcompgen)’) engine to also see ‘base’ internals such
as ‘.POSIXct()’.
Support in ‘tools::Rdiff()’ for comparing uncompressed PDF files is
further reduced - see its help page.
‘qqplot(x, y, ...)’ gains ‘conf.level’ and ‘conf.args’ arguments for
computing and plotting a confidence band for the treatment function
transforming the distribution of ‘x’ into the distribution of ‘y ’
(Switzer, 1976, _Biometrika_). Contributed by Torsten Hothorn.
Performance of ‘package_dependencies()’ has been improved for cases
when the number of dependencies is large.
Strings newly created by ‘gsub()’, ‘sub()’ and ‘strsplit()’, when any
of the inputs is marked as ‘"bytes"’, are also marked as ‘"bytes"’.
This reduces the risk of creating invalid strings and accidental
substitution of bytes deemed invalid.
Support for ‘readLines(encoding = "bytes")’ has been added to allow
processing special text files byte-by-byte, without creating invalid
strings.
‘iconv(from = "")’ now takes into account any declared encoding of the
input elements and uses it in preference to the native encoding. This
reduces the risk of accidental creation of invalid strings,
particularly when different elements of the input have different
encoding (including ‘"bytes"’).
Package repositories in ‘getOption("repos")’ are now initialized from
the ‘repositories’ file when ‘utils’ is loaded (if not already set,
e.g., in ‘.Rprofile’). (From a report and patch proposal by Gabriel
Becker in PR#18405.)
‘compactPDF()’ gets a ‘verbose’ option.
‘type.convert()’ and hence ‘read.table()’ get new option ‘tryLogical =
TRUE’ with back compatible default. When set to false, converts ‘"F"’
or ‘"T"’ columns to character.
Added new unit prefixes ‘"R"’ and ‘"Q"’ for abbreviating
(unrealistically large) sizes beyond 10^{27} in ‘standard = "SI"’,
thanks to Henrik Bengtsson's PR#18435.
‘as.data.frame()’'s default method now also works fine with atomic
objects inheriting from classes such as ‘"roman"’, ‘"octmode"’ and
‘"hexmode"’, such fulfilling the wish of PR#18421, by Benjamin Feakins.
The ‘as.data.frame.vector()’ utility now errors for wrong-length
‘row.names’. It warned for almost six years, with “Will be an error!”.
‘sessionInfo()’ now also contains ‘La_version()’ and reports codepage
and timezone when relevant, in both ‘print()’ and ‘toLatex()’ methods
which also get new option ‘tzone’ for displaying timezone information
when ‘locale = FALSE’.
New function ‘R_compiled_by()’ reports the C and Fortran compilers used
to build R, if known.
‘predict(<lm>, newdata = *)’ no longer unnecessarily creates an
‘offset’ of all ‘0’s.
‘solve()’ for complex inputs now uses argument ‘tol’ and by default
checks for ‘computational singularity’ (as it long has done for numeric
inputs).
‘predict(<rank-deficient lm>, newdata=*)’ now obeys a new argument
‘rankdeficient’, with new default ‘"warnif"’, warning only if there are
non-estimable cases in ‘newdata’. Other options include ‘rankdeficient
= "NA"’, predicting ‘NA’ for non-estimable ‘newdata’ cases. This
addresses PR#15072 by Russ Lenth and is based on his original proposal
and discussions in PR#16158 also by David Firth and Elin Waring. Still
somewhat experimental.
‘Rgui’ console implementation now works better with the ‘NVDA’ screen
reader when the full blinking cursor is selected. The underlying
improvements in cursor handling may help also other screen readers on
Windows.
The drop-field control in GraphApp can now be left with the TAB key and
all controls can be navigated in the reverse order using the Shift+TAB
key, improving accessibility of the ‘Rgui’ configuration editor.
‘qnorm(<very large negative>, log.p=TRUE)’ is now fully accurate
(instead of to “only” minimally five digits).
‘demo(error.catching)’ now also shows off ‘withWarnings()’ and
‘tryCatchWEMs()’.
As an experimental feature the placeholder ‘_’ can now also be used in
the ‘rhs’ of a forward pipe ‘|>’ expression as the first argument in an
extraction call, such as ‘_$coef’. More generally, it can be used as
the head of a chain of extractions, such as ‘_$coef[[2]]’.
Spaces in the environment variable used to choose the R session's
temporary directory (‘TMPDIR’, ‘TMP’ and ‘TEMP’ are tried in turn) are
now fatal. (On Windows the ‘short path’ version of the path is tried
and used if that does not contain a space.)
‘all.equal.numeric()’ gets a new optional switch ‘giveErr’ to return
the numeric error as attribute. Relatedly,
‘stopifnot(all.equal<some>(a, b, ..))’ is as “smart” now, as
‘stopifnot(all.equal(....))’ has been already, thus allowing customized
‘all.equal<Some>()’ wrappers.
R on Windows is now able to work with path names longer than 260
characters when these are enabled in the system (requires at least
Windows 10 version 1607). Packages should be updated to work with long
paths as well, instead of assuming ‘PATH_MAX’ to be the maximum length.
Custom front-ends and applications embedding R need to update their
manifests if they wish to allow this feature. See <URL:
https://blog.r-project.org/2023/03/07/path-length-limit-on-windows> for
more information.
‘Object not found’ and ‘Missing argument’ errors now give a more
accurate error context. Patch provided by Lionel Henry in PR#18241.
The ‘@’ operator is now an S3 generic. Based on contributions by Tomasz
Kalinowski in PR#18482.
Detection of BLAS/LAPACK in use (‘sessionInfo()’) with FlexiBLAS now
reports the current backend.
‘subset.data.frame()’ now warns about extraneous arguments, typically
catching the use of ‘=’ instead of ‘==’ in the ‘subset’ expression.
Calling ‘a:b’ when numeric ‘a’ or ‘b’ is longer than one may now be
made into an error by setting environment variable
‘_R_CHECK_LENGTH_COLON_’ to a true value, along the proposal in
PR#18419 by Henrik Bengtsson.
‘density(x, weights=*)’ now warns if automatic bandwidth selection
happens without using ‘weights’; new optional ‘warnWbw’ may suppress
the warning. Prompted by Christoph Dalitz' PR#18490 and its
discussants.
‘rm(list = *)’ is faster and more readable thanks to Kevin Ushey's
PR#18492.
.
.
The default C++ standard has been changed to C++17 where available
(which it is on all currently checked platforms): if not C++14 or C++11
is used if available otherwise C++ is not supported.
‘USE_FC_LEN_T’ is the default: this uses the correct
(compiler-dependent) prototypes for Fortran BLAS/LAPACK routines called
from C/C++, and requires adjustment of many such calls - see ‘Writing R
Extensions’ §6.6.1.
There is initial support for C++23 as several compilers are now
supporting ‘-std=c++23’ or ‘-std=c++2b’ or similar. As for C++20,
there no additional ‘configure’ checks for C++23 features beyond a
check that the compiler reports a ‘__cplusplus’ value greater than that
in the C++20 standard. C++ feature tests should be used.
There is support for a package to indicate the version of the C
standard which should be used to compile it, and for the installing
user to specify this. In most cases R defaults to the C compiler's
default standard which is C17 (a `bug-fix' of C11) - earlier versions
of R or compilers may have defaulted to C99.
Current options are:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards become the default, including packages using new keywords as identifiers or with K&R-style function declarations. This will use C17 if available, falling back to C11.
USE_C90 Use the C90 (aka C89) standard. (As that standard did not require compilers to identify that version, all we can verify is that the compiler does not claim to be using a later standard. It may accept C99 features - for example ‘clang’ accepts // to make comments.)
USE_C99 Use the C99 standard. This should be rarely needed - it avoids the few new features of C11/C17 which can be useful if a package assumes them if C17 is specified and they are not implemented.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang from 15.0.0 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and so on of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
(Windows) A ‘src/Makefile.ucrt’ or ‘src/Makefile.win’ file is now
included after ‘R_HOME/etcR_ARCH/Makeconf’ and so no longer needs to
include that file itself. Installation of a package with such a file
now uses a site ‘Makevars’ file in the same way as a package with a
‘src/Makevars.win’ file would.
‘configure’ is now passed crucial variables such as ‘CC’ and ‘CFLAGS’
in its environment, as many packages were not setting them (as
documented in ‘Writing R Extensions’ §1.2).
This has most effect where ‘configure’ is used to compile parts of the package - most often by ‘cmake’ or ‘libtool’ which obfuscate the actual compile commands used.
Also used for ‘configure.win’ and ‘configure.ucrt’ on Windows.
.
The deprecated S-compatibility macros ‘DOUBLE_*’ in ‘R_ext/Constants.h’
(included by ‘R.h’) have been removed.
The deprecated legacy typedefs of ‘Sint’ and ‘Sfloat’ in header ‘R.h’
are no longer defined, and that header no longer includes header
‘limits.h’ from C nor ‘climits’ from C++.
New macro ‘CAD5R()’ is provided in ‘Rinternals.h’ and used in a few
places in the R sources.
ALTREP now supports ‘VECSXP’ vectors. Contributed by Gabor Csardi in
PR#17620.
.
Calling ‘a:b’ when numeric ‘a’ or ‘b’ is longer than one may now be made into an error by setting environment variable ‘_R_CHECK_LENGTH_COLON_’ to a true value, along the proposal in PR#18419 by Henrik Bengtsson.
‘density(x, weights=*)’ now warns if automatic bandwidth selection happens without using ‘weights’; new optional ‘warnWbw’ may suppress the warning. Prompted by Christoph Dalitz' PR#18490 and its discussants.
‘rm(list = *)’ is faster and more readable thanks to Kevin Ushey's PR#18492.
An error in ‘table()’ could permanently set ‘options(warn=2)’ promoting all subsequent warnings to errors.
Attempting to use a character string naming a foreign function entry point in a foreign function call in a package will now signal an error if the packages has called ‘R_forceSymbols’ to specify that symbols must be used.
Detection of BLAS/LAPACK in use (‘sessionInfo()’) with FlexiBLAS now reports the current backend.
‘subset.data.frame()’ now warns about extraneous arguments, typically catching the use of ‘=’ instead of ‘==’ in the ‘subset’ expression.
Attepting to use a character string naming a foreign function entry point in a foreign fuction call in a package will now signal an error if the packages has called ‘R_forceSymbols’ to specify that symbols must be used. Temporarily this is only enforced if the environment variable ‘R_REALLY_FORCE_SYMBOLS’ is set.
The ‘@’ operator is now an S3 generic. Based on contributions by Tomasz Kalinowski in PR#18482.
‘Object not found’ and ‘Missing argument’ errors now give a more accurate error context. Patch provided by Lionel Henry in PR#18241.
R on Windows is now able to work with path names longer than 260 characters when these are enabled in the system (requires at least Windows 10 version 1607). Packages should be updated to work with long paths as well, instead of assuming ‘PATH_MAX’ to be the maximum length. Custom front-ends and applications embedding R need to update their manifests if they wish to allow this feature. See <URL: https://blog.r-project.org/2023/03/07/path-length-limit-on-windows> for more information.
‘all.equal.numeric()’ gets a new optional switch ‘giveErr’ to return the numeric error as attribute. Relatedly, ‘stopifnot(all.equal<some>(a, b, ..))’ is as “smart” now, as ‘stopifnot(all.equal(....))’ has been already, thus allowing customized ‘all.equal<Some>()’ wrappers.
The definition of ‘DL_FUNC’ in ‘R_ext/Rdynload.h’ has been changed to be fully C-compliant. This means that functions loaded _via_ for example ‘R_GetCCallable’ need to be cast to an appropriate type if they have any arguments.
‘.Machine’ has a new element ‘sizeof.time_t’ to identify old systems with a 32-bit type and hence a limited range of date-times (and limited support for dates millions of years from present).
(Windows) The default C++ standard had accidentally been left at C++11 when it was changed to C++14 on Unix.
As ‘"POSIXlt"’ objects may be “partially filled” and their list components meant to be recycled, ‘length()’ now is the length of the longest component.
‘as.POSIXlt.Date()’ could underflow for dates in the far past (more than half a million years BCE).
‘as.Date.POSIXlt(x)’ would return ‘"1970-01-01"’ instead of ‘NA’ in R 4.2.2, e.g., for
x <- as.POSIXlt(c("2019-01-30","2001-1-1")) x$mon <- c(0L, NA); as.Date(x)
‘R CMD check’ failed to apply enabled ‘_R_CHECK_SUGGESTS_ONLY_’ to examples and vignettes (regression in R 4.2.0).
‘R CMD check’ did not re-build vignettes in separate processes by default (regression in R 4.2.0).
Running examples from HTML documentation now restores previous ‘knitr’ settings and options (PR#18420).
Quartz: fonts are now located using Core Graphics API instead of deprecated ATS which is no longer supported in the macOS 13 SDK (PR#18426). This also addresses an issue where the currently used font in the Quartz device context was not correctly retained.
(Windows) Math symbols in text drawing functions are again rendered correctly (PR#18440). This fixes a regression in R 4.2.1 caused by a fix in PR#18382 which uncovered an issue in GraphApp due to which the symbol charset was not used with TT Symbol font face.
(Windows) Installing a package with a ‘src/Makefile.{win,ucrt}’ file includes ‘~/.R/Makevars.win64’ in the search for user makevars, as documented in “R Installation and Administration” and done for packages with a ‘src/Makevars.{win,ucrt}’ file.
‘format(<POSIXlt_w/_unbalanced_sec>, "....%OS<n>")’ with n > 0 no longer accidentally uses the unbalanced seconds, thanks to Suharto Anggono's report (including patch) in PR#18448.
‘solve.default(a, b)’ works around issues with some versions of LAPACK when ‘a’ contains ‘NA’ or ‘NaN’ values.
When ‘UseMethod()’ cannot dispatch, it no longer segfaults producing the error message in case of a long ‘class()’, thanks to Joris Vankerschaver's report (including patch) in PR#18447.
When ‘example(foo, ..)’ produces graphics on an interactive device it needs to open itself, it now leaves ‘devAskNewPage()’ unchanged even when it was ‘FALSE’, thus fixing a 14 years old ‘<FIXME>’.
‘packageDescription()’ again catches errors from encoding conversions. This also fixes broken ‘packageVersion()’ in C locale on systems where ‘iconv’ does not support transliteration.
Formatting and ‘print()’ing of ‘bibentry’ objects has dropped the deprecated ‘citation.bibtex.max’ argument, such that the ‘bibtex’ argument's default for ‘print.bibentry()’ depends directly on the ‘citation.bibtex.max’ option, whereas in ‘format.bibentry()’ the option no longer applies.
Support for gradients, patterns, clipping paths, masks, groups, compositing operators, and affine transformations has been added to the ‘quartz()’ device.
The ‘grDevices’ and ‘grid’ packages have new functions for rendering typeset glyphs, primarily: ‘grDevices::glyphInfo()’ and ‘grid::grid.glyph()’.
Rendering of typeset glyphs is only supported so far on the Cairo-based graphics devices and on the ‘pdf()’ and ‘quartz()’ devices.
ALTREP now supports ‘VECSXP’ vectors. Contributed by Gabor Csardi in PR#17620.
Vectorized alpha handling in palette functions such as in ‘gray()’, ‘rainbow()’, or ‘hcl.colors()’ works correctly now, thanks to Achim Zeileis' report and patch in PR#18476.
‘uniroot(f, interval)’ should no longer wrongly converge _outside_ the interval in some cases where ‘abs(f(x)) == Inf’ for an ‘x’ at the interval boundary, thanks to posts by Ben Bolker and Serguei Sokol on R-devel.
There is support for a package to indicate the version of the C standard which should be used to compile it, and for the installing user to specify this. In most cases R defaults to the C compiler's default standard which is C17 (a `bug-fix' of C11) - earlier versions of R or compilers may have defaulted to C99.
Current options are:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards become the default, including packages using new keywords as identifiers or with K&R-style function declarations. This will use C17 if available, falling back to C11.
USE_C90 Use the C90 (aka C89) standard. (As that standard did not require compilers to identify that version, all we can verify is that the compiler does not claim to be using a later standard. It may accept C99 features - for example ‘clang’ accepts // to make comments.)
USE_C99 Use the C99 standard. This should be rarely needed - it avoids the few new features of C11/C17 which can be useful if a package assumes them if C17 is specified and they are not implemented.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang from 15.0.0 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and so on of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
The defined behaviour for ‘"clear"’ and ‘"source"’ compositing operators (via ‘grid::grid.group()’) has been changed (to align better with simple interpretation of original Porter-Duff definitions).
‘Rd2txt()’ now preserves line breaks of \verb Rd content and from duplicated \cr. The former also fixes the rendering of verbatim output from Rd \Sexpr in plain-text help.
Spaces in the environment variable used to choose the R session's temporary directory (‘TMPDIR’, ‘TMP’ and ‘TEMP’ are tried in turn) are now fatal. (On Windows the ‘short path’ version of the path is tried and used if that does not contain a space.)
The drop-field control in GraphApp can now be left with the TAB key and all controls can be navigated in the reverse order using the Shift+TAB key, improving accessibility of the ‘Rgui’ configuration editor.
The minimum required version of ‘libcurl’ has been increased from
7.28.0 to 7.32.0 (released in Aug 2013).
There is support for a package to indicate the version of the C standard which should be used to compile it, and for the installing user to specify this. In most cases R defaults to the C compiler's default standard which is C17 (a `bug-fix' of C11) - earlier versions of R or compilers may have defaulted to C99.
Current options are:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards become the default, including packages using new keywords as identifiers or with K&R-style function declarations. This will use C17 if available, falling back to C11.
USE_C90 Use the C90 (aka C89) standard. (As that standard did not require compilers to identify that version, all we can verify is that the compiler does not claim to be using a later standard. It may accept C99 features - for example ‘clang’ accepts // to make comments.)
USE_C99 Use the C99 standard. This should be rarely needed - it avoids the few new features of C11/C17 which can be useful if a package assumes them if C17 is specified and they are not implemented.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang 15 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and so on of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
As an experimental feature the placeholder ‘_’ can now also be used in the ‘rhs’ of a forward pipe ‘|>’ expression as the first argument in an extraction call, such as ‘_$coef’. More generally, it can be used as the head of a chain of extractions, such as ‘_$coef[[2]]’.
‘Rd2txt()’ now preserves line breaks of \verb Rd content. This also fixes the rendering of verbatim output from Rd \Sexpr in plain-text help.
When ‘ts()’ creates a multivariate time series, ‘"mts"’, it also inherits from ‘"array"’ now, and ‘is.mts()’ is documented _and_ stricter.
‘demo(error.catching)’ now also shows off ‘withWarnings()’ and ‘tryCatchWEMs()’.
‘class(m) <- class(m)’ no longer changes a matrix ‘m’ by adding a class _attribute_.
‘packageDate(pkg)’ now only warns once if there is no ‘pkg’.
‘qnorm(<very large negative>, log.p=TRUE)’ is now fully accurate (instead of to “only” minimally five digits).
If ‘configure’ option ‘--with-valgrind-instrumentation’ is given value ‘1’ or ‘2’, option ‘--with-system-valgrind-headers’ is now the default and ignored (with a warning). It is highly recommended that the system headers are installed alongside ‘valgrind’: they are part of its packaging on some Linux distributions and packaged separately (e.g. in the ‘valgrind-devel’ RPM) on others. ‘configure’ will give a warning if they are not found.
The system headers will be required in a future release of R to build with ‘valgrind’ instrumentation.
‘check’'s ‘checking compilation flags in Makevars’ has been relaxed to accept the use of flags such as ‘-std=f2008’ in ‘PKG_FFLAGS’.
Where recorded at installation, ‘R CMD check’ reports the C and Fortran compilers used to build R.
It reports the OS in use (if known, as given by ‘osVersion’) as well as that R was built for.
It notes if a C++ standard was specified which is older than the current default: many packages have used C++11 to mean ‘not C++98’ - as C++11 is the minimum supported since R 4.0.0, that specification can probably be removed.
‘R CMD INSTALL’ reports the compilers (and on macOS, the SDK) used, and this is copied to the output of ‘R CMD check’.
Where a C++ standard is specified, it is reported.
The minimum required version of ‘libcurl’ has been increased from 7.28.0 to 7.32.0 (released in Aug 2013).
‘getInitial(<formula>)’ now finds the ‘selfStart’ model in the correct environment. (Reported by Ivan Krylov in PR#18368.)
The drop-field control in GraphApp can now be left with the TAB key, improving accessibility of the ‘Rgui’ configuration editor.
The default C++ standard has been changed to C++17 where available (which it is on all currently checked platforms): if not C++14 or C++11 is used if available otherwise C++ is not supported.
‘configure’ is now passed crucial variables such as ‘CC’ and ‘CFLAGS’ in its environment, as many packages were not setting them (as documented in ‘Writing R Extensions’ §1.2).
This has most effect where ‘configure’ is used to compile parts of the package - most often by ‘cmake’ or ‘libtool’ which obfuscate the actual compile commands used.
Also used for ‘configure.win’ and ‘configure.ucrt’ on Windows.
Running examples from HTML documentation now restores previous ‘knitr’ settings and options (PR#18420).
The graphics engine version, ‘R_GE_version’, has been bumped to ‘16’ and so packages that provide graphics devices should be reinstalled.
The ‘grDevices’ and ‘grid’ packages have new functions for rendering typeset glyphs, primarily: ‘grDevices::glyphInfo()’ and ‘grid::grid.glyph()’.
Rendering of typeset glyphs is only supported so far on the Cairo-based graphics devices and on the ‘pdf()’ device.
(Windows) The default C++ standard had accidentally been left at C++11
when it was changed to C++14 on Unix. It is now C++14, as documented.
The default C++ standard has been changed to C++17 where available (which it is on all currently checked platforms): if not C++14 is used if available otherwise C++ is not supported.
‘configure’ is now passed crucial variables such as ‘CC’ and ‘CFLAGS’ in its environment, as many packages were not setting them (as documented in ‘Writing R Extensions’ §1.2, and settings there will take precedence).
This has most effect where ‘configure’ is used to compile parts of the package - most often by ‘cmake’ which obscures the actual compile commands used.
Also used for ‘configure.win’ and ‘configure.ucrt’ on Windows.
Where recorded at installation, ‘R CMD check’ reports the C and Fortran compilers used to build R.
It reports the OS in use (if known, as given by ‘osVersion’) as well as that R was built for.
It notes if a C++ standard was specified which is older than the current default: many packages have used C++11 to mean ‘not C++98’ - as C++11 is the mininum supported since R 4.0.0, that specification can probably be removed.
‘R CMD INSTALL’ reports the compilers (and on macOS, the SDK) used, and this is copied to the output of ‘R CMD check’.
Where q C++ standard is specified, it is reported.
Fix for possible segfault when using recently-added graphics features, such as gradients, clipping paths, masks, and groups with ‘pdf(file=NULL)’.
(Windows) The default C++ standard had accidentally been left at C++11 when it was changed to C++14 on Unix.
‘packageDescription()’ again catches errors from encoding conversions. This also fixes broken ‘packageVersion()’ in C locale on systems where ‘iconv’ does not support transliteration.
‘predict(<rank-deficient lm>, newdata=*)’ now obeys a new argument ‘rankdeficient’, with new default ‘"warnif"’, warning only if there are non-estimable cases in ‘newdata’. Other options include ‘rankdeficient = "NA"’, predicting ‘NA’ for non-estimable ‘newdata’ cases. This addresses PR#15072 by Russ Lenth and is based on his original proposal and discussions in PR#16158 also by David Firth and Elin Waring. Still somewhat experimental.
‘predict.lm(<model with offset>)’ now finds the offset in the correct environment, thanks to André Gillibert's report and patch in PR#18456.
Package installation, ‘R CMD INSTALL’ or ‘install.packages(*)’, now parses each of the ‘<pkg>/R/*.R’ files individually instead of first concatenating and then ‘parse()’ing the large resulting file. This allows parser or syntax errors to be diagnosed with correct file names and line numbers, thanks to Simon Dedman's report and Bill Dunlap's patch in PR#17859.
This _does_ require syntactically self contained R source files now, fixing another inadvertent bug.
Package installation, ‘R CMD INSTALL’ or ‘install.packages(*)’, now parses each of the ‘<pkg>/R/*.R’ files individually instead of first concatenating and then ‘parse()’ing the large resulting file. This allows parser or syntax errors to be diagnosed with correct file names and line numbers, thanks to Simon Dedman's report and Bill Dunlap's patch in PR#17859.
This _does_ require syntactically self contained R source files now, fixing another inadvertant bug.
‘Rgui’ console implementation now works better with the ‘NVDA’ screen reader when the full blinking cursor is selected. The underlying improvements in cursor handling may help also other screen readers on Windows.
The dropfield control in GraphApp can now be left with the TAB key, improving accessibility of the ‘Rgui’ configuration editor.
The mapping of Windows' names for time zones to IANA's ‘Olson’ names has been updated. When ICU is available (it is by default), it is used to get a mapping for the current region set in Windows. This can be overridden by setting environment variable ‘TZ’ to the desired Olson name - see ‘OlsonNames()’ for those currently available.
Sporadic crashes of ‘Rterm’ when using completion have been fixed.
‘Rprof()’ is now more reliable. A livelock in thread initialization with too short sampling interval has been fixed on macOS. A deadlock in using the C runtime has been fixed on Windows. A potential deadlock has been prevented on Unix.
Cursor placement in ‘Rgui’ now works even after a fixed-width font is selected.
Mandatory options (‘options()’) are now set on startup so that saving and restoring them always works (PR#18372).
There is support for a package to indicate the version of the C standard which should be used to compile it, and for the installing user to specify this. In most cases R defaults to the C compiler's default standard which is C17 (a `bug-fix' of C11) - earlier versions of R or compilers may have defaulted to C99.
Current options are:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards become the default, including packages using new keywords as identifiers or with K&R-style function declarations.
USE_C90 Use the C90 (aka C89) standard. (As that standard did not require compilers to identify that version, all we can verify is that the compiler does not claim to be using a later standard. It may accept C99 features - for example ‘clang’ accepts // to make comments.)
USE_C99 Use the C99 standard. This should be rarely needed - it avoids the few new features of C11/C17 which can be useful if a package assumes them if C17 is specified and they are not implemented.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang 15 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and so on of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
‘configure’ is now passed crucial variables such as ‘CC’ and ‘CFLAGS’ in its environment, as many packages were not setting them (as documented in ‘Writing R Extensions’ §1.2, and settings there will take precedence).
Also used for ‘configure.win’ and ‘configure.ucrt’ on Windows.
There is support for a package to indicate the version of the C standard which should be used to compile it, and for the installing user to specify this. In most cases R defaults to the C compiler's defailt standard which is C17 (a `bug-fix' of C11) - earlier versions of R or compilers may have defaulted to C99.
Current options are:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards become the default, incliuding packages using new keywords as identifiers or with K&R-style function declarations.
USE_C90 Use the C90 (aka C89) standard.
USE_C99 Use the C99 standard. This should be rarely needed - it avoids the few new features of C11/C17 which can be useful if a package assumes them if C17 is specified and they are not implemented.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang 15 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and so on of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
(Windows) A ‘src/Makefile.ucrt’ or ‘src/Makefile.win’ file is now included after ‘R_HOME/etcR_ARCH/Makeconf’ and so no longer needs to include that file itself. Installation of a package with such a file now uses a site ‘Makevars’ file in the same way as a package with a ‘src/Makevars.win’ file would.
New macro ‘CAD5R()’ is provided in ‘Rinternals.h’ and used in a few places in the R sources.
‘download.file()’ gives a helpful error message in case of an invalid ‘download.file.method’ option, thanks to Colin Fay's report in PR#18455.
[In progress]
There is support for a package to indicate the version of the C standard which should be used to compile it, and for the installing user to specify this. Current options are:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards become the default. For example, packages using new keywords as identifiers or with K&R-style function declarations.
USE_C90 Use the C90 (aka C89) standard.
USE_C99 Use the C99 standard. This should be rarely needed - it avoids the few new features of C11/C17 which can be useful if a package assumes them if C17 is specified and they are not implemented.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang 15 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and so on of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
BLAS detection now works also with system-provided libraries not available as regular files. This fixes detection of the Accelerate framework on macOS since Big Sur. Reported by David Novgorodsky.
When ‘example(foo, ..)’ produces graphics on an interactive device it needs to open itself, it now leaves ‘devAskNewPage()’ unchanged even when it was ‘FALSE’, thus fixing a 14 years old ‘<FIXME>’.
‘predict(<rank-deficient lm>, newdata=*)’ now obeys a new argument ‘rankdeficient’, currently with default ‘"simple"’ for back compatibility, but that may well change before release. This addresses PR#15072 by Russ Lenth and is based on his original proposal and discussions in PR#16158 also by David Firth and Elin Waring. Experimental; may be updated before release.
(Windows) A ‘src/Makefile.ucrt’ or ‘src/Makefile.win’ file is now included after ‘R_HOME/etcR_ARCH/Makeconf’ and so no longer needs to include that file itself. Installation now uses a site ‘Makevars’ file in the same way as a package with a ‘src/Makevars.win’ file would.
[In progress]
There is some support for a package to indicate the version of the C standard which should be used to compile it. There are currently two possibilities:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards are preferred.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang 15 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and ‘--use-C23’ of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
(Windows) The default C++ standard had accidentally been left at C++11 when it was changed to C++14 on Unix. It is now C++14, as documented.
‘predict(<rank-deficient lm>, newdata=*)’ now obeys a new argument ‘rankdeficient’ with default ‘"NA"’ which now predicts ‘NA’ (instead of somewhat dubious values) for non-estimable ‘x’. This addresses PR#15072 by Russ Lenth and is based on his original proposal and discussions in PR#16158 also by David Firth and Elin Waring. Still somewhat experimental.
When ‘UseMethod()’ cannot dispatch, it no longer segfaults producing the error message in case of a long ‘class()’, thanks to Joris Vankerschaver's report (including patch) in PR#18447.
The included LAPACK sources have been updated to include the four Fortran 90 routines rather than their Fortran 77 predecessors. This may give some different signs in SVDs or eigendecompositions.. (This completes the transition to LAPACK 3.10.x begun in R 4.2.0.)
‘solve()’ for complex inputs now uses argument ‘tol’ and by default checks for ‘computational singularity’ (as it long has done for numeric inputs).
The LAPACK sources have been updated to version 3.11.0. (No new subroutines have been added, so this almost entirely bug fixes: Those fixes do affect some computations with ‘NaN’s, including R's ‘NA’.)
‘xy.coords()’ and ‘xyz.coords()’ and consequently, e.g., ‘plot(x,y, log = "y")’ now signal a _classed_ warning about negative values of y (where ‘log(.)’ is ‘NA’). Such a warning can be specifically suppressed or caught otherwise.
‘qqplot(x, y, ...)’ gains ‘conf.level’ and ‘conf.args’ arguments for computing and plotting a confidence band for the treatment function transforming the distribution of ‘x’ into the distribution of ‘y ’ (Switzer, 1976, _Biometrika_). Contributed by Torsten Hothorn.
Support for ‘readLines(encoding = "bytes")’ has been added to allow processing special text files byte-by-byte, without creating invalid strings.
‘iconv(from = "")’ now takes into account any declared encoding of the input elements and uses it in preference to the native encoding. This reduces the risk of accidental creation of invalid strings, particularly when different elements of the input have different encoding (including ‘"bytes"’).
‘sessionInfo()’ now also contains ‘La_version()’ and reports codepage and timezone when relevant, in both ‘print()’ and ‘toLatex()’ methods which also get new option ‘tzone’ for displaying timezone information when ‘locale = FALSE’.
‘predict(<lm>, newdata = *)’ no longer unnecessarily creates an ‘offset’ of all ‘0’s.
Functions ‘axis.Date()’ and ‘axis.POSIXct()’ are rewritten to gain better default tick locations and better default formats by using ‘prettyDate()’. Thanks to Swetlana Herbrandt.
The included LAPACK sources have been updated to include the four
Fortran 90 routines rather than their Fortran 77 predecessors. This
may give some different signs in SVDs or eigendecompositions.. (This
completes the transition to LAPACK 3.10.x begun in R 4.2.0.)
On ‘aarch64’ Linux platforms using GCC, ‘configure’ now defaults to ‘-fPIC’ (instead of ‘-fpic’), as desired in PR#18326.
‘R CMD INSTALL’ reports the compilers (and on macOS, the SDK) used, and this is copied to the output of ‘R CMD check’
Where C++ is compiled, the standard used is reported.
‘c(a = 1, 2)[[]]’ no longer matches ‘2’ but rather signals a _classed_ error. Reported and analysed by Davis Vaughan in PR#18367, a duplicate of PR#18004, by Jan Meis et al. For consistency, ‘NULL[[]]’ is also erroneous now. ‘x[[]] <- v’ gives an error of the same class ‘"MissingSubscriptError"’.
Printing of a ‘factanal()’ result with just one factor and ‘sort = TRUE’ now works regularly, fixing PR#17863 by Timothy Bates, thanks to the ‘R Contributors’ working group.
(Windows) The default C++ standard had accidentally been left at C++11 when it was changed to C++14 on Unix. It is now C++14 as documented.
‘attach()’ of an environment with active bindings now preserves the active bindings. Reported by Kevin Ushey in PR#18425.
‘solve.default(a, b)’ works around issues with some versions of LAPACK when ‘a’ contains ‘NA’ or ‘NaN’ values.
The included BLAS sources have been updated to those shipped with LAPACK version 3.10.1. (This caused some platform-dependent changes to package check output.) And then to the sources from LAPACK version 3.11.0 (with changes only to double complex subroutines).
The LAPACK sources have been updated to version 3.11.0. (No new subroutines have been added, so this almost entirely bug fixes: Those fixes do affect some computations with ‘NaN’s, including R's @codeNA.)
The makefiles and installer scripts for Windows have been tailored to ‘Rtools43’, an update of the ‘Rtools42’ toolchain. It is based on ‘gcc’ 12 and newer versions of MinGW-W64, binutils and libraries. At this time R-devel can still be built using Rtools42 without changes, but when R-devel is installed via the installer, it will by default look for Rtools43.
‘attach()’ of an environment with active bindings now preserves the active bindings. Reported by Kevin Ushey in PR#18425.
Old make targets ‘rsync-extsoft’ and 32-bit ones that are no longer needed have been removed.
Default builds (including for packages) no longer select C99. Thus the C standard used is the default for the compiler, which for the toolchain in ‘Rtools43’ is C17. (This is consistent with Unix builds.)
The makefiles and installer scripts for Windows have been tailored to ‘Rtools43’, an update of the ‘Rtools42’ toolchain. It is based on ‘gcc’ 12 and newer versions of MinGW-W64, binutils and libraries. At this time R-devel can still be built using Rtools42 without changes, but when R-devel is installed via the installer, it will by default look for Rtools43. Pre-release builds of Rtools43 are available from <URL: https://www.r-project.org/nosvn/winutf8/ucrt3/>.
Make files and installer scripts for Windows have been tailored to ‘Rtools43’, an update of the ‘Rtools42’ toolchain. It is based on ‘gcc’ 12 and newer version of MinGW-W64, binutils and libraries. At this point, R-devel can still be built using Rtools42 without changes, but when R-devel is installed via the installer, it will by default look for Rtools43. Pre-release builds of Rtools43 are available from <URL: https://www.r-project.org/nosvn/winutf8/ucrt3/>.
(Windows) Installing a package with a ‘src/Makefile.{win,ucrt}’ file includes ‘~/.R/Makevars.win64’ in the search for user makevars, as documented in “R Installation and Administration” and done for packages with a ‘src/Makevars.{win,ucrt}’ file.
‘format(<POSIXlt_w/_unbalanced_sec>, "....%OS<n>")’ with n > 0 no longer accidentally uses the unbalanced seconds, thanks to Suharto Anggono's report (including patch) in PR#18448.
Quartz: fonts are now located using Core Graphics API instead of deprecated ATS which is no longer supported in the macOS 13 SDK (PR#18426). This also addresses an issue where the currently used font in the Quartz device context was not correctly retained.
(Windows) Math symbols in text drawing functions are again rendered correctly (PR#18440). This fixes a regression in R 4.2.1 caused by a fix in PR#18382 which uncovered an issue in GraphApp due to which the symbol charset was not used with TT Symbol font face.
[Experimental, in progress]
There is some support for a package to indicate the version of the C standard which should be used to compile it. There are currently two possibilities:
USE_C17 Use a standard that is at most C17. The intention is to allow legacy packages to still be installed when later C standards are preferred.
USE_C23 Use C23 (or in future, later). Compiler/library support for C23 is still being implemented, but LLVM clang 15 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the package's ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and ‘--use-C23’ of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
For further details see “Writing R Extensions” §1.2.5.
[Experimental, in progress]
There is support for a package to indicate the version of the C standard that should be used to compile it. There are currently two possibilities:
USE_C17 Use a standard that is at most C17, so allowing the C23 reserved words ‘bool’, ‘true’ and ‘false’ as identifiers and function declarations in K&R-style and forward declarations without parameter lists (possibly with a warning).
Most current compilers default to C17, so this was the previous default behaviour. The intention is to allow legacy packages to still be installed when later C standards are preferred.
USE_C23 Use C23 or (in future later). Support the new type ‘bool’, specifier ‘[[noreturn]]’ and function declarations with an empty parameter list (only to mean no parameters). Do not accept K&R-style function declarations.
Compiler/library support for C23 is still being implemented, but LLVM clang 15 and the upcoming GCC 13 have quite extensive support.
These can be specified as part of the ‘SystemRequirements’ field in the ‘DESCRIPTION’ file or _via_ options ‘--use-C17’ and ‘--use=C23’ of ‘R CMD INSTALL’ and ‘R CMD SHLIB’.
Where recorded at installation, ‘R CMD check’ reports the C and Fortran compilers used to build R.
It reports the OS in use (if known, as given by ‘osVersion’) as well as that R was built for.
‘R CMD check’ now reports the compilers (and on macOS, the SDK) used
for packages with compiled code. (In progress.)
Where recorded, it reports the C and Fortran compilers used to build R.
Where recorded at installation, ‘R CMD check’ reports the C and Fortran compilers used to build R.
‘R CMD INSTALL’ reports the compilers (and on macOS, the SDK) used, and this is copied to the output of ‘R CMD check’
The use of ‘sprintf’ and ‘vsprintf’ from C/C++ has been deprecated in macOS 13 and is a known security risk. ‘R CMD check’ now reports (on all platforms) if their use is found in compiled code: replace by ‘snprintf’ or ‘vsnprintf’ respectively. [*NB:* whether such calls get compiled into the package is platform-dependent.]
New function ‘R_compiled_by()’ reports the C and Fortran compilers used to build R, if known.
‘predict(<lm>, newdata=*)’ no longer unnecessarily creates an ‘offset’ of all ‘0’s.
‘R CMD check’ now reports the compilers (and on macOS, the SDK) used for packages with compiled code. (In progress.)
Where recorded, it reports the C and Fortran compilers used to build R.
The LAPACK sources have been updated to version 3.11.0. (No new subroutines have been added, so this almost entirely bug fixes.)
New function ‘R_compiled_by()’ reports the C and Fortran compilers used to build R, if known. (Not yet Windows.)
The included BLAS sources have been updated to those shipped with LAPACK version 3.10.1. (This caused some platform-dependent changes to package check output.) And then to the sources from LAPACK version 3.11 (with changes only to double complex subroutines).
‘R CMD check’ now reports the compilers (and on macOS, the SDK) used for packages with compiled code. (In progress.)
Where recorded, it reports the C and Fortan compilers used to build R.
The included BLAS sources have been updated to those shipped with LAPACK version 3.10.1. This causes some (platform-dependent) changes to package check output.
And then updated to version 3.11.0.
Math symbols in text drawing functions on Windows are again rendered correctly (PR#18440). This fixes a regression in R 4.2.1 caused by a fix in PR#18382 which uncovered an issue in GraphApp due to which the symbol charset was not used with TT Symbol font face.
‘sessionInfo()’ now also contains ‘La_version()’ and reports codepage and timezone when relevant, in both ‘print()’ and ‘toLatex()’ methods which also get new option ‘tzone’ for displaying timezone information when ‘locale=FALSE’.
Calling ‘as.data.frame.<class>()’ directly (for 12 atomic classes) is going to be formally deprecated, currently activated by setting the environment variable ‘_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_’ to non-empty, which also happens in ‘R CMD check --as-cran’.
Calling ‘as.data.frame.<class>()’ directly (for 12 atomic classes) is going to be formally deprecated, currently activated by setting the enviroment variable ‘_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_’ to non-empty, which also happens in ‘R CMD check --as-cran’.
The use of ‘sprintf’ and ‘vsprintf’ from C/C++ has been deprecated in
macOS 13 and is a known security risk. ‘R CMD check’ now reports (on
all platforms) if their use is found: replace by ‘snprintf’ or
‘vsnprintf’.
The use of ‘sprintf’ and ‘vsprintf’ from C/C++ has been deprecated in macOS 13 and is a known security risk. ‘R CMD check’ now reports (on all platforms) if their use is found in the compiled code: replace by ‘snprintf’ or ‘vsnprintf’. [*NB:* whether such calls get compiled into the package is platform-dependent.]
Non-interactive debugger invocations can be trapped by setting the environment variable ‘_R_CHECK_BROWSER_NONINTERACTIVE_’ to a true value. This is enabled by ‘R CMD check --as-cran’ to detect the use of leftover ‘browser()’ statements in the package.
The use of ‘sprintf’ and ‘vsprintf’ from C/C++ has been deprecated in macOS 13 and is a known security risk. ‘R CMD check’ now reports (on all platforms) if their use is found: replace by ‘snprintf’ or ‘vsnprintf’.
‘as.data.frame()’'s default method now also works fine with atomic objects inheriting from classes such as ‘"roman"’, ‘"octmode"’ and ‘"hexmode"’, such fulfilling the wish of PR#18421, by Benjamin Feakins.
The ‘as.data.frame.vector()’ utility now errors for wrong-length ‘row.names’. It warned for almost six years, with “Will be an error!”.
The formula method of ‘cor.test()’ had scoping problems when ‘environment(formula)’ was not the calling environment; reported with a patch proposal by Mao Kobayashi in PR#18439.
‘tools::Rd2latex()’ now correctly handles optional text outside \items of argument lists as well as bracketed text at the beginning of sections, e.g., \value{[NULL]}.
Quartz: fonts are now located using Core Graphics API instead of deprecated ATS which is no longer supported in macOS 13 SDK (PR#18426). This also addresses an issue where the currently used font in the Quartz device context was not correctly retained.
Non-interactive debugger invocations can be trapped by setting the environment variable ‘_R_CHECK_BROWSER_NONINTERACTIVE_’ to a true value. This is enabled by ‘R CMD check --as-cran’ to detect leftover ‘browser()’ statements in package code.
‘object.size(*, standard="SI")’ uses the new unit prefixes ‘"R"’ and
‘"Q"’ for sizes above 10^{27} bytes, thanks to Henrik Bengtsson's
PR#18435.
Added new unit prefixes ‘"R"’ and ‘"Q"’ for abbreviating (unrealistically large) sizes beyond 10^{27} in ‘standard = "SI"’, thanks to Henrik Bengtsson's PR#18435.
Running examples from HTML documentation now restores previous knitr settings and options (PR#18420).
‘object.size(*, standard="SI")’ uses the new unit prefixes ‘"R"’ and ‘"Q"’ for sizes above 10^{27} bytes, thanks to Henrik Bengtsson's PR#18435.
‘type.convert()’ and hence ‘read.table()’ get new option ‘tryLogical = TRUE’ with back compatible default. When set to false, converts ‘"F"’ or ‘"T"’ columns to character.
New macro ‘CAD5R()’ is provided and used in a few places.