R 4.3.0
CHANGES IN R 4.3.0
SIGNIFICANT USER-VISIBLE CHANGES:
-
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.
NEW FEATURES:
-
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 NaNs, 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()
andxyz.coords()
and consequently, e.g.,plot(x,y, log = "y")
now signal a classed warning about negative values
ofy
(wherelog(.)
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()
andstrsplit()
has been
improved, particularly withperl = TRUE
andfixed = 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 argumentdot_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, ...)
gainsconf.level
andconf.args
arguments for
computing and plotting a confidence band for the treatment
function transforming the distribution ofx
into the distribution
ofy
(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()
andstrsplit()
, 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 henceread.table()
get new optiontryLogical = 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 containsLa_version()
and reports codepage
and timezone when relevant, in bothprint()
andtoLatex()
methods
which also get new optiontzone
for displaying timezone
information whenlocale = 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 0s. -
solve()
for complex inputs now uses argumenttol
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 offwithWarnings()
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
andTEMP
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
customizedall.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
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. -
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. -
Detection of BLAS/LAPACK in use (
sessionInfo()
) with FlexiBLAS
now reports the current backend. -
The "data.frame" method for
subset()
now warns about extraneous
arguments, typically catching the use of=
instead of==
in the
subset expression. -
Calling
a:b
when numerica
orb
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()
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 itsX
argument,
and allowsINDEX
to be a formula in that case.by.data.frame()
similarly allowsINDICES
to be a formula. -
The performance of
df[j] <- value
(including for missingj
) 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.) -
The matrix multiply operator
%*%
is now an S3 generic, belonging
to new group generic matrixOps. From Tomasz Kalinowski's
contribution in PR#18483. -
New function
array2DF()
to convert arrays to data frames,
particularly useful for the list arrays created bytapply()
.
DATES and TIMES:
-
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 variableR_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>)
andas.POSIXlt(.)
(without specifying
origin) now work. So doesas.Date(<numeric>)
. -
as.Date.POSIXct(., tz)
now treats severaltz
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()
andaxis.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 - seeOlsonNames()
for
those currently available.
GRAPHICS:
-
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 thepdf()
andquartz()
devices. -
The defined behaviour for "clear" and "source" compositing
operators (viagrid::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 thequartz()
device.
INSTALLATION on a UNIX-ALIKE:
-
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. -
libcurl 8.x is now accepted by configure: despite a change in
major version number it changes neither API nor ABI.
INSTALLATION on WINDOWS:
-
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
and32-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.)
PACKAGE INSTALLATION:
-
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'sDESCRIPTION
file or via options--use-C17
and so
on ofR CMD INSTALL
andR CMD SHLIB
.For further details see “Writing R Extensions” §1.2.5.
-
-
(Windows) A
src/Makefile.ucrt
orsrc/Makefile.win
file is now
included afterR_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 siteMakevars
file in the same way as a package
with a src/Makevars.win file would. -
configure is now passed crucial variables such as
CC
andCFLAGS
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
andconfigure.ucrt
on Windows.
FORTRAN FLAGS:
- 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.)
C-LEVEL FACILITIES:
-
The deprecated S-compatibility macros
DOUBLE_*
in
R_ext/Constants.h
(included byR.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 inRinternals.h
and used in a few
places in the R sources. -
ALTREP now supports
VECSXP
vectors. Contributed by Gabor Csardi
in PR#17620. -
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.
UTILITIES:
-
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 (fileNEWS.md
) and (optionally) plain text (fileNEWS
)
formats. -
_R_CHECK_TIMINGS_
defaults to a value from the environment even
forR 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 byR CMD check --as-cran
to detect
the use of leftoverbrowser()
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 inMakevars
’ 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). -
New generic
.AtNames()
added to enable class-specific completions
after@
. The formerly internal functionfindMatches()
is now
exported, mainly for use in methods for.DollarNames()
and
.AtNames()
.
DEPRECATED AND DEFUNCT:
-
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 inR CMD check --as-cran
.
BUG FIXES:
-
Hashed environments 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 itslib.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)
andtail(x, n)
now signal an error ifn
is not
numeric, instead of incidentally “working” sometimes returning
all ofx
. 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 supportsNULL
elements in the
skeleton (PR#15854). -
ordered(levels = *)
(missingx
) now works analogously tofactor(, 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()
andtools::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
byoptions()
. Ditto foras.character(<Date>)
. The
as.character()
method gets argumentsdigits
andOutDec
with
defaults not depending onoptions()
. Use ofas.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>)
andas.POSIXct(<POSIXct>)
default
methods now do obey theirtz
argument, also in this case. -
as.POSIXlt(<Date>)
now does apply atz
(time zone) argument, as
doesas.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 thets.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 andsort = 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
orinstall.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
withpdf(file=NULL)
. -
class(m) <- class(m)
no longer changes a matrixm
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, andis.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 whereabs(f(x)) == Inf
for anx
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()
, orhcl.colors()
works correctly now, thanks to Achim
Zeileis' report and patch in PR#18476. -
Formatting and
print()
ing of bibentry objects has dropped the
deprecatedcitation.bibtex.max
argument, such that the bibtex
argument's default forprint.bibentry()
depends directly on the
citation.bibtex.max
option, whereas informat.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 calledR_forceSymbols
to
specify that symbols must be used. -
An error in
table()
could permanently setoptions(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 assummary.glm()
. -
bs()
andns()
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. -
R CMD
on Windows now skips the site profile with--no-site-file
and--vanilla
even whenR_PROFILE
is set (PR#18512, from Kevin
Ushey).