R is een ontwikkelomgeving en programmeertaal voor statistische en data-analysedoeleinden. Het werd oorspronkelijk ontworpen door Ross Ihaka en Robert Gentleman (vandaar de naam R) aan de Universiteit van Auckland, Nieuw-Zeeland. In R is programmeren sterk objectgeoriënteerd en de functionaliteit kan uitgebreid worden via packages die onder andere via cran beschikbaar worden gesteld. Het R-coreteam, dat zich vandaag de dag bezighoudt met de doorontwikkeling, heeft kort geleden versie 4.3.1 uitgebracht met de titel Beagle Scouts. De changelog van deze uitgave ziet er als volgt uit:
Significant User-Visible ChangesNew Features
- 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.Dates And Times
- 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'sNA
.)- 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 atoeplitz2()
variant.xy.coords()
andxyz.coords()
and consequently, e.g.,plot(x,y, log = "y")
now signal a classed warning about negative values of y (wherelog(.)
isNA
). 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 ofuseBytes = 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 averbose
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 beyond10271027
instandard = "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-lengthrow.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 anoffset
of all0
s.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 argumentrankdeficient
, with new default"warnif"
, warning only if there are non-estimable cases innewdata
. Other options includerankdeficient = "NA"
, predictingNA
for non-estimablenewdata
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 theNVDA
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()
andtryCatchWEMs()
.- As an experimental feature the placeholder
_
can now also be used in therhs
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 switchgiveErr
to return the numeric error as attribute. Relatedly,stopifnot(all.equal<some>(a, b, ..))
is as “smart” now, asstopifnot(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 argumentwhat
. A new generic,nameOfClass()
, is called to resolve the class name fromwhat
. 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 forsubset()
now warns about extraneous arguments, typically catching the use of ‘=’ instead of ‘==’ in thesubset
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 usingweights
; new optionalwarnWbw
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 argumentshow.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
) andwrite.table(df)
has been improved for data framesdf
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 genericmatrixOps
. 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()
.Graphics
- 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: componentzone
is always set, and componentgmtoff
is set for times in UTC and usually set on the (almost all) platforms which have C-level support, otherwise isNA
.- 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 specifyingorigin
) 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 usingprettyDate()
. 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.Installation On A Unix-Alike
- The graphics engine version,
R_GE_version
, has been bumped to16
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()
andgrid::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 the
quartz()
device.Installation On Windows
- 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 systemliblapack
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 betweenPOSIXlt
andPOSIXct
around year 2020. Failure (which has been seen on platforms missingtzdata
) is fatal.- If
configure
option --with-valgrind-instrumentation is given value1
or2
, option --with-system-valgrind-headers is now the default and ignored (with a warning). It is highly recommended that the system headers are installed alongsidevalgrind
: 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 byconfigure
: despite a change in major version number it changes neither API nor ABI.Package Installation
- 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.)
Fortran Flags
- 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 additionalconfigure
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 exampleclang
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 ofR CMD INSTALL
andR 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 whereconfigure
is used to compile parts of the package – most often bycmake
orlibtool
which obfuscate the actual compile commands used.
Also used forconfigure.win
andconfigure.ucrt
on Windows.C-Level Facilities
- 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.)Utilities
- The deprecated S-compatibility macros
DOUBLE_*
in ‘R_ext/Constants.h’ (included by ‘R.h’) have been removed.- The deprecated legacy typedefs of
Sint
andSfloat
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.- 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 ing++
andclang++
: 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 ofRcomplex
should include that header explicitly.Deprecated And Defunct
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 leftoverbrowser()
statements in the package.- The use of
sprintf
andvsprintf
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 bysnprintf
orvsnprintf
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 byosVersion
) 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 ofR 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 argumentskip
, which is used byR 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()
.Bug Fixes
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
.
- 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 itslib.loc
argument when requiringDepends
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 forsummary()
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 matches2
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\item
s 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>)
. Theas.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 asgood citizen
methods and back compatibility optionkeepStr = 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 withoutdata
. 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()
queriestimedatectl
only ifsystemd
is loaded; addressing a report by Jan Gorecki in PR#17421.- The formula method of
cor.test()
had scoping problems whenenvironment(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 invaliddownload.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 thenparse()
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 theselfStart
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 matrixm
by adding a class attribute.packageDate(pkg)
now only warns once if there is nopkg
.- 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 ofbibentry
objects has dropped the deprecatedcitation.bibtex.max
argument, such that thebibtex
argument's default forprint.bibentry()
depends directly on thecitation.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 called
R_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 when R_PROFILE is set (PR#18512, from Kevin Ushey).