This blog is updated daily.

A general description is here.

### Sat, 18 Jun 2022

#### CHANGES IN R 4.2.1 NEW FEATURES

• New function ‘utils::findCRANmirror()’ to find out if a CRAN mirror has been selected, otherwise fallback to the main site. This behaves in the same way as ‘tools::CRAN_package_db()’ and is intended for packages wishing to access CRAN for purposes other than installing packages.

The need for this was shown by a day when the main CRAN website was offline and a dozen or so packages which had its URL hardcoded failed their checks.

#### CHANGES IN R 4.2.1 INSTALLATION on a UNIX-ALIKE

• The libraries searched for by ‘--with-blas’ (without a value) now include BLIS (after OpenBLAS but before ATLAS). And on macOS, the Accelerate framework (after ATLAS). (This is patterned after the ‘AX_BLAS’ macro from the Autoconf Archive.)

• The included LAPACK sources have been updated to 3.10.1.

#### CHANGES IN R 4.2.1 UTILITIES

• The (full path to) the command ‘tidy’ to be used for HTML validation can be set by environment variable ‘R_TIDYCMD’.

• Setting environment variable ‘_R_CHECK_RD_VALIDATE_RD2HTML_’ to a false value will override ‘R CMD check --as-cran’ and turn off HTML validation. This provides a way to circumvent a problematic ‘tidy’.

The 2006 version that ships with macOS is always skipped.

#### CHANGES IN R 4.2.1 C-LEVEL FACILITIES

• The undocumented legacy declarations of ‘Sint’, ‘Sfloat’, ‘SINT_MAX’ and ‘SINT_MIN’ in header ‘R.h’ are deprecated.

#### CHANGES IN R 4.2.1 BUG FIXES

• ‘fisher.test(d)’ no longer segfaults for “large” ‘d’; fixing PR#18336 by preventing/detecting an integer overflow reliably.

• ‘tar(., files=*)’ now produces correctly the warning about invalid uid or gid of files, fixing PR#18344, reported by Martin Morgan.

