Skip to content

Releases: r-hub/R

4.6.1

Choose a tag to compare

@gaborcsardi gaborcsardi released this 25 Jun 10:12
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

Choose a tag to compare

@gaborcsardi gaborcsardi released this 24 Apr 14:40
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 use stats4::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() and vcov() methods exist.

  • binomial(identity) and quasibinomial(identity) now work without
    having to quote the argument.

  • str() now shows more via format() 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
    .Library when that contains only base and recommended packages.

  • In *.Rd help files, the \linkS4class macro 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") supports extras = "-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 to TRUE by 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 in options("netrc").

  • tools::deparseLatex() gains a math argument, now used by the default
    bibstyle to format bibentry() 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. See RShowDoc("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 to warningCondition() and errorCondition() (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() (via plot.histogram()),
    barplot(), bxp(), and hence implicitly boxplot(). All except the
    former also gain a new panel.last. Suggested by Marieke Stolte and Julian
    Welz.

  • plot.default() gets a new switch lim2 to indicate that the default xlim
    and ylim range 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
    accept i2 = NULL to 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 \describe lists using line breaks after
    item labels. Set tools::Rd2txt_options(descStyle=NULL) to get the old
    behaviour with a simple space; a "colon" variant is also available.

  • x %notin% table newly 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 the as.table() method for "ftable"s get
    a perm argument with back compatible default. The as.table() method
    also gets a named.dim = FALSE switch, no longer creating a named
    dim(<result>) by default.

  • match.arg() gets a new option several.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 \Sexpr code now include the call from the
    original condition (if available). Warning messages now include Rd source
    locations.

  • When the environment variable R_WARN_BOUNDS_OPT is 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 by contrib.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.zst and .tar.zstd with the corresponding
    compression support.

  • The value of .Platform$pkgType which defines the native binary type for
    the current build of R can be overridden with R_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$pkgType then
    `R CMD INSTALL --bui...

Read more

4.5.3

Choose a tag to compare

@gaborcsardi gaborcsardi released this 11 Mar 15:17
CHANGES IN R 4.5.3:

UTILITIES:

  • tools/fetch-recommended can be used instead of
    tools/rsync-recommended to fetch recommended packages into R
    sources using curl on systems without rsync or behind firewalls.

PACKAGE INSTALLATION:

  • C++ standard specifications (CXX_STD = in src/Makevars* and in
    the SystemRequirements field of the DESCRIPTION file) 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.win or cleanup.ucrt,
    if requested via options --clean or --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 and obj has a simple class, fixing
    the first part of PR#18971 thanks to Jan Gorecki.

  • str(x, give.attr=FALSE) no longer shows attributes when x is a
    zero length "Date" or "POSIXt" object.

  • Tweaks to binning for bw.SJ() and bw.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>) <- v is more careful about balancing, notably
    when v is 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 the ties() 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 with ch a 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

Choose a tag to compare

@gaborcsardi gaborcsardi released this 02 Nov 11:01
CHANGES IN R 4.5.2:

UTILITIES:

  • R CMD check now handles archives with extension .tar or .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") <- val now uses getOption("ts.eps") instead of
    hardwired 1e-5; consequently, ts(.., ts.eps=*) now passes ts.eps
    to the "tsp" setting C code; both fixing a long-standing ‘FIXME’.

  • insertSource() now ignores the internal .packageName object,
    avoiding a superfluous message.

  • In static HTML help, links to vignette files from the default
    doc/index.html page 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
    \eqn no 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] <- val and <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 where is.na(Re(Z)) differs from is.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() and download.packages() again
    consult option download.file.method when the download method is
    unspecified.

  • Tanguy Barthelemy and colleagues at the ‘R Dev Day’ following
    Rencontres R in May 2025 extended the help page of lm(), fixing
    PR#18058. As suggested by Thomas Soeiro, such not es were also
    added to the glm(), poly() and splines::bs() and ns() pages.

  • lbeta(1i, 1) now signals an error, as lbeta() is not implemented
    for complex, fixing PR#18946 from Ben Bolker and Kasper
    Kristensen.

  • The Cairo-based SVG device uses pt as 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 for pretty(c(0, 1e-322), eps.correct = 2).

  • When "POSIXlt" date-time objects are NA-padded from subsetting or
    increasing length in the [ or length<- methods, the
    "balanced" attribute is set to NA, now; noted in PR#18681, thanks
    to Mikael Jagan.

4.5.1

Choose a tag to compare

@gaborcsardi gaborcsardi released this 13 Jun 10:57
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
    NaN or Inf sometimes.

  • dbinom(<large>, n=Inf, ..) is 0 now correctly, instead of NaN
    which also fixes many dnbinom() 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 for dbinom(),
    dnbinom(), and via dbinom_raw() potentially dgeom(), dhyper(),
    dbeta(), and df().

  • signif(1.**e308, digits) no longer truncates unnecessarily (but
    still to prevent overflow to Inf), 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 returns NaN but
    the correct values (0 or 1, or their logs for log.p = TRUE).
    This improves Mathlib's C level bratio() and hence also
    pnbinom(), etc..

R 4.5.0

Choose a tag to compare

@gaborcsardi gaborcsardi released this 11 Apr 10:45
CHANGES IN R 4.5.0:

NEW FEATURES:

  • as.integer(rl) and hence as.raw(rl) now work for a list of raw(1)
    elements, as proposed by Michael Chirico's PR#18696.

  • graphics' grid() gains optional argument nintLog.

  • New functions check_package_urls() and check_package_dois() in
    package tools for checking URLs and DOIs in package sources.

  • New head() and tail() methods for class "ts" time series,
    proposed by Spencer Graves on R-devel.

  • New qr.influence() function, a “bare bones” interface to the
    lm.influence() leave-one-out diagnostics computations; wished for
    in PR#18739.

  • Package citation() results auto-generated from the package
    metadata now also provide package DOIs for CRAN and Bioconductor
    packages.

  • New function grepv() identical to grep() except for the default
    value = TRUE.

  • methods(<pkg>:::<genfun>) now does report methods when neither
    the generic nor the methods have been exported.

  • pdf() gains an author argument to set the corresponding metadata
    field, and logical arguments timestamp and producer to optionally
    omit the respective metadata. (Thanks to Edzer Pebesma.)

  • grDevices::glyphInfo() gains a rot argument to allow per-glyph
    rotation. (Thanks to Daniel Sabanes Bove.)

  • Package tools now exports functions CRAN_current_db(),
    CRAN_aliases_db(), CRAN_rdxrefs_db(), CRAN_archive_db(), and
    CRAN_authors_db().

  • Package tools now exports functions R() and
    parse_URI_reference().

  • Package tools now exports functions base_aliases_db() and
    base_rdxrefs_db().

  • It is now possible to set the background color for row and column
    names in the data editor on Windows (Rgui).

  • Rterm on Windows now accepts input lines of unlimited length.

  • file.info() on Windows now provides file owner name and domain.

  • Sys.info() on Windows now provides current user domain.

  • findInterval() gets new arguments checkSorted and checkNA which
    allow skipping relatively costly checks; related to PR#16567.

  • pnorm(x) underflows more gracefully.

  • get(nam, env) now signals a classed error, "getMissingError",
    as “subclass” of "missingArgError" where the latter is used also
    in similar situations, e.g., f <- function(x) exp(x); try(f()) .

  • The set operations now avoid the as.vector() transformation for
    same-kind apparently vector-like operands.

  • md5sum() can be used to compute an MD5 hash of a raw vector of
    bytes by using the bytes= argument instead of files=. The two
    arguments are mutually exclusive.

  • Added function sha256sum() in package tools analogous to md5sum()
    implementing the SHA-256 hashing algorithm.

  • The xtfrm() method for class "AsIs" is now considerably faster
    thanks to a patch provided by Ivan Krylov.

  • The merge() method for data frames will no longer convert row
    names used for indexing using I(), which will lead to faster
    execution in cases where sort = TRUE and all.x and/or all.y are
    set to TRUE.

  • The methods package internal function .requirePackage() now calls
    requireNamespace(p) instead of require(p), hence no longer adding
    packages to the search() path in cases methods or class
    definitions are needed. Consequently, previous workflows relying
    on the old behaviour will have to be amended by adding
    corresponding library(p) calls.

  • More R-level messages use a common format containing "character
    string" for more consistency and less translation work.

  • available.packages() and install.packages() get an optional
    switch cache_user_dir, somewhat experimentally.

  • The sunspot.month data have been updated to Oct 2024; because of
    recalibration also historical numbers are changed, and we keep
    the previous data as sunspot.m2014 for reproducibility.

  • The quartz() device now supports alpha masks. Thanks to George
    Stagg, Gwynn Gebeyhu, Heather Turner, and Tomek Gieorgijewski.

  • The print() method for date-time objects (POSIX.t) gets an
    optional digits argument for fractional seconds, passed to
    improved format.POSIXlt(); consequently, print(<date.time>, digits = n) allows to print fractions of seconds.

  • install.packages() and download.packages() download packages
    simultaneously using libcurl, significantly reducing download
    times when installing or downloading multiple packages.

  • Status reporting in download.file() has been extended to report
    the outcome for individual files in simultaneous downloads.

  • The Rd \link macro now allows markup in the link text when the
    topic is given by the optional argument, e.g.,
    \link[=gamma]{\eqn{\Gamma(x)}}.

  • If La_library() is empty, sessionInfo() still reports
    La_version() when available.

  • seq.int(from, to, by, ....) when |by| = 1 now behaves as if by
    was omitted, and hence returns from:to, possibly integer.

  • seq.Date(from, to, by, ....) and seq.POSIXt(..) now also work
    when from is missing and sufficient further arguments are
    provided, thanks to Michael Chirico's report, patch proposal in
    PR#17672 and ‘R Dev Day’ contributions.

    The Date method also works for seq(from, to), when by is missing
    and now defaults to "1 days".

    It is now documented (and tested) that the by string may be
    abbreviated in both seq methods.

    Both methods return or keep internal type "integer" more
    consistently now. Also, as.POSIXct({}) is internally integer.

  • duplicated(), unique(), and anyDuplicated() now also work for
    class expression vectors.

  • New function use() to use packages in R scripts with full control
    over what gets added to the search path. (Actually already
    available since R 4.4.0.)

  • There is some support for zstd compression of tarballs in tar()
    and untar(). (This depends on OS support of libzstd or by tar.)

  • print(summary(<numbers>)) gets new optional argument zdigits to
    allow more flexible and consistent (double) rounding. The
    current default zdigits = 4L is somewhat experimental.
    Specifying both digits = *, zdigits = * allows behaviour
    independent of the global digits option.

  • The format() method for "difftime" objects gets a new back
    compatible option with.units.

  • A summary() method for "difftime" objects which prints nicely,
    similar to those for "Date" and "POSIXct".

  • unique()'s default method now also deals with "difftime" objects.

  • optimize(f, *) when f(x) is not finite says more about the value
    in its warning message. It no longer replaces -Inf by the
    largest positive finite number.

  • The documentation of gamma() and is.numeric() is more specific,
    thanks to the contributors of PR#18677.

  • New dataset gait thanks to Heather Turner and Ella Kaye, used in
    examples.

  • New datasets penguins and penguins_raw thanks to Ella Kaye,
    Heather Turner, and Kristen Gorman.

  • isSymmetric(<matrix>) gains a new option trans = "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 routines dgemmtr and zgemmtr which are now
    used by LAPACK routines. This means that BLAS implementations
    are no longer interchangeable.

  • To work around this, R can be configured with option
    --with-2025blas which arranges for the 2025 BLAS additions to be
    compiled into libRlapack (the internal LAPACK, not built if an
    external LAPACK is used).

    This option allows the continuation of the practice of swapping
    the BLAS in use by symlinking lib/libRblas.*. It has the
    disadvantage of using the reference BLAS version of the 2025
    routines whereas an enhanced BLAS might have an optimized version
    (OpenBLAS does as from version 0.3.29).

  • Windows builds currently use the internal LAPACK and by default
    the internal BLAS: notes on how to swap the latter via
    Rblas.dll are in file src/extra/blas/Makefile.win.

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...

Read more

R 4.4.3

Choose a tag to compare

@gaborcsardi gaborcsardi released this 28 Feb 11:10
CHANGES IN R 4.4.3

INSTALLATION:

  • R can be installed using C23 (for example with -std=gnu23 or
    -std=gnu2x) with recent compilers including gcc 12-14, Apple
    clang 15-16, LLVM clang 17-20 and Intel icx 2024.2.

    It can be installed with the upcoming (at the time of writing)
    gcc 15, which defaults to C23.

C-LEVEL FACILITIES:

  • The functions R_strtod and R_atof now allow hexadecimal constants
    without an exponent, for compatibility with their C99 versions
    (PR#18805).

UTILITIES:

  • R CMD build and R CMD check now allow reference output for demo
    scripts (demo/<demo>.Rout.save files) to be shipped with the
    package, as proposed by Torsten Hothorn in PR#18816.

BUG FIXES:

  • kappa(A, exact=TRUE) for singular A returns Inf more generally,
    fixing PR#18817 reported by Mikael Jagan.

  • Fixed URLs of the sun spots (sunspot.month etc) data sets and
    mention future changes due to recalibration.

  • The parser now accepts hexadecimal constants with a decimal point
    without an exponent (taken as p0) as documented in
    ?NumericConstants (PR#18819).

  • rbind() now works correctly when inputs include a raw vector and
    a logical, integer or double vector - previously the inclusion of
    the latter was garbled.

  • smooth.spline() checks validity of its arguments df.offset and
    penalty: it could segfault if they were NULL.

  • isGeneric(<primitive>, fdef=*, getName=TRUE) now also returns the
    name instead of just TRUE, fixing PR#18829 reported by Mikael
    Jagan.

  • isGeneric(fdef = print) now works, fixing PR#18369 thanks to
    Mikael Jagan.

  • sort(x, method = "qsort") made illegal accesses when x has length
    0.

  • dir.create() is protected against being passed an empty string as
    its path argument.

  • Silent integer overflow could occur in the 'exact' computations
    for fisher.test() for unrealistic inputs: this is now an error.

  • Some invalid C-level memory accesses are avoided for loglin(, margin = NULL).

    loglin(, param = TRUE) no longer gives an error in corner cases
    such as a one-dimensional input.

  • dev.capabilities()$events now reports "Idle" if the device
    provides it, fixing PR#18836, thanks to Trevor Davis.

  • arima(.., seasonal = <wrong-vector>) correctly errors now, ditto
    for arima0(), thanks to Norbert Kuder's report on the R-devel
    list.

  • binomial(<link>)$linkinv(eta) and .. $mu.eta(eta) now also work
    for "logit" link when is.integer(eta).

  • as.roman(x) now should work platform independently, also for,
    e.g., x = "IIIII" (= V) and x = "IIIIII" (= VI).

  • R CMD Rd2pdf works again on an installed package directory
    containing LaTeX help (from option --latex), thanks to a report
    by Peter Ruckdeschel.

4.4.2

Choose a tag to compare

@gaborcsardi gaborcsardi released this 31 Oct 20:31
CHANGES IN R 4.4.2

C-LEVEL FACILITIES:

  • The S-compatibility macros F77_COM and F77_COMDECL defined in
    header R_ext/RS.h are deprecated and will be removed shortly. We
    could find no record of their use.

BUG FIXES:

  • Mathlib function lgammacor(x) no longer warns about underflow to
    zero for large x.

  • Text widths and heights were incorrectly reported by the Quartz
    device if the drawing context didn't exist yet (typically when
    drawing off-screen to a window that is yet to appear, see
    PR#18591).

  • The Quartz device could segfault in cases where paths with spaces
    are used in the new glyph drawing API. Thanks to Tomek
    Gieorgijewski (PR#18758).

  • On macOS in R CRAN builds, it is again possible to read
    little-endian UTF-16 text with a BOM from a connection using
    encoding="UTF-16". Users building R from source should avoid
    using the system libiconv in macOS 14.1 and later.

  • methods' 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

Choose a tag to compare

@gaborcsardi gaborcsardi released this 14 Jun 08:15
CHANGES IN R 4.4.1

C-LEVEL FACILITIES:

  • Functions R_atof and R_strtod declared in header R_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_StringTrue and Rf_isBlankString have been added to those
    reported by R CMD check.

  • The new function Rf_allocLang is now available. This provides an
    alternative to the idiom of calling Rf_allocList followed by
    SET_TYPEOF.

UTILITIES:

  • R CMD check now 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 function R_strtod now 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
    m with NA'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 potentially qpois(), qnbinom(), no longer sometimes
    fail accurate inversion (of pbinom(), 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 returns character(0) when ch0
    is of zero length; fixing [PR#18724](https://bugs.r-project.org/show_bug.cgi?\
    id=18724), reported by David Hugh Jones.

  • R CMD check is no longer broken (without a check result and no
    explanation in 00check.log) for a package which declares an
    invalid VignetteBuilder in DESCRIPTION but has no vignettes.

R 4.4.0

Choose a tag to compare

@gaborcsardi gaborcsardi released this 24 Apr 07:43
CHANGES IN R 4.4.0

SIGNIFICANT USER-VISIBLE CHANGES:

  • Startup banners, R --version, sessionInfo() and R CMD check no
    longer report (64-bit) as part of the platform as this is almost
    universal - the increasingly rare 32-bit platforms will still
    report (32-bit).

    On Windows, ditto for window titles.

  • is.atomic(NULL) now returns FALSE, as NULL is not an atomic
    vector. Strict back-compatibility would replace is.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 for profile() and the plot() and pairs() methods for class
    "profile" have been copied from MASS to stats. (profile.nls()
    and plot.profile.nls() were already in stats.)

  • The confint() and profile() 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
    new test = 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 via name = instead of index ind =.

  • methods() and .S3methods() gain a all.names option for the (rare)
    case where functions starting with a . should be included.

  • Serializations can now be interrupted (e.g., by Ctrl-C on a
    Unix-alike) if they take too long, e.g., from save.image(),
    thanks to suggestions by Ivan Krylov and others on R-devel.

  • New startup option --max-connections to 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, currently Sys.info()["user"] or LOGNAME.
    This is a (modified) fulfillment of Will Landau's suggestion in
    PR#17530.

  • tools::testInstalledBasic() gets new optional arguments outDir
    and testSrcdir, e.g., allowing to use it in a <builddir> != <srcdir> setup, and in standard "binary" Windows installation
    if a source tests/ folder is present.

  • range(<DT_with_Inf>, finite = TRUE) now work for objects of class
    "Date", "POSIXct", and "POSIXlt" with infinite entries,
    analogously to range.default(), as proposed by Davis Vaughan on
    R-devel. Other range()-methods can make use of new function
    .rangeNum().

  • New .internalGenerics object 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
    argument uplo = "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 by memCompress(type = "gzip").

  • memCompress() and memDecompress() will use the libdeflate library
    (https://github.com/ebiggers/libdeflate) if installed. This
    uses the same type of compression for type = "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
    DESCRIPTION metadata.

  • 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 \var markup 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() and rsmirnov() in package stats
    have had argument two.sided renamed 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
    z no 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() and Exec() to support
    writing stack-space-efficient recursive functions.

  • Where characters are attempted to be plotted by pdf(),
    postscript() and xfig() 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 whose iconv() 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() and tcrossprod()
    are now also primitive and S3 generic, as %*% had become in R
    4.3.0.

  • source() and example() have a new optional argument catch.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() and cairo_ps() default to onefile = TRUE to closer
    match pdf() and postscript().

  • New option catch.script.errors provides a documented way to catch
    errors and then continue in non-interactive use.

  • L %||% R newly in base is an expressive idiom for the phrases
    if(!is.null(L)) L else R or if(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 returned NULL.

  • as.complex("1i") now returns 0 + 1i instead of NA with a warning.

  • z <- c(NA, 1i) now keeps the imaginary part Im(z[1]) == 0, no
    longer coercing to NA_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 the pdf() and postscript() 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 ...

Read more