Repository navigation
Releases: r-hub/R
Release list
4.6.1
Changes in R 4.6.1:
New Features:
• The LaTeX class jss bundled in share/texmf/tex/latex/jss.cls has
been updated to work with hyperref version 7.01q (2026/04/24).
• Plain-text (and legacy HTML) conversion for a simple Rd \eqn{}
now handles \geq, \leq, \neq and \ne in addition to \ge and \le
PR#19070.
Bug Fixes:
• abbreviate(<non-ASCII>) now works better, using iswlower() and
*upper() to treat “wide” characters, thanks to Kevin's PR#19058.
• cut(1:11, {}) now signals an error for the invalid breaks, fixing
PR#19057, thanks to Kevin Ushey.
• all(<symbol>) signals an error now, as some similar coercions;
previously, the coercion of the symbol resulted in NULL
internally, raised a warning, and could access illegal memory;
thanks to Kevin Ushey's PR#19054.
• stl() now checks its 3 x 3 tuning parameters on the R level;
stl(*, s.window = 0) now “works” instead dumping core,
stl(*, s.window = 1) “works” correctly, too. Also, the summary() method
mentions the robustness weights only if any robustness iterations
happened.
Further, stl() is now based on C code, translated from previous
Fortran, triggered by a flang 22 compiler optimization bug (-O2).
• The border case zapsmall(x, digits=Inf) where x contains an Inf
entry no longer returns all NaN but rather x. The improved help
page now has more non-default examples.
• wilcox.test(x, exact=FALSE, correct = k)'s p-value computation
got a missing dnorm(z) factor, and so did the 2-sample case, in
addition to more fixes.
• The data part of getGenerics() listed package names for generic
functions defined in more than one package. Now it lists generic
function names, as intended. Thanks to Michael Chirico for
report and patch proposal (PR#19080).
• Overly long dyn.load() error messages (C level dlerror()), should
no longer corrupt its state, thanks to Ivan Krylov's PR#19029
report and patch.
• as.matrix(<POSIXlt>) again produces a numeric matrix, and the
c() and subassignment methods for POSIXlt objects work correctly
more often, e.g., without a "tzone" attribute, back porting a few
of the PR#18989 fixes from R-devel, both thanks to Suharto
Anggono.
• In methods, as() now correctly coerces S4 objects to S4
superclasses extending old-style classes, instead of returning
only the S3 part.
4.6.0
CHANGES IN R 4.6.0:
SIGNIFICANT USER-VISIBLE CHANGES:
-
The R citation now provides a DOI (10.32614/R.manuals): please update
your bibliographies accordingly. -
The default C++ standard has been changed to C++20 where available
(which it is on all known platforms from 2021 on): if not C++17 is used
if available otherwise C++ is not supported (as before). (GCC 16 has also
switched to C++20 as its default.) Packages can request C++17 if
essential. -
The Sweave driver Rtangle no longer puts empty lines at the end of
tangled scripts.
NEW FEATURES:
-
The default AIC and BIC methods now check whether the methods namespace
is loaded rather than stats4. They still usestats4::logLik(and
stats4::nobs), but packages no longer need to load stats4 explicitly. -
confint.default()now also works on S4 objects, as long as suitable
coef()andvcov()methods exist. -
binomial(identity)andquasibinomial(identity)now work without
having to quote the argument. -
str()now shows more viaformat()for external pointers. -
terms(<formula>, specials = *)now treats non-syntactic specials more
gracefully, thanks to Mikael Jagan's PR#18568. -
help.start()gets a lib.loc option and its default for
make.packages.html()is enhanced to allow, e.g., fast access to
.Librarywhen that contains only base and recommended packages. -
In
*.Rdhelp files, the\linkS4classmacro now also works for links to
other packages via\linkS4class[<pkg>]{<myClass>}, much nicer than the
“workaround”\link[<pkg>:<myClass>-class]{<myClass>}necessary in earlier
versions of R. Packages with the new syntax need to formally depend on R >= 4.6.0. -
tools::analyze_license()now also computes SPDX license identifiers,
thanks to Thierry Onkelinx and LLuís Revilla. -
read.dcf()now recognizes lines starting with # as comment lines. By
Dirk Eddelbuettel, Laurent Gatto and Hugo Gruson. -
tcltk::tclVersion()now only optionally includes the ‘patch level’, as
Tcl full versions can be of the form 8.7a5 or 9.0b1 without three clear
components. -
untar(tar = "internal")supportsextras = "-P"to use unchanged the
recorded file paths (as many external tar programs do). -
extSoftVersion()[["zstd"]]now reports the version of the zstd
compression library if available, thanks to Trevor Davis' patch proposal
in PR#18914. -
New logical
option()quiet, defaulting to false, set toTRUEby R's
command-line option--quiet(and similar), now can be switched during
an R session. Prompted by Dirk Eddelbuettel's proposal in PR#18913. -
Credentials for basic HTTP authentication with download method "libcurl"
can now be provided in a netrc file. The path to the file can be
specified inoptions("netrc"). -
tools::deparseLatex()gains a math argument, now used by the default
bibstyle to formatbibentry()fields with$...$syntax via Rd\eqn
markup. -
gzcon()can now decompress a concatenation of compressed streams PR#18887. -
Bibliographic citations and references in Rd files can now be
auto-generated from bibentries in bibliographic databases in R or BibTeX
formats. SeeRShowDoc("R-exts#Bibliographic-citations-and-references")
for more information. -
Arguments to
loadNamespace()which will be ignored because the
namespace is already loaded are now noted. -
chkDots()' optional argument allowed has been implemented thanks to
Trevor Davis' proposal in PR#18936. -
New function
messageCondition()to create structured "message" objects
analogous towarningCondition()anderrorCondition()(PR#18940, by
Trevor Davis). -
wilcox.test()can now perform exact (conditional) inference in case of
ties. Based on contributions by Torsten Hothorn. -
wilcox.test()can now optionally compute improved asymptotic p-values
by including up to 3 correction terms of the Edgeworth series for the
normal approximation. -
barplot(.., orderH = *)for stacked bar plots allows to sort the stacks
each according to size. -
New argument panel.first for
hist()(viaplot.histogram()),
barplot(),bxp(), and hence implicitlyboxplot(). All except the
former also gain a new panel.last. Suggested by Marieke Stolte and Julian
Welz. -
plot.default()gets a new switchlim2to indicate that the defaultxlim
andylimrange computations only use jointly finite x- and y-values;
indirectly suggested in PR#7986 by Jincai Jiang. -
Rman.css, the stylesheet for the texi2any-generated HTML versions of
the R manuals, was improved following joint efforts at the ‘R Dev Days’
of useR! 2024 and RSECon25. -
New system Rd macro
\manual{<name>}{<node>}to refer to a specific
section etc (possibly empty, for Top) of one of the R manuals (e.g.,
R-exts). -
list.files()now has optional argument fixed to allow literal pattern
matching. Suggested and implemented by Duncan Murdoch in PR#18925. -
substring(txt, i1, i2),substr(..)and their replacement versions now
accepti2 = NULLto mean “to the end_of_string”, thus fulfilling Kevin
Ushey (and others') suggestions in PR#18851. -
The default method for
pretty()gets a new switch bounds for
completeness, corresponding to.pretty(). Also, it now catches typos
such as eps.corrected = 2, noted in PR#18521 by Mikko Korpela. -
Plain-text help now renders Rd
\describelists using line breaks after
item labels. Settools::Rd2txt_options(descStyle=NULL)to get the old
behaviour with a simple space; a "colon" variant is also available. -
x %notin% tablenewly in base is an idiom for!(x %in% table)and
provided almost entirely for convenience and code readability, from an
R-devel suggestion, after many years of private definitions mostly hidden
in packages, including in R's tools package. -
The default method of
sequence()gets a new option recycle to swap
between current (not fully recycling) and future behaviour where all
three of (nvec, from, by) are jointly recycled. -
ftable()s default method and theas.table()method for "ftable"s get
a perm argument with back compatible default. Theas.table()method
also gets anamed.dim = FALSEswitch, no longer creating a named
dim(<result>)by default. -
match.arg()gets a new optionseveral.ok = "all", fulfilling the wish
of Jim Hester in PR#16659](https://bugs.r-project.org/show_bug.cgi?id=PR#16659). -
provideDimnames()gets new switch use.names, as proposed including
patch by Mikael Jagan, in PR#18975. -
The default
summary()is more informative for character vectors,
optionally resorting to the factor method via the new argument
character.method = "factor", e.g., when summarizing a data frame
(PR#16750). It also provides more useful summaries for complex vectors, with polar
determining if polar or cartesian coordinates are more relevant; mostly
based on a proposal by Mikael Jagan. -
Error messages from failed Rd
\Sexprcode now include the call from the
original condition (if available). Warning messages now include Rd source
locations. -
When the environment variable
R_WARN_BOUNDS_OPTis set to "yes",
options(warn = val)will check if val is inside -1:2; this may happen
unconditionally in the future. -
weighted.residuals()now returns weighted working residuals for "glm"
objects. It used to return deviance residuals, but these do not give the
one-step approximated dfbeta values, as pointed out by Ravi Varadhan.
influence.glm()has been amended so that it now returns an object with
both a "wt.res" and a "dev.res" element. -
Several influence measures for "glm" objects have been updated to use
Pearson residuals rather than deviance residuals (the latter are not
unbiased) and to not use leave-one-out estimates of dispersion in models
with fixed dispersion. Thanks to Ravi Varadhan for discussions and
testing of these updates. -
R now supports custom binary types which are of the form
"<system>.binary.<build>"where<system>is lower-case name (letters
only) of the system and<build>is the name of the build (alphanumeric
and dashes). The corresponding paths returned bycontrib.url(which
govern the repository layout) with the above type= have the form
bin/<system>/<build>/contrib/<x.y>where<x.y>is the R version without
patch level. This is a generalisation of the binary types previously
supported on macOS. In addition, binary packages can have the extensions
.tar.bz2,.tar.xz,.tar.zstand.tar.zstdwith the corresponding
compression support. -
The value of
.Platform$pkgTypewhich defines the native binary type for
the current build of R can be overridden withR_PLATFORM_PKGTYPE
environment variable (previously this was only set by the macOS builds of
R). This should be typically only done by the author of a binary R
distribution to define the type of binaries supported by that build of R. -
If R uses custom binary type in its
.Platform$pkgTypethen
`R CMD INSTALL --bui...
4.5.3
CHANGES IN R 4.5.3:
UTILITIES:
tools/fetch-recommendedcan be used instead of
tools/rsync-recommendedto fetch recommended packages into R
sources using curl on systems without rsync or behind firewalls.
PACKAGE INSTALLATION:
-
C++ standard specifications (
CXX_STD =insrc/Makevars*and in
theSystemRequirementsfield of theDESCRIPTIONfile) are now
checked more thoroughly. Invalid values are still ignored but
now give a warning, as do contradictory specifications. -
(Preliminary) support for C++26 has been extended to Windows.
-
A non-zero exit status from
cleanup,cleanup.winorcleanup.ucrt,
if requested via options--cleanor--preclean, is now reported
with a warning.
BUG FIXES:
-
all.equal(obj, simple, check.class=FALSE)now is true, also when
simple is a bare atomic vector andobjhas a simple class, fixing
the first part of PR#18971 thanks to Jan Gorecki. -
str(x, give.attr=FALSE)no longer shows attributes whenxis a
zero length "Date" or "POSIXt" object. -
Tweaks to binning for
bw.SJ()andbw.ucv()in the very rare case
of data which have an extremely small range compared to their
absolute values, e.g., x <- 6e9 + 6:9. -
Formatting book-type bibentry objects now converts LaTeX accents
also in the publisher and series fields. -
model.frame(~1, list(), na.action=na.pass)and similar
“border-line” uses no longer produce invalid data frames, fixing
PR#18977, reported with patch by Mikael Jagan. -
length(<POSIXlt>) <- vis more careful about balancing, notably
whenvis not integer, thanks to Suharto Anggono's remarks on the
mailing list R-devel. -
approx(<x_with_ties>, <y_with_NA>, na.rm = FALSE)now should
always call theties()function, fixing PR#17604 reported by Bill
Dunlap. -
besselJ(1, 1e-15)and similar now give correct results, thanks to
Leo Mada and other “R-help”ers. -
vignette(<pkg>::<topic>)is now a documented usage variant and
confines vignette retrieval to the specified package. -
pretty(ch)again correctly works withcha character vector of
numbers. -
persp()labels the three axes correctly also when C level
atan2pi()is available, fixing PR#19007 by Klaus Schliep. -
Large (tall) subscripts in plotmath expressions are now
positioned correctly. They were being positioned too high. -
Ops group (Arith, Compare,..) methods for matrix-"ts" now do
return (zero length) matrices even when the two series do not
overlap, a very partial fix of PR#18972 which is to be fully
addressed later.
4.5.2
CHANGES IN R 4.5.2:
UTILITIES:
R CMD checknow handles archives with extension.taror.tar.zstd
(where zstd compression is supported by the R build).
BUG FIXES:
-
t.test(c(1:3, Inf))and similar no longer produce an error but
return a (still not so useful) "htest" result, fixing PR#18901,
thanks to Jesse Alderliesten. -
attr(., "tsp") <- valnow usesgetOption("ts.eps")instead of
hardwired 1e-5; consequently,ts(.., ts.eps=*)now passests.eps
to the "tsp" setting C code; both fixing a long-standing ‘FIXME’. -
insertSource()now ignores the internal.packageNameobject,
avoiding a superfluous message. -
In static HTML help, links to vignette files from the default
doc/index.htmlpage now also work for packages not installed in
the default.Library, thanks to a report by Patrice Kiener. -
fixInNamespace("<S3method>")failed to update the S3 methods
table when the generic was not on the search path. -
In plain-text help (
Rd2txt), an initial newline from an Rd inline
\eqnno longer breaks the paragraph. -
hist(*, log = "x")now works without a warning, thanks to Martin
Smith's PR#18921. -
Subassigning "POSIXlt", i.e.,
<tdat>[i] <- valand<tdat>[[i]] <- val
now rebalance as they should, thanks to Mikael Jagan's
PR#18919. -
<POSIXlt>[*](re-)setting "balanced", fixing PR#18681 comment wch#7,
thanks to Mikael Jagan. -
All four of {
col,row}{Sums,Means}(Z, na.rm=TRUE)now correctly
work with complex Z whereis.na(Re(Z))differs fromis.na(Im(Z)),
fixing PR#18942, unearthed by Dirk Eddelbuettel. -
Fix for glyph rendering on the
quartz()device when there is
other (“normal”) text drawn on the device. The problem was that
the text transformation matrix was not reset so glyphs would be
rendered incorrectly (often completely outside the device, i.e.,
not visible). -
Functions
install.packages()anddownload.packages()again
consult optiondownload.file.methodwhen the download method is
unspecified. -
Tanguy Barthelemy and colleagues at the ‘R Dev Day’ following
Rencontres R in May 2025 extended the help page oflm(), fixing
PR#18058. As suggested by Thomas Soeiro, such not es were also
added to theglm(),poly()andsplines::bs()andns()pages. -
lbeta(1i, 1)now signals an error, aslbeta()is not implemented
for complex, fixing PR#18946 from Ben Bolker and Kasper
Kristensen. -
The Cairo-based SVG device uses
ptas the default document unit
also with Cairo >= 1.17.8 (PR#18912). -
pretty(*, eps.correct = 2)has been fixed, e.g., to avoid over 1
million length result forpretty(c(0, 1e-322), eps.correct = 2). -
When "POSIXlt" date-time objects are
NA-padded from subsetting or
increasing length in the[orlength<-methods, the
"balanced" attribute is set toNA, now; noted in PR#18681, thanks
to Mikael Jagan.
4.5.1
CHANGES IN R 4.5.1:
NEW FEATURES:
- The internal method of
unzip()now follows unzip 6.00 in how it
handles extracted file paths which contain "../". With thanks to
Ivan Krylov.
INSTALLATION:
-
Standalone nmath can be built with early-2025 versions of
clang-based compilers such as LLVM clang 20, Apple clang 17 and
Intel icx 2025.0. -
Tcl/Tk 9 can be used to build package tcltk: this has become the
default in some Linux distributions. N.B. several third-party
packages currently require Tcl/Tk 8 or even 8.6 without declaring
so.
BUG FIXES:
-
Java detection in javareconf could not detect libjvm.* in the
zero variant of the JDK (PR#18884). All valid variants as of JDK
24u are now supported. -
factanal(.., rotation=*)now correctly updates rotmat, fixing
PR#18886. -
dnbinom(<large>, <muchlarger>, ..)now is 0 correctly, instead of
NaNorInfsometimes. -
dbinom(<large>, n=Inf, ..)is 0 now correctly, instead ofNaN
which also fixes manydnbinom()cases, notably those mentioned in
PR#16727 comment wch#5. -
Fixing C level “binomial deviance”
bd0()for extreme arguments
(preventing under-/overflow) solves more PR#16727 cases and also
prevents some full accuracy loss in such cases fordbinom(),
dnbinom(), and viadbinom_raw()potentiallydgeom(),dhyper(),
dbeta(), anddf(). -
signif(1.**e308, digits)no longer truncates unnecessarily (but
still to prevent overflow toInf), fixing PR#18889. -
prettyNum(*, zero.print={>=1-char}, replace.zero=TRUE)now works
as documented, thanks to Marttila Mikko and Ivan Krylov's
messages on R-devel. -
pbeta(x, a,b, ..)for very large a,b no longer returnsNaNbut
the correct values (0 or 1, or their logs forlog.p = TRUE).
This improves Mathlib's C levelbratio()and hence also
pnbinom(), etc..
R 4.5.0
CHANGES IN R 4.5.0:
NEW FEATURES:
-
as.integer(rl)and henceas.raw(rl)now work for a list ofraw(1)
elements, as proposed by Michael Chirico's PR#18696. -
graphics'
grid()gains optional argumentnintLog. -
New functions
check_package_urls()andcheck_package_dois()in
package tools for checking URLs and DOIs in package sources. -
New
head()andtail()methods for class "ts" time series,
proposed by Spencer Graves on R-devel. -
New
qr.influence()function, a “bare bones” interface to the
lm.influence()leave-one-out diagnostics computations; wished for
in PR#18739. -
Package
citation()results auto-generated from the package
metadata now also provide package DOIs for CRAN and Bioconductor
packages. -
New function
grepv()identical togrep()except for the default
value = TRUE. -
methods(<pkg>:::<genfun>)now does report methods when neither
the generic nor the methods have been exported. -
pdf()gains anauthorargument to set the corresponding metadata
field, and logical arguments timestamp and producer to optionally
omit the respective metadata. (Thanks to Edzer Pebesma.) -
grDevices::glyphInfo()gains arotargument to allow per-glyph
rotation. (Thanks to Daniel Sabanes Bove.) -
Package tools now exports functions
CRAN_current_db(),
CRAN_aliases_db(),CRAN_rdxrefs_db(),CRAN_archive_db(), and
CRAN_authors_db(). -
Package tools now exports functions
R()and
parse_URI_reference(). -
Package tools now exports functions
base_aliases_db()and
base_rdxrefs_db(). -
It is now possible to set the background color for row and column
names in the data editor on Windows (Rgui). -
Rterm on Windows now accepts input lines of unlimited length.
-
file.info()on Windows now provides file owner name and domain. -
Sys.info()on Windows now provides current user domain. -
findInterval()gets new argumentscheckSortedandcheckNAwhich
allow skipping relatively costly checks; related to PR#16567. -
pnorm(x)underflows more gracefully. -
get(nam, env)now signals a classed error, "getMissingError",
as “subclass” of "missingArgError" where the latter is used also
in similar situations, e.g.,f <- function(x) exp(x); try(f()). -
The set operations now avoid the
as.vector()transformation for
same-kind apparently vector-like operands. -
md5sum()can be used to compute an MD5 hash of a raw vector of
bytes by using thebytes=argument instead offiles=. The two
arguments are mutually exclusive. -
Added function
sha256sum()in package tools analogous tomd5sum()
implementing the SHA-256 hashing algorithm. -
The
xtfrm()method for class "AsIs" is now considerably faster
thanks to a patch provided by Ivan Krylov. -
The
merge()method for data frames will no longer convert row
names used for indexing usingI(), which will lead to faster
execution in cases wheresort = TRUEandall.xand/orall.yare
set toTRUE. -
The methods package internal function
.requirePackage()now calls
requireNamespace(p)instead ofrequire(p), hence no longer adding
packages to thesearch()path in cases methods or class
definitions are needed. Consequently, previous workflows relying
on the old behaviour will have to be amended by adding
correspondinglibrary(p)calls. -
More R-level messages use a common format containing "character
string" for more consistency and less translation work. -
available.packages()andinstall.packages()get an optional
switchcache_user_dir, somewhat experimentally. -
The
sunspot.monthdata have been updated to Oct 2024; because of
recalibration also historical numbers are changed, and we keep
the previous data as sunspot.m2014 for reproducibility. -
The
quartz()device now supports alpha masks. Thanks to George
Stagg, Gwynn Gebeyhu, Heather Turner, and Tomek Gieorgijewski. -
The
print()method for date-time objects (POSIX.t) gets an
optionaldigitsargument for fractional seconds, passed to
improvedformat.POSIXlt(); consequently,print(<date.time>, digits = n)allows to print fractions of seconds. -
install.packages()anddownload.packages()download packages
simultaneously using libcurl, significantly reducing download
times when installing or downloading multiple packages. -
Status reporting in
download.file()has been extended to report
the outcome for individual files in simultaneous downloads. -
The Rd
\linkmacro now allows markup in the link text when the
topic is given by the optional argument, e.g.,
\link[=gamma]{\eqn{\Gamma(x)}}. -
If
La_library()is empty,sessionInfo()still reports
La_version()when available. -
seq.int(from, to, by, ....)when |by| = 1 now behaves as if by
was omitted, and hence returns from:to, possibly integer. -
seq.Date(from, to, by, ....)andseq.POSIXt(..)now also work
whenfromis missing and sufficient further arguments are
provided, thanks to Michael Chirico's report, patch proposal in
PR#17672 and ‘R Dev Day’ contributions.The Date method also works for
seq(from, to), when by is missing
and now defaults to "1 days".It is now documented (and tested) that the by string may be
abbreviated in both seq methods.Both methods return or keep internal type "integer" more
consistently now. Also,as.POSIXct({})is internally integer. -
duplicated(),unique(), andanyDuplicated()now also work for
class expression vectors. -
New function
use()to use packages in R scripts with full control
over what gets added to the search path. (Actually already
available since R 4.4.0.) -
There is some support for zstd compression of tarballs in
tar()
anduntar(). (This depends on OS support of libzstd or by tar.) -
print(summary(<numbers>))gets new optional argumentzdigitsto
allow more flexible and consistent (double) rounding. The
current defaultzdigits = 4Lis somewhat experimental.
Specifying bothdigits = *,zdigits = *allows behaviour
independent of the global digits option. -
The
format()method for "difftime" objects gets a new back
compatible option with.units. -
A
summary()method for "difftime" objects which prints nicely,
similar to those for "Date" and "POSIXct". -
unique()'s default method now also deals with "difftime" objects. -
optimize(f, *)whenf(x)is not finite says more about the value
in its warning message. It no longer replaces-Infby the
largest positive finite number. -
The documentation of
gamma()andis.numeric()is more specific,
thanks to the contributors of PR#18677. -
New dataset gait thanks to Heather Turner and Ella Kaye, used in
examples. -
New datasets
penguinsandpenguins_rawthanks to Ella Kaye,
Heather Turner, and Kristen Gorman. -
isSymmetric(<matrix>)gains a new optiontrans = "C"; when set to
non-default, it tests for “simple” symmetry of complex matrices. -
model.frame()produces more informative error messages in some
cases when variables in the formula are not found, thanks to Ben
Bolker's PR#18860. -
selectMethod(f, ..)now keeps the function name if the function
belongs to a group generic and the method is for the generic.
BLAS and LAPACK:
-
The bundled BLAS and LAPACK sources have been updated to those
shipped as part of January 2025's LAPACK 3.12.1. -
It is intended that this will be the last update to BLAS and
LAPACK in the R sources. Those building R from source are
encouraged to use external BLAS and LAPACK and this will be
required in future. -
This update was mainly bug fixes but contained a barely
documented major change. The set of BLAS routines had been
unchanged since 1988, so throughout R's history. This update
introduced new BLAS routinesdgemmtrandzgemmtrwhich are now
used by LAPACK routines. This means that BLAS implementations
are no longer interchangeable. -
To work around this, R can be configured with option
--with-2025blaswhich arranges for the 2025 BLAS additions to be
compiled into libRlapack (the internal LAPACK, not built if an
external LAPACK is used).This option allows the continuation of the practice of swapping
the BLAS in use by symlinkinglib/libRblas.*. It has the
disadvantage of using the reference BLAS version of the 2025
routines whereas an enhanced BLAS might have an optimized version
(OpenBLAS does as from version 0.3.29). -
Windows builds currently use the internal LAPACK and by default
the internal BLAS: notes on how to swap the latter via
Rblas.dllare in filesrc/extra/blas/Makefile.win.
INSTALLATION on a UNIX-ALIKE:
-
A C23 compiler (if available) is now selected by default for
compilation of R and packages. R builds can opt out via the
configure flag--without-C23, unless the specified or default
(usually gcc) compiler defaults to C23: gcc 15 will.A C23 compiler is known to be selected with gcc 13-15, LLVM clang
18-20 (and 15 should), Apple clang 15-17 and Intel 2024.2-2025.0
(and 2022.2 should).Current binary distributions on macOS use Apple clang 14 and so
do not use C23. -
The minimum autoconf requirement for a maintainer build has been
increased to autoconf 2.72. -
Building the HTML and Inf...
R 4.4.3
CHANGES IN R 4.4.3
INSTALLATION:
-
R can be installed using C23 (for example with
-std=gnu23or
-std=gnu2x) with recent compilers including gcc 12-14, Apple
clang 15-16, LLVM clang 17-20 and Intel icx 2024.2.It can be installed with the upcoming (at the time of writing)
gcc 15, which defaults to C23.
C-LEVEL FACILITIES:
- The functions
R_strtodandR_atofnow allow hexadecimal constants
without an exponent, for compatibility with their C99 versions
(PR#18805).
UTILITIES:
R CMD buildandR CMD checknow allow reference output for demo
scripts (demo/<demo>.Rout.savefiles) to be shipped with the
package, as proposed by Torsten Hothorn in PR#18816.
BUG FIXES:
-
kappa(A, exact=TRUE)for singularAreturnsInfmore generally,
fixing PR#18817 reported by Mikael Jagan. -
Fixed URLs of the sun spots (
sunspot.monthetc) data sets and
mention future changes due to recalibration. -
The parser now accepts hexadecimal constants with a decimal point
without an exponent (taken asp0) as documented in
?NumericConstants(PR#18819). -
rbind()now works correctly when inputs include a raw vector and
a logical, integer or double vector - previously the inclusion of
the latter was garbled. -
smooth.spline()checks validity of its argumentsdf.offsetand
penalty: it could segfault if they wereNULL. -
isGeneric(<primitive>, fdef=*, getName=TRUE)now also returns the
name instead of justTRUE, fixing PR#18829 reported by Mikael
Jagan. -
isGeneric(fdef = print)now works, fixing PR#18369 thanks to
Mikael Jagan. -
sort(x, method = "qsort")made illegal accesses whenxhas length
0. -
dir.create()is protected against being passed an empty string as
its path argument. -
Silent integer overflow could occur in the 'exact' computations
forfisher.test()for unrealistic inputs: this is now an error. -
Some invalid C-level memory accesses are avoided for
loglin(, margin = NULL).loglin(, param = TRUE)no longer gives an error in corner cases
such as a one-dimensional input. -
dev.capabilities()$eventsnow reports"Idle"if the device
provides it, fixing PR#18836, thanks to Trevor Davis. -
arima(.., seasonal = <wrong-vector>)correctly errors now, ditto
forarima0(), thanks to Norbert Kuder's report on the R-devel
list. -
binomial(<link>)$linkinv(eta)and.. $mu.eta(eta)now also work
for"logit"link whenis.integer(eta). -
as.roman(x)now should work platform independently, also for,
e.g.,x = "IIIII"(=V) andx = "IIIIII"(=VI). -
R CMD Rd2pdfworks again on an installed package directory
containing LaTeX help (from option--latex), thanks to a report
by Peter Ruckdeschel.
4.4.2
CHANGES IN R 4.4.2
C-LEVEL FACILITIES:
- The S-compatibility macros
F77_COMandF77_COMDECLdefined in
headerR_ext/RS.hare deprecated and will be removed shortly. We
could find no record of their use.
BUG FIXES:
-
Mathlib function
lgammacor(x)no longer warns about underflow to
zero for largex. -
Text widths and heights were incorrectly reported by the Quartz
device if the drawing context didn't exist yet (typically when
drawing off-screen to a window that is yet to appear, see
PR#18591). -
The Quartz device could segfault in cases where paths with spaces
are used in the new glyph drawing API. Thanks to Tomek
Gieorgijewski (PR#18758). -
On macOS in R CRAN builds, it is again possible to read
little-endian UTF-16 text with a BOM from a connection using
encoding="UTF-16". Users building R from source should avoid
using the system libiconv in macOS 14.1 and later. -
methods' internal
.requirePackage()now re-enables primitive
method dispatch when needed; thanks to Ivan Krylov for
demystifying CRAN package check failures on the R-devel mailing
list.
R 4.4.1
CHANGES IN R 4.4.1
C-LEVEL FACILITIES:
-
Functions
R_atofandR_strtoddeclared in headerR_ext/Utils.h
are now documented in 'Writing R Extensions' and so formally part
of the API. -
The non-API entry points
Rf_setSVector,Rf_StringFalse,
Rf_StringTrueandRf_isBlankStringhave been added to those
reported byR CMD check. -
The new function
Rf_allocLangis now available. This provides an
alternative to the idiom of callingRf_allocListfollowed by
SET_TYPEOF.
UTILITIES:
R CMD checknow reports as warnings what gfortran calls 'Fortran
2018 deleted features', all of which have long been marked as
'obsolescent' and some of which were deleted in Fortran 2008 or
earlier. Fortran compilers are no longer required to support
these.
BUG FIXES:
-
as.numeric(),scan(),type.convert()and other places which use
the internal C functionR_strtodnow require a non-empty digit
sequence in a decimal or binary exponent. This aligns with the
C/POSIX standard for strtod and with?NumericConstants. -
as.data.frame(m, make.names=NA)now works correctly for a matrix
mwithNA's in row names. -
The error message from
<POSIXlt>[["hour"]]and similar now
mentions *[[, "hour"]], as wished for in [PR#17409](https://bugs.r-project.or\
g/show_bug.cgi?id=17409) and proposed by
Michael Chirico. -
qbinom()and potentiallyqpois(),qnbinom(), no longer sometimes
fail accurate inversion (ofpbinom(), etc), thanks to Christopher
Chang's report and patch in [PR#18711](https://bugs.r-project.org/show_bug.cg\
i?id=18711). -
The internal help server on Windows can again serve requests sent
in quick succession, fixing a regression in R 4.4.0. -
debugcall(<S3Generic>())now also works when a corresponding
S4-generic version is in the methods cache ([PR#18143](https://bugs.r-project\
.org/show_bug.cgi?id=18143)). -
Package tools'
toTitleCase(ch0)now returnscharacter(0)whench0
is of zero length; fixing [PR#18724](https://bugs.r-project.org/show_bug.cgi?\
id=18724), reported by David Hugh Jones. -
R CMD checkis no longer broken (without a check result and no
explanation in00check.log) for a package which declares an
invalidVignetteBuilderinDESCRIPTIONbut has no vignettes.
R 4.4.0
CHANGES IN R 4.4.0
SIGNIFICANT USER-VISIBLE CHANGES:
-
Startup banners,
R --version,sessionInfo()andR CMD checkno
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.
-
is.atomic(NULL)now returnsFALSE, asNULLis not an atomic
vector. Strict back-compatibility would replaceis.atomic(foo)
by(is.null(foo) || is.atomic(foo))but should happen only
sparingly.
NEW FEATURES:
-
The
confint()methods for "glm" and "nls" objects have been
copied to the stats package. Previously, they were stubs which
called versions in package MASS. The MASS namespace is no longer
loaded if you invoke (say)confint(glmfit). Further, the "glm"
method forprofile()and theplot()andpairs()methods for class
"profile" have been copied from MASS to stats. (profile.nls()
andplot.profile.nls()were already in stats.) -
The
confint()andprofile()methods for "glm" objects have gained a
possibility to do profiling based on the Rao Score statistic in
addition to the default Likelihood Ratio. This is controlled by a
newtest =argument. -
The
pairs()method for "profile" objects has been extended with a
which =argument to allow plotting only a subset of the
parameters. -
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. -
In
setRepositories()the repositories can be set using their
names vianame =instead of indexind =. -
methods()and.S3methods()gain aall.namesoption 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, e.g., fromsave.image(),
thanks to suggestions by Ivan Krylov and others on R-devel. -
New startup option
--max-connectionsto set the maximum number of
simultaneous connections for the session. Defaults to 128 as
before: allowed values up to 4096 (but resource limits may in
practice restrict to smaller values). -
R on Windows (since Windows 10 2004) now uses the new Segment
Heap allocator. This may improve performance of some
memory-intensive applications. -
When R packages are built, typically by
R CMD build <pkg>, the
new--user=<build_user>option overrides the (internally
determined) user name, currentlySys.info()["user"]orLOGNAME.
This is a (modified) fulfillment of Will Landau's suggestion in
PR#17530. -
tools::testInstalledBasic()gets new optional argumentsoutDir
andtestSrcdir, e.g., allowing to use it in a<builddir> != <srcdir>setup, and in standard "binary" Windows installation
if a sourcetests/folder is present. -
range(<DT_with_Inf>, finite = TRUE)now work for objects of class
"Date", "POSIXct", and "POSIXlt" with infinite entries,
analogously torange.default(), as proposed by Davis Vaughan on
R-devel. Otherrange()-methods can make use of new function
.rangeNum(). -
New
.internalGenericsobject complementing.S3PrimitiveGenerics,
for documentation and low-level book-keeping. -
grid()now invisibly returns the x- and y- coordinates at which
the grid-lines were drawn. -
norm(., type)now also works for complex matrices. -
kappa(., exact = TRUE, norm = *)now works for all norms and also
for complex matrices. In symmetric / triangular cases, the new
argumentuplo = "U"|uplo = "L"allows the upper or lower triangular
part to be specified. -
memDecompress(type = "unknown")recognizes compression in the
default 'zlib' format as used bymemCompress(type = "gzip"). -
memCompress()andmemDecompress()will use the libdeflate library
(https://github.com/ebiggers/libdeflate) if installed. This
uses the same type of compression fortype = "gzip"but is 1.5-2x
faster than the system libz library on some common platforms: the
speed-up may depend on the library version. -
diff()for objects of class "Date", "POSIXct", and "POSIXlt"
accepts a units argument passed via.... -
Dynamic help now does a much better job of rendering package
DESCRIPTIONmetadata. -
Rprof()gains an event argument and support for elapsed (real)
time profiling on Unix (PR#18076). -
filled.contour()gains a key.border argument. -
tools::update_pkg_po()gets arguments pot_make and mo_make for
not re-making the corresponding files, and additionally a
verbose argument. -
Hexadecimal string colour specifications are now accepted in
short form, so, for example, we can use"#123", which is
equivalent to"#112233".Thanks to MikeFC for the original idea and Ella Kaye, Malcolm
Barrett, George Stagg, and Hanne Oberman for the patch. -
Plain-text help shows
\varmarkup by angle brackets. -
The new experimental primitive function
declare()is intended to
eventually allow information about R code to be communicated to
the interpreter, compiler, and code analysis tools. The syntax
for declarations is still being developed. -
Functions
psmirnov(),qsmirnov()andrsmirnov()in package stats
have had argumenttwo.sidedrenamed to alternative, to take into
account that the permutation distributions of the one-sided
statistics can be different in the case of ties. Consequence of
PR#18582. -
sort()is now an implicit S4 generic in methods. -
Formatting and printing,
format(z),print(z), of complex vectors
zno longer zap relatively small real or imaginary parts to zero,
fixing PR#16752. This is an API change, as it was documented
previously to round real and imaginary parts together on purpose,
producing nicer looking output. As mentioned, e.g. in the PR,
this change is compatible with many other "R-like" programming
environments.We have simplified the internal code and now basically format the
real and imaginary parts independently of each other. -
New experimental functions
Tailcall()andExec()to support
writing stack-space-efficient recursive functions. -
Where characters are attempted to be plotted by
pdf(),
postscript()andxfig()which are not in the selected 8-bit
character set (most often Latin-1) and the R session is using a
UTF-8 locale, the warning messages will show the UTF-8 character
rather than its bytes and one dot will be substituted per
character rather than per byte. (Platforms whoseiconv()does
transliteration silently plot the transliteration.)In a UTF-8 locale some transliterations are now done with a
warning (e.g., dashes and Unicode minus to hyphen, ligatures are
expanded, permille (‰) is replaced by o/oo), although the OS may
have got there first. These are warnings as they will continue
to be replaced by dots in earlier versions of R. -
The matrix multiplication functions
crossprod()andtcrossprod()
are now also primitive and S3 generic, as%*%had become in R
4.3.0. -
source()andexample()have a new optional argumentcatch.aborts
which allows continued evaluation of the R code after an error. -
The non-Quartz
tiff()devices allow additional types of
compression if supported by the platform's libtiff library. -
The list of base and recommended package names is now provided by
tools::standard_package_names(). -
cairo_pdf()andcairo_ps()default toonefile = TRUEto closer
matchpdf()andpostscript(). -
New option
catch.script.errorsprovides a documented way to catch
errors and then continue in non-interactive use. -
L %||% Rnewly in base is an expressive idiom for the phrases
if(!is.null(L)) L else Rorif(is.null(L)) R else L. -
The return value from
warnings()now always inherits from
"warnings" as documented, now also in the case of no warnings
where it previously returnedNULL. -
as.complex("1i")now returns 0 + 1i instead ofNAwith a warning. -
z <- c(NA, 1i)now keeps the imaginary part Im(z[1]) == 0, no
longer coercing toNA_complex_. Similarly,cumsum(z)correctly
sums real and imaginary parts separately, i.e., without
"crosstalk" in case of NAs. -
On Alpine Linux
iconv()now maps "latin2", "latin-2", "latin9"
and "latin-9" to encoding names the OS knows about
(case-insensitively). -
iconv(sub = "Unicode")now always zero-pads to four (hex) digits,
rather than to 4 or 8. (This seems to have become the convention
once Unicode restricted the number of Unicode points to 2^21 - 1
and so will never need more than 6 digits.) -
NCOL(NULL)now returns 0 instead of 1, for consistency with
cbind(). -
The information for the Euro glyph missing from the Adobe
.afm
files for the Courier, Helvetica and Times families has been
copied from their URW equivalents - this will improve vertical
centring in thepdf()andpostscript()devices. -
The included BLAS sources have been updated to those shipped with
LAPACK version 3.12.0. The changes are almost entirely cosmetic. -
The included LAPACK sources have been updated to version 3.12.0
and some further double-complex routines added. -
There are new font families for the 2014--5 URW 2.0 fonts (see
?pdf) which are included in recent versions of Ghostscript.
These have font widths for most Greek glyphs and ...