• ‘tk_choose.files()’ with ‘multi = FALSE’ misbehaved on paths containing spaces (PR#18334) (regression introduced in R 4.0.0).

• ‘sort(x, partial = ind, *)’ now works correctly notably for the non-default ‘na.last = FALSE’ or ‘TRUE’, fixing PR#18335 reported by James Edwards.

• Environment variable ‘_R_CHECK_XREFS_REPOSITORIES_’ is only used for checking ‘.Rd’ cross-references in ‘R CMD check’ (as documented) and not for other uses looking for a CRAN mirror.

• The search for a CRAN mirror when checking packages now uses ‘getOption("repos")’ if that specifies a CRAN mirror, even when it does not also specify all three Bioconductor repositories (as was previously required).

• The HTML code generated by ‘tools::Rd2HTML()’ has been improved to pass ‘tidy’ 5.8.0.

#### CHANGES IN R 4.2.1 BUG FIXES on Windows

• Writing to a clipboard connection works again, fixing a regression in R 4.2.0 (PR#18332). Re-using a closed clipboard connection longer issues a spurious warning about an ignored encoding argument.

• C function ‘getlocale’ no longer attempts to query an unsupported category from the OS, even when requested at R level, which may cause crashes when R 4.2.0 (which uses UCRT) is embedded (reported by Kevin Ushey).

• Accent keys now work in GraphApp Unicode windows, which are used by ‘Rgui’ whenever running in a multibyte locale (so also in UTF-8, hence fixing a regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

• Completion in ‘Rgui’ now works also with non-ASCII characters.

• ‘Rgui’ no longer truncates usage information with ‘--help’.

• Text injection from external applications via ‘SendInput’ now works in GraphApp Unicode windows, fixing a regression in R 4.2.0 for ‘Rgui’ users of systems where R 4.1 used a single-byte locale but R 4.2.0 uses UTF-8.

• Performance of ‘txtProgressBar()’ in ‘Rgui’ when running in a multi-byte locale has been improved (fixing a performance regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

• The script editor in ‘Rgui’ now works also on systems using UTF-8 as the native encoding. Users of the script editor have to convert their scripts with non-ASCII characters to UTF-8 before reading them in R 4.2.1 or newer (on recent Windows where UTF-8 is used). This fixes a regression in R 4.2.0, which prevented some operations with scripts when they contained non-ASCII characters.

### Thu, 16 Jun 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• The HTML code generated by ‘tools::Rd2HTML()’ has been improved to pass ‘tidy’ 5.8.0.

• The search for a CRAN mirror when checking packages now uses ‘getOption("repos")’ if that specifies a CRAN mirror, even when it does not also specify all three Bioconductor repositories (as was previously required).

### Sat, 04 Jun 2022

#### CHANGES IN R 4.2.0 patched NEW FEATURES

• New function ‘utils::findCRANmirror()’ to find out if a CRAN mirror has been selected, otherwise fallback to the main site. This behaves in the same way as ‘tools::CRAN_package_db()’ and is intended for packages wishing to access CRAN for purposes other than installing packages.

The need for this was shown by a day when the main CRAN website was offline and a dozen or so packages which had its URL hardcoded failed their checks.

### Fri, 03 Jun 2022

#### CHANGES IN R 4.2.0 patched INSTALLATION on a UNIX-ALIKE

• The libraries searched for by ‘--with-blas’ (without a value) now include BLIS (after OpenBLAS but before ATLAS). And on macOS, the Accelerate framework (after ATLAS). (This is patterned after the ‘AX_BLAS’ macro from the Autoconf Archive.)

#### CHANGES IN R 4.2.0 patched BUG FIXES

• The search for a CRAN mirror when checking packages now uses ‘getOption("repos")’ if that specifies a CRAN mirror, even when it does not also specify all three Bioconductor repositiotries (as was previously required).

### Thu, 02 Jun 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• The search for a CRAN mirror when checking packages now uses ‘getOption("repos")’ if that specifies a CRAN mirror, even when it does not also specify all three Bioconductor repositiotries (as was previously reauired).

### Tue, 31 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• ‘sort(x, partial = ind, *)’ now works correctly notably for the non-default ‘na.last = FALSE’ or ‘TRUE’, fixing PR#18335 reported by James Edwards.

### Mon, 30 May 2022

#### CHANGES IN R 4.2.0 patched C-LEVEL FACILITIES

• The undocumented legacy declarations of ‘Sint’, ‘Sfloat’, ‘SINT_MAX’ and ‘SINT_MIN’ in header ‘R.h’ are deprecated.

### Sun, 29 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES on Windows

• Writing to a clipboard connection works again, fixing a regression in R 4.2.0 (PR#18332). Re-using a closed clipboard connection longer issues a spurious warning about an ignored encoding argument.

• C function ‘getlocale’ no longer attempts to query an unsupported category from the OS, even when requested at R level, which may cause crashes when R 4.2.0 (which uses UCRT) is embedded (reported by Kevin Ushey).

• Accent keys now work in GraphApp Unicode windows, which are used by ‘Rgui’ whenever running in a multibyte locale (so also in UTF-8, hence fixing a regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

• Completion in ‘Rgui’ now works also with non-ASCII characters.

• ‘Rgui’ no longer truncates usage information with ‘--help’.

• Text injection from external applications via ‘SendInput’ now works in GraphApp Unicode windows, fixing a regression in R 4.2.0 for ‘Rgui’ users of systems where R 4.1 used a single-byte locale but R 4.2.0 uses UTF-8.

• Performance of ‘txtProgressBar()’ in ‘Rgui’ when running in a multi-byte locale has been improved (fixing a performance regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

• The script editor in ‘Rgui’ now works also on systems using UTF-8 as the native encoding. Users of the script editor have to convert their scripts with non-ASCII characters to UTF-8 before reading them in R 4.2.1 or newer (on recent Windows where UTF-8 is used). This fixes a regression in R 4.2.0, which prevented some operations with scripts when they contained non-ASCII characters.

#### CHANGES IN R 4.2.0 patched BUG FIXES

• Writing to a clipboard connection on Windows works again, fixing a regression in R 4.2.0 (PR#18332). Re-using a closed clipboard connection on Windows no longer issues a spurious warning about an ignored encoding argument.

• ‘getlocale’ on Windows no longer attempts to query an unsupported category from the OS, even when requested at R level, which may cause crashes when R 4.2.0 (which uses UCRT) is embedded (reported by Kevin Ushey).

• Accent keys now work in GraphApp Unicode windows, which are used by Rgui whenever running in a multibyte locale (so also in UTF-8, hence fixing a regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

• Completion in Rgui on Windows now works also with non-ASCII characters.

• Rgui no longer truncates usage information with ‘--help’.

• Text injection from external applications via ‘SendInput’ now works in GraphApp Unicode windows, fixing a regression in R 4.2.0 for Rgui users of systems where R 4.1 used a single-byte locale but R 4.2.0 uses UTF-8.

• Performance of ‘txtProgressBar’ in Rgui when running in a multi-byte locale has been improved (fixing a performance regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

• The script editor in Rgui now works also on systems using UTF-8 as the native encoding. Users of the script editor have to convert their scripts with non-ASCII characters to UTF-8 before reading them in R 4.2.1 or newer (on recent Windows where UTF-8 is used). This fixes a regression in R 4.2.0, which prevented some operations with scripts when they contained non-ASCII characters.

• ‘tar(., files=*)’ now produces correctly the warning about invalid uid or gid of files, fixing PR#18344, reported by Martin Morgan.

• ‘tk_choose.files()’ with ‘multi = FALSE’ misbehaved on paths containing spaces (PR#18334) (regression introduced in R 4.0.0).

### Sat, 28 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• The script editor in Rgui now works also on systems using UTF-8 as the native encoding. Users of the script editor have to convert their scripts with non-ASCII characters to UTF-8 before reading them in R 4.2.1 or newer (on recent Windows where UTF-8 is used). This fixes a regression in R 4.2.0, which prevented some operations with scripts when they contained non-ASCII characters.

• Text injection from external applications via ‘SendInput’ now works in GraphApp Unicode windows, fixing a regression in R 4.2.0 for Rgui users of systems where R 4.1 used a single-byte locale but R 4.2.0 uses UTF-8.

### Fri, 27 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• Environment variable ‘_R_CHECK_XREFS_REPOSITORIES_’ is only used for checking ‘.Rd’ cross-references in ‘R CMD check’ (as documented) and not for other uses looking for a CRAN mirror.

### Sat, 21 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• Performance of ‘txtProgressBar’ in Rgui when running in a multi-byte locale has been improved (fixing a performance regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

### Fri, 20 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• ‘tar(., files=*)’ now produces the warning about invalid uid or gid of files correctly, fixing PR#18344, reported by Martin Morgan.

### Wed, 18 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• Text injection from external applications via ‘SendInput’ now works in GraphApp Unicode windows, fixing a regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale but R 4.2.0 uses UTF-8.

### Sat, 14 May 2022

#### CHANGES IN R 4.2.0 patched UTILITIES

• The (full path to) the command ‘tidy’ to be used for HTML validation can be set by environment variable ‘R_TIDYCMD’.

#### CHANGES IN R 4.2.0 patched BUG FIXES

• ‘fisher.test(d)’ no longer segfaults for “large” ‘d’; fixing PR#18336 by preventing/detecting an integer overflow reliably.

• ‘tk_choose.files()’ with ‘multi=FALSE’ misbehaved on paths containing spaces (PR#18334) (regression introduced in R 4.0.0).

### Fri, 13 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• Rgui no longer truncates usage information with ‘--help’.

### Tue, 10 May 2022

#### CHANGES IN R 4.2.0 PACKAGE INSTALLATION

• ‘USE_FC_LEN_T’ will become the default: this uses the correct prototypes for Fortran BLAS/LAPACK routines called from C/C++, and requires adjustment of most such calls - see ‘Writing R Extensions’ §6.6.1. (This has been supported since R 3.6.2.)

### Thu, 05 May 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• Accent keys now work in GraphApp Unicode windows, which are used by Rgui whenever running in a multibyte locale (so also in UTF-8, hence fixing a regression in R 4.2.0 for users of systems where R 4.1 used a single-byte locale).

• Completion in Rgui on Windows now works also with non-ASCII characters.

### Wed, 04 May 2022

#### CHANGES IN R 4.2.0 patched UTILITIES

• Setting environment variable ‘_R_CHECK_RD_VALIDATE_RD2HTML_’ to a false value will override ‘R CMD check --as-cran’ and turn off HTML validation. This provides a way to circumvent a problematic ‘tidy’.

The 2006 version that ships with macOS is always skipped.

### Tue, 03 May 2022

#### CHANGES IN R 4.2.0 patched UTILITIES

• Setting environment variable ‘_R_CHECK_RD_VALIDATE_RD2HTML_’ to a false value will override ‘R CMD check --as-cran’ and turn off HTML validation. This provides a way to circumvent a problematic ‘tidy’ such as the 2006 version that ships with macOS.

### Fri, 29 Apr 2022

#### CHANGES IN R 4.2.0 patched BUG FIXES

• Writing to a clipboard connection on Windows works again, fixing a regression in R 4.2.0 (PR#18332). Re-using a closed clipboard connection on Windows no longer issues a spurious warning about an ignored encoding argument.

• ‘getlocale’ on Windows no longer attempts to query an unsupported category from the OS, even when requested at R level, which may cause crashes when R 4.2.0 (which uses UCRT) is embedded (reported by Kevin Ushey).

#### CHANGES IN R 4.2.0 patched UTILITIES

• Setting environment variable ‘_R_CHECK_RD_VALIDATE_RD2HTML_’ to false value will override ‘R CMD check --as-cran’ and turn off HTML validation. This provides a way to circumvent a problematic ‘tidy’ such as the 2006 version that ships with macOS.

### Wed, 27 Apr 2022

#### CHANGES IN R 4.2.0 patched UTILiTIES

• Setting environment variable ‘_R_CHECK_RD_VALIDATE_RD2HTML_’ to false value will override ‘R CMD check --as-cran’ and turn off HTML validation. This provides a way to circumvent a problematic ‘tidy’ such as the 2006 version that ships with macOS.

#### CHANGES IN R 4.2.0 UTILITIES

• ‘R CMD check’ can optionally (but included in ‘--as-cran’) validate the HTML produced from the packages ‘.Rd’ files. See <URL: https://blog.r-project.org/2022/04/08/enhancements-to-html-documentation/index.html> : this needs a fairly recent version of HTML tidy to be available.

### Sun, 24 Apr 2022

#### CHANGES IN R 4.2.0 patched INSTALLATION on a UNIX-ALIKE

• The libraries searched for by ‘--with-blas’ (without a value) now include BLIS (after OpenBLAS but before ATLAS). And on macOS, the Accelerate framework (after ATLAS).

• The included LAPACK sources have been updated to 3.10.1.

### Fri, 22 Apr 2022

#### CHANGES IN R 4.2.0 NEW FEATURES

• ‘list2DF()’ now checks that its arguments are of the same length, rather than use recycling.

### Wed, 20 Apr 2022

#### CHANGES IN R 4.2.0 NEW FEATURES

• The set utility functions, notably ‘intersect()’ have been tweaked to be more consistent and symmetric in their two set arguments, also preserving a common ‘mode’.

### Fri, 08 Apr 2022

#### CHANGES IN R 4.2.0 BUG FIXES

• ‘tools::Rd2txt()’ used for plain-text help pages now renders \hrefs (if ‘tools::Rd2txt_options(showURLs = TRUE)’) and \urls with percent-encoding and standards-compliant delimiting style (angle brackets and no ‘URL: ’ prefix). \email is now rendered with a ‘mailto:’ prefix.

### Sun, 03 Apr 2022

#### CHANGES IN R 4.2.0 PACKAGE INSTALLATION

• ‘USE_FC_LEN_T’ will become the default: this uses the correct prototypes for Fortran BLAS/LAPACK routines called from C/C++, and requires adjustment of most such calls - see ‘Writing R Extensions’ §6.6.2. (This has been supported since R 3.6.2.)

#### CHANGES IN R 4.2.0 BUG FIXES

• Improved determination of the correct translation domain in non-base packages, addressing the combination of PR#18092 and PR#17998 (‘#c6’) with reports and _augmented_ patch #2904 by Suharto Anggono.

Note that ‘"R-base"’ is no longer the default domain e.g., for top-level calls to ‘gettext()’; rather translation needs explicit ‘domain = *’ specification in such cases.

### Thu, 31 Mar 2022

#### CHANGES IN R 4.2.0 NEW FEATURES

• New functions ‘psmirnov()’, ‘qsmirnov()’ and ‘rsmirnov()’ in package ‘stats’ implementing the asymptotic and exact distributions of the two-sample Smirnov statistic.

### Wed, 30 Mar 2022

#### CHANGES IN R 4.2.0 INSTALLATION

• R can now be built with ‘DEFS = -DSTRICT_R_HEADERS’ .

### Tue, 29 Mar 2022

#### CHANGES IN R 4.2.0 UTILITIES

• For packages using the \doi Rd macro (now an install-time \Sexpr) but no other dynamic Rd content, ‘R CMD build’ now produces a smaller tarball and is considerably faster - skipping temporary package installation.

### Sun, 27 Mar 2022

#### CHANGES IN R 4.2.0 SIGNIFICANT USER-VISIBLE CHANGES

• The ‘formula’ method of ‘aggregate()’ now matches the generic in naming its first argument ‘x’ (resolving PR#18299 by Thomas Soeiro).

This means that calling ‘aggregate()’ with a formula as a named first argument requires name ‘formula’ in earlier versions of R and name ‘x’ now, so portable code should not name the argument (code in many packages did).

• Calling ‘&&’ or ‘||’ with either argument of length greater than one now gives a warning (which it is intended will become an error).

• Calling ‘if()’ or ‘while()’ with a condition of length greater than one gives an error rather than a warning. Consequently, environment variable ‘_R_CHECK_LENGTH_1_CONDITION_’ no longer has any effect.

• Windows users should consult the WINDOWS section below for some profound changes including

• Support for 32-bit builds has been dropped.

• UTF-8 locales are used where available.

• The default locations for the R installation and personal library folder have been changed.

Thanks to Tomas Kalibera for months of work on the Windows port for this release.

#### CHANGES IN R 4.2.0 NEW FEATURES

• ‘matrix(x, n, m)’ now warns in more cases where ‘length(x)’ differs from ‘n * m’, as suggested by Abby Spurdle and Wolfgang Huber in Feb 2021 on the R-devel mailing list.

This warning can be turned into an error by setting environment variable ‘_R_CHECK_MATRIX_DATA_’ to ‘TRUE’: ‘R CMD check --as-cran’ does so unless it is already set.

• Function ‘file_test()’ in package ‘utils’ gains tests for symlinks, readability and writability.

• ‘capabilities("libxml")’ is now false.

The description of ‘capabilities("http/ftp")’ now reflects that it refers to the default method, no longer the internal one.

• ‘simplify2array()’ gains an ‘except’ argument for controlling the exceptions used by ‘sapply()’.

• Environment variables ‘R_LIBS_USER’ and ‘R_LIBS_SITE’ are both now set to the R system default if unset or empty, and can be set to ‘NULL’ to indicate an empty list of user or site library directories.

• The warning for ‘axis()’(-like) calls in cases of relatively small ranges (typically in log-scale situations) is slightly improved _and_ suppressed from explicit calls to ‘.axisPars()’ as has always been the intention.

• The ‘contrasts’ setter function ‘contrasts<-’ gains an explicit default ‘how.many = NULL’ rather than just using ‘missing(how.many)’.

• ‘grid.pretty()’ gains a new optional argument ‘n = 5’.

• There is a new function ‘.pretty()’ with option ‘bounds’ as a technical-utility version of ‘pretty()’. It and ‘pretty()’ gain a new argument ‘f.min’ with a better than back-compatible default.

• Function ‘grDevices::axisTicks()’ and related functions such as ‘graphics::axis()’ work better, notably for the log scale; partly because of the ‘pretty()’ improvements, but also because care is taken e.g., when ‘ylim’ is finite but ‘diff(ylim)’ is infinite.

• ‘nclass.FD()’ gains a ‘digits’ option.

• The R Mathlib internal C function ‘bd0()’ (called indirectly from a dozen probability density and distribution functions such as ‘dpois()’, ‘dbinom()’, ‘dgamma()’, ‘pgamma()’ _etc_) has been complemented by a more sophisticated and (mostly) more accurate C function ‘ebd0()’, currently called only by internal ‘dpois_raw()’ improving accuracy for R level ‘dpois()’ and potentially others calling it such as ‘dnbinom()’, ‘dgamma()’ or ‘pgamma()’. (Thanks to Morten Welinder's PR#15628.)

• ‘write.ftable()’ gains ‘sep = " "’ argument as suggested by Thomas Soeiro.

• The names of the locale categories supported by R's ‘Sys.getlocale()’ and ‘Sys.setlocale()’ are now provided by variable ‘.LC.categories’ in the ‘base’ namespace.

• The ‘Date’ and ‘POSIXt’ methods for ‘hist()’ and the ‘histogram’ method for ‘plot()’ now also use the new default ‘col = "lightgray"’ in consistency with the corresponding change to ‘hist()’'s default for R 4.0.0.

• ‘hist.default()’ gains new ‘fuzz’ argument, and the histogram ‘plot’ method no longer uses fractional axis ticks when displaying counts (‘"Frequency"’).

• ‘mapply()’ and hence ‘Map()’ now also obey the “max-or-0-if-any” recycling rule, such that, e.g., ‘Map(+, 1:3, 1[0])’ is valid now.

• ‘as.character(<obj>)’ for ‘"hexmode"’ or ‘"octmode"’ objects now fulfils the important basic rule ‘as.character(x)[j] === as.character(x[j])’.

• ‘substr(ch, start,end) <- new’ now e.g., preserves ‘names(ch)’; ditto for ‘substring()’, thanks to a patch from Brodie Gaslam.

• ‘plot(<lm>)’ gains a ‘extend.ylim.f’ argument, in partial response to PR#15285; further PR#17784 is fixed thanks to several contributors and a patch by Elin Waring. The Cook's dist contours get customizable via ‘cook.col’ and ‘cook.lty’ with a different default color and their legend is nicer by default and customizable via ‘cook.legendChanges’.

• Attempting to subset an object that is not subsettable now signals an error of class ‘notSubsettableError’. The non-subsettable object is contained in the ‘object’ field of the error condition.

• Subscript-out-of-bounds errors are now signaled as errors of class ‘subscriptOutOfBoundsError’.

• Stack-overflow errors are now signaled as errors inheriting from class ‘stackOverflowError’. See ‘?stackOverflowError’ for more details.

• New partly experimental ‘Sys.setLanguage()’ utility, solving the main problem of PR#18055.

• ‘gettext()’ and ‘gettextf()’ get a new option ‘trim = TRUE’ which when set to false allows translations for strings such as ‘"Execution halted\n"’ typical for C code.

• An experimental implementation of hash tables is now available. See ‘?hashtab’ for more details.

• ‘identical()’ gains a ‘extptr.as.ref’ argument for requesting that external pointer objects be compared as reference objects.

• ‘reorder()’ gets an argument ‘decreasing’ which it passes to ‘sort()’ for level creation; based on the wish and patch by Thomas Soeiro in PR#18243.

• ‘as.vector()’ gains a ‘data.frame’ method which returns a simple named list, also clearing a long standing ‘FIXME’ to enable ‘as.vector(<data.frame>, mode="list")’. This breaks code relying on ‘as.vector(<data.frame>)’ to return the unchanged data frame.

• ‘legend()’ is now vectorized for arguments ‘cex’, ‘x.intersp’, and ‘text.width’. The latter can now also be specified as a vector (one element for each column of the legend) or as ‘NA’ for computing a proper column wise maximum value of ‘strwidth(legend)’. The argument ‘y.intersp’ can be specified as a vector with one entry for each row of the legend.

‘legend()’ also gains new arguments ‘title.cex’ and ‘title.font’. Thanks to Swetlana Herbrandt.

• Deparsing no longer remaps attribute names ‘dim’, ‘dimnames’, ‘levels’, ‘names’ and ‘tsp’ to historical S-compatible names (which ‘structure()’ maps back).

• ‘sample()’ and ‘sample.int()’ have additional sanity checks on their ‘size’ and ‘n’ arguments.

‘all.equal.numeric()’ gains a sanity check on its ‘tolerance’ argument - calling ‘all.equal(a, b, c)’ for three numeric vectors is a surprisingly common error.

‘mean(na.rm =)’, ‘rank(na.last =)’, ‘barplot(legend.text =)’, ‘boxplot()’, ‘contour(drawlabels =)’, ‘polygon(border =)’ and ‘methods::is(class2 =)’ have more robust sanity checks on their arguments.

‘R CMD Rd2pdf’ (used by ‘R CMD check’) has a more robust sanity check on the format of ‘\alias{}’ commands.

• ‘psigamma(x, deriv)’ for negative ‘x’ now also works for ‘deriv = 4’ and ‘5’; their underlying C level ‘dpsifn()’ is documented in ‘Writing R Extensions’.

• The HTML help system now uses HTML5 (wish of PR#18149).

• ‘ks.test()’ now provides exact p-values also with ties and MC p-values in the two-sample (Smirnov) case. By Torsten Hothorn.

• ‘ks.test()’ gains a formula interface, with ‘y ~ 1’ for the one-sample (Kolmogorov) test and ‘y ~ group’ for the two-sample (Smirnov) test. Contributed by Torsten Hothorn.

• The return value from ‘ks.test()’ now has class ‘c("ks.test", "htest")’ - packages using ‘try()’ need to take care to use ‘inherits()’ and not ‘==’ on the class.

• ‘iconv()’ now allows ‘sub = "c99"’ to use C99-style escapes for UTF-8 inputs which cannot be converted to encoding ‘to’.

• In a forward pipe ‘|>’ expression it is now possible to use a named argument with the placeholder ‘_’ in the ‘rhs’ call to specify where the ‘lhs’ is to be inserted. The placeholder can only appear once on the ‘rhs’.

• The included LAPACK sources have been updated to version 3.10.0, except for the four Fortran 77 routines which 3.10.0 has re-implemented in Fortran 90 (where the older versions have been retained as the R build process does not support Fortran 90).

• ‘path.expand()’ and most other uses of tilde expansion now warn if a path would be too long if expanded. (An exception is ‘file.exists()’, which silently returns false.)

• ‘trunc(<Date>, *)’ now supports ‘units = "months"’ or ‘"years"’ for consistency with the ‘POSIXt’ method, thanks to Dirk Eddelbuettel's proposal in PR#18099.

• The HTML help system has several new features: LaTeX-like math can be typeset using either KaTeX or MathJax, usage and example code is highlighted using Prism, and for dynamic help the output of examples and demos can be shown within the browser if the ‘knitr’ package is installed. These features can be disabled by setting the environment variable ‘_R_HELP_ENABLE_ENHANCED_HTML_’ to a false value.

#### CHANGES IN R 4.2.0 GRAPHICS

• The graphics engine version, ‘R_GE_version’, has been bumped to ‘15’ and so packages that provide graphics devices should be reinstalled.

• The ‘grid’ package now allows the user to specify a “vector” of pattern fills. The ‘fill’ argument to ‘gpar()’ accepts a list of gradients and/or patterns and the functions ‘linearGradient()’, ‘radialGradient()’, and ‘pattern()’ have a new ‘group’ argument.

Points grobs (data symbols) can now also have a pattern fill.

• The ‘grid’ package has new functions for drawing isolated groups: ‘grid.group()’, ‘grid.define()’, and ‘grid.use()’. These functions add compositing operators and affine transformations to R's graphics capabilities.

The ‘grid’ package also has new functions for stroking and filling paths: ‘grid.stroke()’, ‘grid.fill()’, and ‘grid.fillStroke()’.

A new function ‘as.path()’ allows the user to specify the fill rule for a path that is to be used for clipping, stroking, or filling; available options are ‘"winding"’ and ‘"evenodd"’. A new function ‘as.mask()’ allows the user to specify the type of a mask; available options are ‘"alpha"’ and ‘"luminance"’.

These new features are only supported so far (at most) on the Cairo-based graphics devices and on the ‘pdf()’ device.

• ‘dev.capabilities()’ reports on device support for the new features.

• ‘par()’ now warns about unnamed non-character arguments to prevent misuse such as ‘{usr <- par("usr"); par(usr)}’.

#### CHANGES IN R 4.2.0 WINDOWS

• R uses UTF-8 as the native encoding on recent Windows systems (at least Windows 10 version 1903, Windows Server 2022 or Windows Server 1903). As a part of this change, R uses UCRT as the C runtime. UCRT should be installed manually on systems older than Windows 10 or Windows Server 2016 before installing R.

• The default personal library on Windows, folder ‘R\win-library\x.y’ where ‘x.y’ stands for R release ‘x.y.z’, is now a subdirectory of Local Application Data directory (usually a hidden directory ‘C:\Users\username\AppData\Local’). Use ‘shell.exec(.libPaths()[1])’ from R to open the personal library in Explorer when it is first in the list (PR#17842).

• R uses a new 64-bit Tcl/Tk bundle. The previous 32-bit/64-bit bundle had a different layout and can no longer be used.

• Make files and installer scripts for Windows have been tailored to ‘Rtools42’, the newly recommended 64-bit ‘gcc’ 10.3 MinGW-W64 UCRT toolchain.

• ‘Rtools42’ by default uses the Windows security features ASLR and DEP; hence CRAN builds of R and packages also do.

• R now supports files ‘Makevars.ucrt’, ‘Makefile.ucrt’, ‘configure.ucrt’ and ‘cleanup.ucrt’ in packages, which are used in preference to the ‘.win’ variants. This allows keeping the ‘.win’ files around to support older versions of R. This feature will be removed in the future once support for older versions of R would no longer be needed.

• ‘R.version’ gains a new field ‘crt’ (only on Windows) to denote the C runtime. The value is ‘"ucrt"’.

• On Windows, ‘download.file(method = "auto")’ and ‘url(method = "default")’ now follow Unix in using ‘"libcurl"’ for all except ‘file://’ URIs.

• ‘Rtools42’ includes an unpatched Msys2 build of GNU ‘tar’. Paths including drive letters can be made to work by adding ‘--force-local’ to environment variable ‘TAR_OPTIONS’. (‘Rtools40’ and earlier included a patched version which defaulted to this option.)

• Installer builds of R automatically find the ‘Rtools42’ software collection as well as the compiler toolchain. No ‘PATH’ setting is required from the user.

• The default installation directory of R for a user-only installation has been changed to the User Program Files directory (usually a hidden directory ‘C:\Users\username\AppData\Local\Programs’) to follow Windows conventions. Use ‘shell.exec(R.home())’ from R to open the R installation directory in Explorer (PR#17842).

• R now supports installation-time patching of packages. Patches may be installed from a supplied URL or a local directory or disabled. Patches are included into the installed packages for reference. This experimental feature may be removed in the future.

• ‘libcurl’ is now required for building from source.

• The clipboard connection now works also with text in other than the current native encoding (PR#18267, with Hiroaki Yutani). Text is always pasted to the clipboard in UTF16-LE and the ‘encoding’ argument is ignored.

• The internal case-changing functions are now used by default on Windows - this circumvents problems (for example with E acute) of the UCRT Windows' runtime.

• R on Windows now uses the system memory allocator. Doug Lea's allocator was used since R 1.2.0 to mitigate performance limitations seen with system allocators on earlier versions of Windows.

• ‘memory.limit()’ and ‘memory.size()’ are now stubs on Windows (as on Unix-alikes).

• Applications embedding R on Windows can now use additional callbacks, which have so far only been available only on Unix (PR#18286).

#### CHANGES IN R 4.2.0 INSTALLATION

• Facilities for accessing ‘ftp://’ sites are no longer tested (except _pro tem_ for ‘curlGetHeaders()’) as modern browsers have removed support.

• R can now be built with ‘DEFS = -DSTRICT_R_HEADERS’, but not yet some of the recommended packages.

#### CHANGES IN R 4.2.0 PACKAGE INSTALLATION

• ‘R CMD INSTALL’ no longer tangles vignettes. This completes an ‘R CMD build’ change in R 3.0.0 and affects packages built before R 3.0.2. Such packages should be re-made with ‘R CMD build’ to have the tangled R code of vignettes shipped with the tarball.

• ‘USE_FC_LEN_T’ will become the default: this uses the correct prototypes for Fortran BLAS/LAPACK routines called from C/C++, and requires adjustment of most such calls - see ‘Writing R Extensions’.

• Package installation speed for packages installed with ‘keep.source’ has been improved. This resolve the issue reported by Ofek Shilon in PR#18236.

#### CHANGES IN R 4.2.0 UTILITIES

• ‘R CMD check’ can optionally report files/directories left behind in home, ‘/tmp’ (even though ‘TMPDIR’ is set) and other directories. See the “R Internals” manual for details.

• ‘R CMD check’ now reports byte-compilation errors during installation. These are not usually fatal but may result in parts of the package not being byte-compiled.

• ‘_R_CHECK_DEPENDS_ONLY_’ can be applied selectively to examples, tests and/or vignettes in ‘R CMD check’: see the “R Internals” manual.

• ‘_R_CHECK_SRC_MINUS_W_IMPLICIT_’ now defaults to true: recent versions of Apple ‘clang’ on macOS have made implicit function declarations in C into a compilation error.

• ‘R CMD check --as-cran’ makes use of the environment variable ‘AUTORECONF’. See the “R Internals” manual §8 for further details.

• ‘R CMD check --use-valgrind’ also uses ‘valgrind’ when re-building vignettes as some non-Sweave vignettes unhelpfully comment out all their code when ‘R CMD check’ runs vignettes.

• Errors in re-building vignettes (unless there are LaTeX errors) are reported by ‘R CMD check’ as ‘ERROR’ rather than ‘WARNING’ when running vignettes has been skipped (as it frequently is in CRAN checks and by ‘--as-cran’).

• ‘R CMD Rd2pdf’ gains a ‘--quiet’ option that is used by ‘R CMD build’ when building the PDF package manual.

• ‘R CMD Rd2pdf’ now always runs LaTeX in batch mode, consistent with Texinfo >= 6.7. The ‘--batch’ option is ignored.

• ‘R CMD build’ and ‘R CMD check’ now include the Rd file name and line numbers in the error message of an \Sexpr evaluation failure.

#### CHANGES IN R 4.2.0 C-LEVEL FACILITIES

• The non-API header ‘R_ext/R-ftp-http.h’ is no longer provided, as the entry points it covered are now all defunct.

• A number of non-API declarations and macro definitions have been moved from the installed header ‘Rinternals.h’ to the internal header ‘Defn.h’. Packages that only use entry points and definitions documented to be part of the API as specified in ‘Writing R Extensions’ §6 should not be affected.

• The macro ‘USE_RINTERNALS’ no longer has any effect when compiling package code. Packages which also use ‘R_NO_REMAP’ will need to ensure that the remapped names are used for calls to API functions that were formerly also made available as macros.

• The deprecated legacy S-compatibility macros ‘PROBLEM’, ‘MESSAGE’, ‘ERROR’, ‘WARN’, ‘WARNING’, ‘RECOVER’, ... are no longer defined in ‘R_exts/RS.h’ (included by ‘R.h’). Replace these by calls to ‘Rf_error’ and ‘Rf_warning’ (defined in header ‘R_ext/Error.h’ included by ‘R.h’).

Header ‘R_ext/RS.h’ no longer includes ‘R_ext/Error.h’.

• Header ‘R_ext/Constants.h’ (included by ‘R.h’) when included from C++ now includes the C++ header ‘cfloat’ rather than the C header ‘float.h’ (now possible as C++11 is required).

• The legacy S-compatibility macros ‘DOUBLE_*’ in ‘R_ext/Constants.h’ (included by ‘R.h’) are deprecated.

• The deprecated S-compatibility macros ‘SINGLE_*’ in ‘R_ext/Constants.h’ (included by ‘R.h’) have been removed.

• ‘R_Calloc’, ‘R_Free’ and ‘R_Realloc’ are preferred to their unprefixed forms and error messages now use the prefix. These forms were introduced in R 3.4.0 and are available even when ‘STRICT_R_HEADERS’ is defined.

• ‘rmultinom’ has been documented in ‘Writing R Extensions’ §6 so is now part of the R API.

• Similarly, ‘Rtanpi’, called from R level ‘tanpi()’ is now part of the R API.

• The long-deprecated, undocumented and non-API entry point ‘call_R’ is no longer declared in ‘R_ext/RS.h’ (included by ‘R.h’).

• The header ‘S.h’ which has been unsupported since Jan 2016 has been removed. Use ‘R.h’ instead.

#### CHANGES IN R 4.2.0 DEPRECATED AND DEFUNCT

• The (non-default and deprecated) ‘method = "internal"’ for ‘download.file()’ and ‘url()’ no longer supports ‘http://’ nor ‘ftp://’ URIs. (It is used only for ‘file://’ URIs.)

On Windows, ‘download.file(method = "wininet")’ no longer supports ‘ftp://’ URIs. (It is no longer the default method, which is ‘"libcurl"’ and does.)

On Windows, the deprecated ‘method = "wininet"’ now gives a warning for ‘http://’ and ‘https://’ URIs for both ‘download.file()’ and ‘url()’. (It is no longer the default method.)

• On Windows, the command-line option ‘--max-mem-size’ and environment variable ‘R_MAX_MEM_SIZE’ are defunct. The memory allocation limit was important for 32-bit builds, but these are no longer supported.

• ‘default.stringsAsFactors()’ is now formally deprecated, where that was only mentioned on its regular help page, previously. So it now gives a warning if called.

• ‘unix.time()’ is defunct now; it had been deprecated since R 3.4.0.

#### CHANGES IN R 4.2.0 BUG FIXES

• Setting ‘digits = 0’ in ‘format()’, ‘print.default()’ (and hence typically ‘print()’) or ‘options()’ is again invalid. Its behaviour was platform-dependent, and it is unclear what “zero significant digits” should mean (PR#18098).

• Messages from C code in the ‘cairo’ section of package ‘grDevices’ are now also offered for translation, thanks to Michael Chirico's PR#18123.

• ‘mean(x)’ with finite ‘x’ now is finite also without "long.double" capability.

• ‘R CMD Rd2pdf’ no longer leaves an empty build directory behind when it aborts due to an already existing output file. (Thanks to Sebastian Meyer's PR#18141.)

• ‘density(x, weights = w, na.rm = TRUE)’ when ‘anyNA(x)’ is true, now removes weights “in parallel” to ‘x’, fixing PR#18151, reported by Matthias Gondan. Additionally, it gets a ‘subdensity’ option.

• Conversion of \Sexpr[]{<expR>} to LaTeX or HTML no longer produces long blocks of empty lines when ‘<expR>’ itself contains several lines all producing empty output. Thanks to a report and patch by Ivan Krylov posted to R-devel.

• ‘R CMD build’ no longer fails if a package vignette uses child documents and ‘inst/doc’ exists. (Thanks to Sebastian Meyer's PR#18156.)

• When an R documentation (‘help’ source) file ‘man/foo.Rd’ in a package has \donttest{..} examples with a syntax error, it is now signalled as ERROR and with correct line numbers relating to the ‘*-Ex.R’ file, thanks to Duncan Murdoch and Sebastian Meyer's reports and patch proposals in PR#17501.

• Improved determination the correct translation domain in non-base packages, addressing the combination of PR#18092 and PR#17998 (‘#c6’) with reports and _augmented_ patch #2904 by Suharto Anggono.

Note that ‘"R-base"’ is no longer the default domain e.g., for top-level calls to ‘gettext()’; rather translation needs explicit ‘domain = *’ specification in such cases.

• ‘identical(attrib.as.set=FALSE)’ now works correctly with data frames with default row names (Thanks to Charlie Gao's PR#18179).

• ‘txtProgressBar()’ now enforces a non-zero width for argument ‘char’, without which no progress can be visible.

• ‘dimnames(table(d))’ is more consistent in the case where ‘d’ is a list with a single component, thanks to Thomas Soeiro's report to R-devel.

Further, ‘table(d1, d2)’ now gives an error when ‘d1’ and ‘d2’ are data frames as suggested by Thomas in PR#18224.

• Fix for drawing semi-transparent lines and fills on the native Windows graphics device (PR#18219 and PR#16694). Thanks to Nick Ray for helpful diagnosis on Bugzilla.

• The deparser now wraps sub-expressions such as ‘if(A) .. ’ with parentheses when needed; thanks to Duncan Murdoch's PR#18232 and Lionel Henry's patches there.

• ‘remove.packages()’ no longer tries to uninstall ‘Priority: base’ packages, thanks to a report and suggestions by Colin Fay in PR#18227.

• ‘win.metafile()’ now has ‘xpinch’ and ‘ypinch’ arguments so that the user can override Windows' (potentially wrong) guess at device dimensions.

• ‘x[i]’ and ‘x[[i]]’ for non-integer ‘i’ should now behave in all cases as always documented: the index used is equivalent to ‘as.integer(i)’ unless that would overflow where ‘trunc(i)’ is used instead; thanks to Suharto Anggono's report and patch proposals in PR#17977.

• ‘asOneSidedFormula()’ now associates the resulting formula with the global environment rather than the evaluation environment created for the call.

• ‘<bibentry>\$name’ now matches the field name case-insensitively, consistent with ‘bibentry()’ creation and the replacement method.

• ‘cbind()’ failed to detect some length mismatches with a mixture of time-series and non-time-series inputs.

• The default LaTeX style file ‘Sweave.sty’ used by the ‘RweaveLatex’ driver no longer loads the obsolete ‘ae’ package; thanks to a report by Thomas Soeiro in PR#18271. Furthermore, it now skips ‘\usepackage[T1]{fontenc}’ for engines other than pdfTeX (if detected) or if the new ‘[nofontenc]’ option is used.

• ‘smooth.spline()’ now stores its logical ‘cv’ argument more safely, fixing a rare bug when printing, and also stores ‘n’.

• ‘smooth.spline(x,y,*)’ now computes the ‘cv.crit’ statistic correctly, also when ‘is.unsorted(x)’, fixing PR#18294.

• The ‘data.frame’ method of ‘rbind()’ now warns when binding not-wholly-recycling vectors, by analogy to the default method (for matrices).

• ‘setAs()’ finds the correct class for name ‘to’ when multiple packages define a class with that name. Thanks to Gabor Csardi for the report.

• Fix for detaching a package when two classes of the same name are present in method signatures for the same generic. Thanks to Gabor Csardi for the report.

• ‘match.arg("", c("", "a", "B"))’ gives a better error message, in part from PR#17959, thanks to Elin Waring.

• ‘R CMD Sweave --clean’ no longer removes pre-existing files or subdirectories (PR#18242).

• The ‘quartz()’ device no longer splits polylines into subpaths. That has caused narrowly-spaced lines with many points to always look solid even when dashed line type was used due to dash phase restarts.

• Deparsing constructs such as ‘quote(1 + !(2) + 3)’ works again as before R 3.5.0, thanks to the report and patch in PR#18284 by Suharto Anggono.

• ‘as.list(f)’ for a ‘factor’ ‘f’ now keeps ‘names(f)’, fixing PR#18309.

• ‘qbeta(.001, .9, .009)’ and analogous ‘qf()’ calls now return a correct value instead of ‘NaN’ or wrongly ‘1’, all with a warning; thanks to the report by Ludger Goeminne in PR#18302.

• ‘plot.lm()’ failed to produce the plot of residuals vs. factor levels (i.e., ‘which=5’ when leverages are constant) for models with character predictors (PR#17840).

• ‘interaction.plot(..., xtick = TRUE)’ misplaced the x-axis line (PR#18305).

• Not strictly fixing a bug, ‘format()’ing and ‘print()’ing of non-finite ‘Date’ and ‘POSIXt’ values ‘NaN’ and +/-‘Inf’ no longer show as ‘NA’ but the respective string, e.g., ‘Inf’, for consistency with numeric vector's behaviour, fulfilling the wish of PR#18308.

• ‘R CMD check’ no longer runs test scripts generated from corresponding ‘.Rin’ files twice and now signals an ERROR if processing an ‘.Rin’ script fails.