R for Mac Changelog

What's new in R for Mac 4.3.3

Mar 5, 2024
  • NEW FEATURES:
  • iconv() now fixes up variant encoding names such as "utf8" case-insensitively.
  • DEPRECATED AND DEFUNCT:
  • The legacy encoding = "MacRoman" is deprecated in pdf() and postscript(): support was incomplete in earlier versions of R.
  • BUG FIXES:
  • Arguments are now properly forwarded to methods on S4 generics with ... in the middle of their formal arguments. This was broken for the case when a method introduced an argument but did not include ... in its own formals. Thanks to Herv'e Pag`es for the report PR#18538.
  • Some invalid file arguments to pictex(), postscript() and xfig() opened a file called NA rather than throw an error. These included postscript(NULL) (which some people expected to work like pdf(NULL)).
  • Passing filename = NA to svg(), cairo_pdf(), cairo_ps() or the Cairo-based bitmap devices opened a file called NA: it now throws an error.
  • quartz(file = NA) opened a file called NA, including when used as a Quartz-based bitmap device. It now gives an error.
  • rank() now works, fixing PR#18617, thanks to Ilia Kats.
  • seq.int() did not adequately check its length.out argument.
  • match(, .) is correct again for differing time zones, ditto for "POSIXlt", fixing PR#18618 reported by Bastian Klein.
  • drop.terms(*, dropx = ) now works, fixing PR#18563 as proposed by Mikael Jagan.
  • drop.terms(*) keeps + offset(.) terms when it should, PR#18565, and drop.terms() no longer makes up a response, PR#18566, fixing both bugs thanks to Mikael Jagan.
  • getS3method("t", "test") no longer finds the t.test() function, fixing PR#18627.
  • pdf() and postscript() support for the documented Adobe encodings "Greek" and "Cyrilllic" was missing (although the corresponding Windows' codepages could be used).
  • Computations of glyph metric information for pdf() and postscript() did not take into account that transliteration could replace one character by two or more (only seen on macOS 14) and typically warned that the information was not known.
  • rank(x) no longer overflows during integer addition, when computing rank average for largish but not-yet long vector x, fixing PR#18630, thanks to Ilia Kats.
  • list.files() on Windows now returns also files with names longer that 260 bytes (the Windows limit is 260 characters). Previously, some file names particularly with 'East Asian' characters were omitted.
  • cov2cor() now works, fixing PR#18423 thanks to Mikael Jagan and Elin Waring.
  • cov2cor() and similar now give one warning instead of two, with better wording, fixing PR#18424 thanks to Mikael Jagan.
  • tools:: startDynamicHelp() now ensures port is in proper range, fixing PR#18645.
  • pbeta(x, a,b) is correct now for x=0 or 1 in the boundary cases where a or b or both are 0, fixing PR#18672 thanks to Michael Fay.
  • pmatch(x, table) for large table, also called for data frame row selection, dfrm[nm, ], is now interruptible, fixing PR#18656.
  • predict(, newdata=*) fix computing of nbasis, see Russ Lenth's comment 29 in PR#16158.
  • Added a work-around for a bug in macOS 14.3.1 and higher which prevents R plots in the Quartz Cocoa device from updating on screen.

New in R for Mac 4.3.2 (Nov 2, 2023)

  • NEW FEATURES:
  • The default initialization of the "repos" option from the repositories file at startup can be skipped by settingenvironment variable R_REPOSITORIES to NULL such that getOption("repos") is empty if not set elsewhere.
  • qr.X() is now an implicit S4 generic in methods.
  • iconv(to = "ASCII//TRANSLIT") is emulated using substitution on platforms which do not support it (notably Alpine Linux). This should give a human-readable conversion in ASCII on all platforms (rather than NA_character_).
  • trans3d() gains options continuous and verbose addressing the problem of possible "wrap around" when projecting too long curves, as reported by Achim Zeileis in PR#18537.
  • tools::showNonASCII() has been rewritten to work better on macOS 14 (which has a changed implementation of iconv()).
  • tiff(type = "quartz") (the default on macOS) now warns if compression is specified: it continues to be ignored.
  • INSTALLATION on a UNIX-ALIKE:
  • There is some support for building with Intel's LLVM-based compilers on x86_64 Linux, such as (C) icx, (C++) ipcx and (Fortran) ifx from oneAPI 2023.x.y.
  • There is support for using LLVM's flang-new as the Fortran compiler from LLVM 16.0.x (preferably 17.0.0 or later).
  • UTILITIES:
  • R CMD check reports the use of the Fortran 90 random number generator RANDOM_NUMBER() and the subroutines to initialize it.
  • 'Writing R Extensions' has example code to use R's RNGs from Fortran.
  • BUG FIXES:
  • substr(x, n, L) nchar(x), thanks to a report and patch by 'Architect 95'.
  • contrib.url(character()) now returns 0-length character() as documented, which also avoids spurious warnings from available.packages() et al. in the edge case of an empty vector of repository URLs.
  • readChar(., 4e8) no longer fails, thanks to Kodi Arfer's report (PR#18557).
  • lapply(, as.data.frame) no longer warns falsely for some base vector components.
  • Communication between parent and child processes in the multicore part of parallel could fail on platforms that do not support an arbitrarily large payload in system functions read()/write() on pipes (seen on macOS where a restriction to INT_MAX bytes is documented, without doing a partial read unlike Linux). The payload is now split into 1Gb chunks to avoid that problem. (PR#18571)
  • qqplot(x,y, conf.level=.) gives better confidence bounds when length(x) != length(y), thanks to Alexander Ploner's report and patch proposal (PR#18557).
  • norm(, "2") now gives zero instead of an error, as all the other norm types, thanks to Mikael Jagan's PR#18542.
  • Build-stage Rd macros packageAuthor and packageMaintainer now process Authors@R, fixing NA results when the package DESCRIPTION omits Author and Maintainer fields.
  • Formatting and printing complex numbers could give things like 0.1683-0i because of rounding error: -0i is now replaced by +0i.
  • postscript() refused to accept a title comment containing the letter "W" (PR#18599).
  • isoreg(c(1,Inf)) signals an error instead of segfaulting, fixing PR#18603.
  • tiff(type = "Xlib") was only outputting the last page of multi-page plots.
  • tools::latexToUtf8() again knows about ~{n} and other letters with tilde, fixing a regression in R 4.3.0, and about ^{i} as an alternative to ^{i} (similarly with other accents). Furthermore, LaTeX codes for accented I letters are now correctly converted, also fixing related mistakes in tools::encoded_text_to_latex().
  • tar(*, tar = "internal") no longer creates out-of-spec tar files in the very rare case of user or group names longer than 32 bytes, fixing PR#17871 with thanks to Ivan Krylov.
  • When using the "internal" timezone datetime code, adding a fraction of a second no longer adds one second, fixing PR#16856 from a patch by Ivan Krylov.
  • tools::checkRd() no longer produces spurious notes about "unnecessary braces" from multi-line Rd results of Sexpr macros.

New in R for Mac 4.3.1 (Jun 20, 2023)

  • C-LEVEL FACILITIES:
  • The C-level API version of R's integrate(), Rdqags() in Applic.h, now returns the correct number of integrand evaluations neval, fixing PR#18515 reported and diagnosed by Stephen Wade.
  • The C prototypes for LAPACK calls dspgv and dtptrs in R_exts/Lapack.h had one too many and one too few character length arguments - but this has not caused any known issues. To get the corrected prototypes, include
  • #include // for PR18534fixed
  • #ifdef PR18534fixed
  • # define usePR18534fix 1
  • #endif
  • #include
  • in your C/C++ code.
  • INSTALLATION:
  • Many of the checks of esoteric Internet operations and those using unreliable external sites have been moved to a new target that is not run by default and primarily intended for the core developers. To run them use cd tests; make test-Internet-dev
  • BUG FIXES:
  • .S3methods(), typically called from methods(), again marks methods from package base as visible. Also, the visibility of non-base methods is again determined by the method's presence in search().
  • Tools::Rdiff() is now more robust against invalid strings, fixing installation tests on Windows without Rtools installed.
  • Fix (new) bug in hcl.colors(2, *), by Achim Zeileis.
  • Head(., ) and tail(..) now produce more useful "Error in...." error messages, fixing.
  • Package code syntax on Windows is checked in UTF-8 when UTF-8 is the native encoding.
  • Na.contiguous(x) now also returns the first run, when it is at the beginning and there is a later one of the same length; reported to R-devel, including a fix, by Georgi Boshnakov. Further, by default, it modifies only an existing attr(*,"tsp") but otherwise no longer sets one.
  • Chol(, pivot = ) now gives a correct error or warning message (depending on pivot), thanks to Mikael Jagan's.

New in R for Mac 4.3.0 (Jun 20, 2023)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • Calling && or || with LHS or (if evaluated) RHS of length greater than one is now always an error, with a report of the form
  • 'length = 4' in coercion to 'logical(1)'
  • Environment variable _R_CHECK_LENGTH_1_LOGIC2_ no longer has any effect.
  • NEW FEATURES:
  • The included BLAS sources have been updated to those shipped with LAPACK version 3.10.1. (This caused some platform-dependent changes to package check output.) And then to the sources from LAPACK version 3.11.0 (with changes only to double complex subroutines).
  • The included LAPACK sources have been updated to include the four Fortran 90 routines rather than their Fortran 77 predecessors. This may give some different signs in SVDs or eigendecompositions.. (This completes the transition to LAPACK 3.10.x begun in R 4.2.0.)
  • The LAPACK sources have been updated to version 3.11.0. (No new subroutines have been added, so this almost entirely bug fixes: Those fixes do affect some computations with NaNs, including R's NA.)
  • The parser now signals _classed_ errors, notably in case of the pipe operator |>. The error object and message now give line and column numbers, mostly as proposed and provided by Duncan Murdoch in PR#18328.
  • toeplitz() is now generalized for asymmetric cases, with a toeplitz2() variant.
  • xy.coords() and xyz.coords() and consequently, e.g., plot(x,y, log = "y") now signal a _classed_ warning about negative values of y (where log(.) is NA). Such a warning can be specificallysuppressed or caught otherwise.
  • Regular expression functions now check more thoroughly whether their inputs are valid strings (in their encoding, e.g. in UTF-8).
  • The performance of grep(), sub(), gsub() and strsplit() has been improved, particularly with perl = TRUE and fixed = TRUE. Use of useBytes = TRUE for performance reasons should no longer be needed and is discouraged: it may lead to incorrect results.
  • apropos() gains an argument dot_internals which is used by the completion (help(rcompgen)) engine to also see base internals such as .POSIXct().
  • Support in tools::Rdiff() for comparing uncompressed PDF files is further reduced - see its help page.
  • qqplot(x, y, ...) gains conf.level and conf.args arguments for computing and plotting a confidence band for the treatment function transforming the distribution of x into the distribution of y (Switzer, 1976, _Biometrika_). Contributed by Torsten Hothorn.
  • Performance of package_dependencies() has been improved for cases when the number of dependencies is large.
  • Strings newly created by gsub(), sub() and strsplit(), when any of the inputs is marked as "bytes", are also marked as "bytes". This reduces the risk of creating invalid strings and accidental substitution of bytes deemed invalid.
  • Support for readLines(encoding = "bytes") has been added to allow processing special text files byte-by-byte, without creating invalid strings.
  • iconv(from = "") now takes into account any declared encoding of the input elements and uses it in preference to the native encoding. This reduces the risk of accidental creation of invalid strings, particularly when different elements of the input have different encoding (including "bytes").
  • Package repositories in getOption("repos") are now initialized from the repositories file when utils is loaded (if not already set, e.g., in .Rprofile). (From a report and patch proposal by Gabriel Becker in PR#18405.)
  • compactPDF() gets a verbose option.
  • type.convert() and hence read.table() get new option tryLogical = TRUE with back compatible default. When set to false, converts "F" or "T" columns to character.
  • Added new unit prefixes "R" and "Q" for abbreviating (unrealistically large) sizes beyond 10^{27} in standard = "SI", thanks to Henrik Bengtsson's PR#18435.
  • as.data.frame()'s default method now also works fine with atomic objects inheriting from classes such as "roman", "octmode" and "hexmode", such fulfilling the wish of PR#18421, by Benjamin Feakins.
  • The as.data.frame.vector() utility now errors for wrong-length row.names. It warned for almost six years, with "Will be an error!".
  • sessionInfo() now also contains La_version() and reports codepage and timezone when relevant, in both print() and toLatex() methods which also get new option tzone for displaying timezone information when locale = FALSE.
  • New function R_compiled_by() reports the C and Fortran compilers used to build R, if known.
  • predict(, newdata = *) no longer unnecessarily creates an offset of all 0s.
  • solve() for complex inputs now uses argument tol and by default checks for 'computational singularity' (as it long has done for numeric inputs).
  • predict(, newdata=*) now obeys a new argument rankdeficient, with new default "warnif", warning only if there are non-estimable cases in newdata. Other options include rankdeficient = "NA", predicting NA for non-estimable newdata cases. This addresses PR#15072 by Russ Lenth and is based on his original proposal and discussions in PR#16158 also by David Firth and Elin Waring. Still somewhat experimental.
  • Rgui console implementation now works better with the NVDA screen reader when the full blinking cursor is selected. The underlying improvements in cursor handling may help also other screenreaders on Windows.
  • The drop-field control in GraphApp can now be left with the TAB key and all controls can be navigated in the reverse order using the Shift+TAB key, improving accessibility of the Rgui configuration editor.
  • qnorm(, log.p=TRUE) is now fully accurate (instead of to "only" minimally five digits).
  • demo(error.catching) now also shows off withWarnings() and tryCatchWEMs().
  • As an experimental feature the placeholder _ can now also be used in the rhs of a forward pipe |> expression as the first argument in an extraction call, such as _$coef. More generally, it can be used as the head of a chain of extractions, such as _$coef[[2]].
  • Spaces in the environment variable used to choose the R session's temporary directory (TMPDIR, TMP and TEMP are tried in turn) are now fatal. (On Windows the 'short path' version of the path is tried and used if that does not contain a space.)
  • all.equal.numeric() gets a new optional switch giveErr to return the numeric error as attribute. Relatedly, stopifnot(all.equal(a, b, ..)) is as "smart" now, as stopifnot(all.equal(....)) has been already, thus allowing
  • customized all.equal() wrappers.
  • R on Windows is now able to work with path names longer than 260 characters when these are enabled in the system (requires at least Windows 10 version 1607). Packages should be updated to work with long paths as well, instead of assuming PATH_MAX to be the maximum length. Custom front-ends and applications embedding
  • R need to update their manifests if they wish to allow thisfeature. See for more information.
  • 'Object not found' and 'Missing argument' errors now give a more accurate error context. Patch provided by Lionel Henry in PR#18241.
  • The @ operator is now an S3 generic. Based on contributions by Tomasz Kalinowski in PR#18482.
  • New generic chooseOpsMethod() provides a mechanism for objects to resolve cases where two suitable methods are found for an Ops Group Generic. This supports experimenting with alternative object systems. Based on contributions by Tomasz Kalinowski in PR#18484.
  • inherits(x, what) now accepts values other than a simple character vector for argument what. A new generic, nameOfClass(), is called to resolve the class name from what. This supports experimenting with alternative object systems. Based on contributions by Tomasz Kalinowski in PR#18485.
  • Detection of BLAS/LAPACK in use (sessionInfo()) with FlexiBLAS now reports the current backend.
  • The "data.frame" method for subset() now warns about extraneous arguments, typically catching the use of = instead of == in the subset expression.
  • Calling a:b when numeric a or b is longer than one may now be made into an error by setting environment variable _R_CHECK_LENGTH_COLON_ to a true value, along the proposal in PR#18419 by Henrik Bengtsson.
  • density(x, weights = *) now warns if automatic bandwidth selection happens without using weights; new optional warnWbw may suppress the warning. Prompted by Christoph Dalitz' PR#18490 and its discussants.
  • rm(list = *) is faster and more readable thanks to Kevin Ushey's PR#18492.
  • The plot.lm() function no longer produces a normal Q-Q plot for GLMs. Instead it plots a half-normal Q-Q plot of the absolute value of the standardized deviance residuals.
  • The print() method for class "summary.glm" no longer shows summary statistics for the deviance residuals by default. Its optional argument show.residuals can be used to show them if required.
  • The tapply() function now accepts a data frame as its X argument, and allows INDEX to be a formula in that case. by.data.frame() similarly allows INDICES to be a formula.
  • The performance of df[j]

New in R for Mac 4.2.3 (Mar 19, 2023)

  • C-LEVEL FACILITIES:
  • The definition of DL_FUNC in R_ext/Rdynload.h has been changed to be fully C-compliant. This means that functions loaded _via_ for example R_GetCCallable need to be cast to an appropriate type if they have any arguments.
  • .Machine has a new element sizeof.time_t to identify old systems with a 32-bit type and hence a limited range of date-times (and limited support for dates millions of years from present).
  • PACKAGE INSTALLATION:
  • (Windows) The default C++ standard had accidentally been left at C++11 when it was changed to C++14 on Unix.
  • BUG FIXES:
  • As "POSIXlt" objects may be "partially filled" and their list components meant to be recycled, length() now is the length of the longest component.
  • as.POSIXlt.Date() could underflow for dates in the far past (more than half a million years BCE).
  • as.Date.POSIXlt(x) would return "1970-01-01" instead of NA in R 4.2.2,
  • R CMD check failed to apply enabled _R_CHECK_SUGGESTS_ONLY_ to examples and vignettes (regression in R 4.2.0).
  • R CMD check did not re-build vignettes in separate processes by default (regression in R 4.2.0).
  • Running examples from HTML documentation now restores previous knitr settings and options (PR#18420).
  • Quartz: fonts are now located using Core Graphics API instead of deprecated ATS which is no longer supported in the macOS 13 SDK (PR#18426). This also addresses an issue where the currently used font in the Quartz device context was not correctly retained.
  • (Windows) Math symbols in text drawing functions are again rendered correctly (PR#18440). This fixes a regression in R 4.2.1 caused by a fix in PR#18382 which uncovered an issue in GraphApp due to which the symbol charset was not used with TT Symbol font face.
  • (Windows) Installing a package with a src/Makefile.{win,ucrt} file includes ~/.R/Makevars.win64 in the search for user makevars, as documented in "R Installation and Administration" and done for packages with a src/Makevars.{win,ucrt} file.
  • format(, "....%OS") with n > 0 no longer accidentally uses the unbalanced seconds, thanks to Suharto Anggono's report (including patch) in PR#18448.
  • solve.default(a, b) works around issues with some versions of LAPACK when a contains NA or NaN values.
  • When UseMethod() cannot dispatch, it no longer segfaults producing the error message in case of a long class(), thanks to Joris Vankerschaver's report (including patch) in PR#18447.
  • When example(foo, ..) produces graphics on an interactive device it needs to open itself, it now leaves devAskNewPage() unchanged even when it was FALSE, thus fixing a 14 years old ''.
  • packageDescription() again catches errors from encoding conversions. This also fixes broken packageVersion() in C locale on systems where iconv does not support transliteration.

New in R for Mac 4.2.2 (Nov 1, 2022)

  • NEW FEATURES:
  • tools::Rdiff(useDiff = TRUE) checks for the presence of an external diff command and switches to useDiff = FALSE if none is found. This allows R CMD Rdiff to always work.
  • On Windows, environment variable R_LIBCURL_SSL_REVOKE_BEST_EFFORT can be used to switch to only 'best-effort' SSL certificate revocation checks with the default "libcurl" download method. This reduces security, but may be needed for downloads to work with MITM proxies (PR#18379).
  • (macOS) The run-time check for libraries from XQuartz for X11 and Tcl/Tk no longer uses otool from the Apple Developer Tools (PR#18400).
  • The LaTeX style for producing the PDF manuals, Rd.sty, now loads the standard amsmath, amsfonts and amssymb packages for greater coverage of math commands in the Rd eqn and deqn macros. The mathscr LaTeX command is also provided (via the mathrsfs package, if available, or the amsfonts bundle otherwise), fulfilling the wish of PR#18398.
  • (Windows) The default format of readClipboard() and writeClipboard() has been changed to 13 (CF_UNICODETEXT).
  • INSTALLATION on a UNIX-ALIKE:
  • The PDF manuals (if built) can be compacted by the new target make compact-pdf (at the top level or in directory doc/manual).
  • There is now configure support for LLVM clang 15 on Linux, which defaults to position-independent (PIE) executables whereas gfortran does not.
  • Many small changes to ease compilation (and suppress warnings) with LLVM clang 15.
  • BUG FIXES:
  • Rscript -e would fail if stdin were closed (Reported by Henrik Bengtsson.)
  • qt(*, log.p=TRUE) in outer tails no longer produces NaN in its final steps, thus fixing PR#18360.
  • tools::Rd2latex() now escapes hashes and ampersands when writing URLs, fixing LaTeX errors with such URLs in tabular.
  • When isGeneric(f, fdef=*) is used with mismatching names, the warning is better understandable; reported (with fix) in PR#18370 by Gabe Becker.
  • poly(x, n) now works again (and is now documented) when x is a "Date" or "POSIXct" object, or of another class while fulfilling mode(x) == "numeric". This also enables poly(x, *, raw=TRUE) for such variables. Reported by Michael Chirico to R-devel.
  • write.table(), write.csv() and write.csv2() restore their numerical precision (internal equivalent of digits = 15) after an interrupt (PR#18384).
  • One can now read also byte FF from a clipboard connection (PR#18385).
  • source("") and source(character()) now give more helpful error messages.
  • R CMD check --as-cran set _R_CHECK_TIMINGS_ too late to have the intended effect.
  • as.POSIXlt(x) now also works with very large dates x, fixing PR#18401 reported by Hannes M"uhleisen.
  • Files can now be extracted even from very large zip archives (PR#18390, thanks to Martin Jakt).
  • Non-finite objects of class "POSIXlt" are now correctly coerced to classes "Date" and "POSIXct"; following up on the extension to format() them correctly.
  • Added methods for is.finite(), is.infinite() and is.nan() for "POSIXlt" date-time objects.

New in R for Mac 4.2.1 (Jun 26, 2022)

  • NEW FEATURES:
  • New function utils::findCRANmirror() to find out if a CRAN mirror has been selected, otherwise fallback to the main site. This mbehaves 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.
  • 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.
  • 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.
  • C-LEVEL FACILITIES:
  • The undocumented legacy declarations of Sint, Sfloat, SINT_MAX and SINT_MIN in header R.h are deprecated.
  • 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.

New in R for Mac 4.2.0 (Apr 23, 2022)

  • 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.
  • 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 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(, *) now supports units = "months" or "years" for consistency with the POSIXt method, thanks to Dirk Eddelbuettel's proposal in PR#18099.
  • list2DF() now checks that its arguments are of the same length, rather than use recycling.
  • 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.
  • 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 grobCoords() function now returns a more informative and complex result.
  • 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

New in R for Mac 4.1.3 (Mar 14, 2022)

  • NEW FEATURES:
  • The default version of Bioconductor has been changed to 3.14. (This is used by setRepositories and the menus in GUIs.)
  • UTILITIES:
  • R CMD check --as-cran has a workaround for a bug in versions of file up to at least 5.41 which mis-identify DBF files last changed in 2022 as executables.
  • C-LEVEL FACILITIES:
  • The legacy S-compatibility macros SINGLE_* in R_ext/Constants.h (included by R.h) are deprecated and will be removed in R 4.2.0.
  • BUG FIXES:
  • Initialization of self-starting nls() models with initialization functions following the pre-R-4.1.0 API (without the ... argument) works again for now, with a deprecation warning.
  • Fixed quoting of ~autodetect~ in Java setting defaults to avoid inadvertent user lookup due to leading ~, reported in PR#18231 by Harold Gutch.
  • substr(., start, stop) 1, partly thanks to Michael Chirico's PR#18272.
  • print(x) for long vectors x now also works for named atomic vectors or lists and prints the correct number when reaching the getOption("max.print") limit; partly thanks to a report and proposal by Hugh Parsonage to the R-devel list.
  • all.equal(, *) no longer signals a deprecation warning.
  • reformulate(*, response=r) gives a helpful error message now when length(r) > 1, thanks to Bill Dunlap's PR#18281.
  • Modifying globalCallingHandlers inside withCallingHandlers() now works or fails correctly, thanks to Henrik Bengtsson's PR#18257.
  • hist(, breaks = "days") and hist(, breaks = "secs") no longer fail for inputs of length 1.
  • qbeta(.001, .9, .009) and similar cases now converge correctly thanks to Ben Bolker's report in PR#17746.
  • window(x, start, end) no longer wrongly signals "'start' cannot be after 'end'", fixing PR#17527 and PR#18291.
  • data() now checks that its (rarely used) list argument is a character vector - a couple of packages passed other types and gave incorrect results.
  • which() now checks its arr.ind argument is TRUE rather coercing to logical and taking the first element - which gave incorrect results in package code.
  • model.weights() and model.offset() more carefully extract their model components, thanks to Ben Bolker and Tim Taylor's R-devel post.
  • list.files(recursive = TRUE) now shows all broken symlinks (previously, some of them may have been omitted, PR#18296).

New in R for Mac 4.1.2 (Nov 2, 2021)

  • C-LEVEL FACILITIES:
  • The workaround in headers R.h and Rmath.h (using namespace std;) for the Oracle Developer Studio compiler is no longer needed now C++11 is required so has been removed. A couple more usages of log() (which should have been std::log()) with an int argument are reported on Solaris.
  • The undocumented limit of 4095 bytes on messages from the S-compatibility macros PROBLEM and MESSAGE is now documented and longer messages will be silently truncated rather than potentially causing segfaults.
  • If the R_NO_SEGV_HANDLER environment variable is non-empty, the signal handler for SEGV/ILL/BUS signals (which offers recovery user interface) is not set. This allows more reliable debugging of crashes that involve the console.
  • DEPRECATED AND DEFUNCT:
  • The legacy S-compatibility macros PROBLEM, MESSAGE, ERROR, WARN, WARNING, RECOVER, ... are deprecated and will be hidden in R 4.2.0. R's native interface of Rf_error and Rf_warning has long been preferred.
  • BUG FIXES:
  • .mapply(F, dots, .) no longer segfaults when dots is not a list and uses match.fun(F) as always documented; reported by Andrew Simmons in PR#18164.
  • hist(, ...) and hist(, ...) no longer pass arguments for rect() (such as col and density) to axis(). (Thanks to Sebastian Meyer's PR#18171.)
  • Sexpr{ch} now preserves Encoding(ch). (Thanks to report and patch by Jeroen Ooms in PR#18152.)
  • Setting the RNG to "Marsaglia-Multicarry" e.g., by RNGkind(), now warns in more places, thanks to Andr'e Gillibert's report and patch in PR#18168.
  • gray(numeric(), alpha=1/2) no longer segfaults, fixing PR#18183, reported by Till Krenz.
  • Fixed dnbinom(x, size=, .., log=TRUE) regression, reported by Martin Morgan.
  • as.Date.POSIXlt(x) now keeps names(x), thanks to Davis Vaughan's report and patch in PR#18188.
  • model.response() now strips an "AsIs" class typically, thanks to Duncan Murdoch's report and other discussants in PR#18190.
  • try() is considerably faster in case of an error and long call, as e.g., from some do.call(). Thanks to Alexander Kaever's suggestion posted to R-devel.
  • qqline(y = ) such as y=I(.), now works, see also PR#18190.
  • Non-integer mgp par() settings are now handled correctly in axis() and mtext(), thanks to Mikael Jagan and Duncan Murdoch's report and suggestion in PR#18194.
  • formatC(x) returns length zero character() now, rather than "" when x is of length zero, as documented, thanks to Davis Vaughan's post to R-devel.
  • removeSource(fn) now retains (other) attributes(fn).

New in R for Mac 4.1.1 (Aug 12, 2021)

  • NEW FEATURES:
  • require(pkg, quietly = TRUE) is quieter and in particular does not warn if the package is not found.
  • DEPRECATED AND DEFUNCT:
  • Use of ftp:// URIs should be regarded as deprecated, with on-going support confined to method = "libcurl" and not routinely tested. (Nowadays no major browser supports them.)
  • The non-default method = "internal" is deprecated for http:// and ftp:// URIs for both download.file and url.
  • On Windows, method = "wininet" is deprecated for http://, https:// and ftp:// URIs for both download.file and url. (A warning is only given for ftp://.)
  • For ftp:// URIs the default method is now "libcurl" if available (which it is on CRAN builds).
  • method = "wininet" remains the default for http:// and https:// URIs but if libcurl is available, using method = "libcurl" is preferred.
  • INSTALLATION:
  • make check now works also without a LaTeX installation. (Thanks to Sebastian Meyer's PR#18103.)
  • BUG FIXES:
  • make check-devel works again in an R build configured with --without-recommended-packages.
  • qnbinom(p, size, mu) for large size/mu is correct now in a range of cases (PR#18095); similarly for the (size, prob) parametrization of the negative binomial. Also qpois() and qbinom() are better and or faster for extreme cases. The underlying C code has been modularized and is common to all four cases of discrete distributions.
  • gap.axis is now part of the axis() arguments which are passed from bxp(), and hence boxplot(). (Thanks to Martin Smith's report and suggestions in PR#18109.)
  • .First and .Last can again be set from the site profile.
  • seq.int(from, to, *) and seq.default(..) now work better in large range cases where from-to is infinite where the two boundaries are finite.
  • all.equal(x,y) now returns TRUE correctly also when several entries of abs(x) and abs(y) are close to .Machine$double.xmax, the largest finite numeric.
  • model.frame() now clears the object bit when removing the class attribute of a value via na.action (PR#18100).
  • charClass() now works with multi-character strings on Windows (PR#18104, fixed by Bill Dunlap).
  • encodeString() on Solaris now works again in Latin-1 encoding on characters represented differently in UTF-8. Support for surrogate pairs on Solaris has been improved.
  • file.show() on Windows now works with non-ASCII path names representable in the current native encoding (PR#18132).
  • Embedded R on Windows can now find R home directory via the registry even when installed only for the current user (PR#18135).
  • pretty(x) with finite x now returns finite values also in the case where the extreme x values are close in size to the maximal representable number .Machine$double.xmax.
  • Also, it's been tweaked for very small ranges and when a boundary is close (or equal) to zero; e.g., pretty(c(0,1e-317)) no longer has negative numbers, currently still warning about a very small range, and pretty(2^-(1024 - 2^-1/(c(24,10)))) is more accurate.
  • The error message for not finding vignette files when weaving has correct file sizes now. (Thanks to Sebastian Meyer's PR#18154.)
  • dnbinom(20, , 1) now correctly gives 0, and similar cases are more accurate with underflow precaution. (Reported by Francisco Vera Alcivar in PR#18072.)

New in R for Mac 4.1.0 (Aug 10, 2021)

  • FUTURE DIRECTIONS:
  • It is planned that the 4.1.x series will be the last to support 32-bit Windows, with production of binary packages for that series continuing until early 2023.
  • SIGNIFICANT USER-VISIBLE CHANGES:
  • Data set esoph in package datasets now provides the correct numbers of controls; previously it had the numbers of cases added to these. (Reported by Alexander Fowler in PR#17964.)
  • NEW FEATURES:
  • www.omegahat.net is no longer one of the repositories known by default to setRepositories(). (Nowadays it only provides source packages and is often unavailable.)
  • Function package_dependencies() (in package tools) can now use different dependency types for direct and recursive dependencies.
  • The checking of the size of tarball in R CMD check --as-cran may be tweaked via the new environment variable _R_CHECK_CRAN_INCOMING_TARBALL_THRESHOLD_, as suggested in PR#17777 by Jan Gorecki.
  • Using c() to combine a factor with other factors now gives a factor, an ordered factor when combining ordered factors wit identical levels.
  • apply() gains a simplify argument to allow disabling of simplification of results.
  • The format() method for class "ftable" gets a new option justify. (Suggested by Thomas Soeiro.)
  • New ...names() utility. (Proposed by Neal Fultz in PR#17705.)
  • type.convert() now warns when its as.is argument is not specified, as the help file always said it _should_. In that case, the default is changed to TRUE in line with its change in read.table() (related to stringsAsFactor) in R 4.0.0.
  • When printing list arrays, classed objects are now shown _via_ their format() value if this is a short enough character string, or by giving the first elements of their class vector and their length.
  • capabilities() gets new entry "Rprof" which is TRUE when R has been configured with the equivalent of --enable-R-profiling (as it is by default). (Related to Michael Orlitzky's report PR#17836.)
  • str(xS4) now also shows extraneous attributes of an S4 object xS4.
  • Rudimentary support for vi-style tags in rtags() and R CMD rtags has been added. (Based on a patch from Neal Fultz in PR#17214.)
  • checkRdContents() is now exported from tools; it and also checkDocFiles() have a new option chkInternal allowing to check Rd files marked with keyword "internal" as well. The latter can be activated for R CMD check via environment variable _R_CHECK_RD_INTERNAL_TOO_.
  • New functions numToBits() and numToInts() extend the raw conversion utilities to (double precision) numeric.
  • Functions URLencode() and URLdecode() in package utils now work on vectors of URIs. (Based on patch from Bob Rudis submitted with PR#17873.)
  • path.expand() can expand ~user on most Unix-alikes even when readline is not in use. It tries harder to expand ~, for example should environment variable HOME be unset.
  • For HTML help (both dynamic and static), Rd file links to help pages in external packages are now treated as references to topics rather than file names, and fall back to a file link only if the topic is not found in the target package. The earlier rule which prioritized file names over topics can be restored by setting the environment variable _R_HELP_LINKS_TO_TOPICS_ to a false value.
  • c() now removes NULL arguments before dispatching to methods, thus simplifying the implementation of c() methods, _but_ for back compatibility keeps NULL when it is the first argument. (From a report and patch proposal by Lionel Henry in PR#17900.)
  • Vectorize()'s result function's environment no longer keeps unneeded objects.
  • Function ...elt() now propagates visibility consistently with ..n. (Thanks to Lionel Henry's PR#17905.)
  • capture.output() no longer uses non-standard evaluation to evaluate its arguments. This makes evaluation of functions like
  • parent.frame() more consistent. (Thanks to Lionel Henry's PR#17907.)
  • packBits(bits, type="double") now works as inverse of numToBits(). (Thanks to Bill Dunlap's proposal in PR#17914.)
  • curlGetHeaders() has two new arguments, timeout to specify the timeout for that call (overriding getOption("timeout")) and TLS to specify the minimum TLS protocol version to be used for https:// URIs (_inter alia_ providing a means to check for sites using deprecated TLS versions 1.0 and 1.1).
  • For nls(), an optional constant scaleOffset may be added to the denominator of the relative offset convergence test for cases where the fit of a model is expected to be exact, thanks to a proposal by John Nash. nls(*, trace=TRUE) now also shows the convergence criterion.
  • Numeric differentiation _via_ numericDeriv() gets new optional arguments eps and central, the latter for taking central divided differences. The latter can be activated for nls() via nls.control(nDcentral = TRUE).
  • nls() now passes the trace and control arguments to getInitial(), notably for all self-starting models, so these can also be fit in zero-noise situations via a scaleOffset. For this reason, the initial function of a selfStart model must now have ... in its argument list.
  • bquote(splice = TRUE) can now splice expression vectors with attributes: this makes it possible to splice the result of parse(keep.source = TRUE). (Report and patch provided by Lionel Henry in PR#17869.)
  • textConnection() gets an optional name argument.
  • get(), exists(), and get0() now signal an error if the first argument has length greater than 1. Previously additional elements were silently ignored. (Suggested by Antoine Fabri on R-devel.)
  • R now provides a shorthand notation for creating functions, e.g. (x) x + 1 is parsed as function(x) x + 1.
  • R now provides a simple native forward pipe syntax |>. The simple form of the forward pipe inserts the left-hand side as the first argument in the right-hand side call. The pipe implementation as a syntax transformation was motivated by suggestions from Jim Hester and Lionel Henry.
  • all.equal(f, g) for functions now by default also compares their environment(.)s, notably via new all.equal method for class function. Comparison of nls() fits, e.g., may now need all.equal(m1, m2, check.environment = FALSE).
  • .libPaths() gets a new option include.site, allowing to _not_ include the site library. (Thanks to Dario Strbenac's suggestion and Gabe Becker's PR#18016.)
  • Lithuanian translations are now available. (Thanks to Rimantas Zakauskas.)
  • names() now works for DOTSXP objects. On the other hand, in R-lang, the R language manual, we now warn against relying on the structure or even existence of such dot-dot-dot objects.
  • all.equal() no longer gives an error on DOTSXP objects.
  • capabilities("cairo") now applies only to the file-based devices as it is now possible (if very unusual) to build R with Cairo support for those but not for X11().
  • There is optional support for tracing the progress of loadNamespace() - see its help.
  • (Not Windows.) l10n_info() reports an additional element, the name of the encoding as reported by the OS (which may differ from the encoding part (if any) of the result from Sys.getlocale("LC_CTYPE").
  • New function gregexec() which generalizes regexec() to find _all_ disjoint matches and well as all substrings corresponding to parenthesized subexpressions of the given regular expression. (Contributed by Brodie Gaslam.)
  • New function charClass() in package utils to query the wide-character classification functions in use (such as iswprint).
  • The names of quantile()'s result no longer depend on the global getOption("digits"), but quantile() gets a new optional argument digits = 7 instead.
  • grep(), sub(), regexp and variants work considerably faster for long factors with few levels. (Thanks to Michael Chirico's PR#18063.)
  • Provide grouping of x11() graphics windows within a window manager such as Gnome or Unity; thanks to a patch by Ivan Krylov posted to R-devel.
  • The split() method for class data.frame now allows the f argument to be specified as a formula.
  • sprintf now warns on arguments unused by the format string.
  • New palettes "Rocket" and "Mako" for hcl.colors() (approximating palettes of the same name from the 'viridisLite' package).
  • Contributed by Achim Zeileis.
  • The base environment and its namespace are now locked (so one can no longer add bindings to these or remove from these).
  • Rterm handling of multi-byte characters has been improved, allowing use of such characters when supported by the current locale.
  • Rterm now accepts ALT+ +xxxxxxxx sequences to enter Unicode characters as hex digits.
  • Environment variable LC_ALL on Windows now takes precedence over LC_CTYPE and variables for other supported categories, matching the POSIX behaviour.
  • duplicated() and anyDuplicated() are now optimized for integer and real vectors that are known to be sorted via the ALTREP
  • framework. Contributed by Gabriel Becker via PR#17993.
  • GRAPHICS:
  • The graphics engine version, R_GE_version, has been bumped to 14 and so packages that provide graphics devices should be reinstalled.
  • Graphics devices should now specify deviceVersion to indicate what version of the graphics engine they support.
  • Graphics devices can now specify deviceClip. If TRUE, the graphics engine will never perform any clipping of output itself. The clipping that the graphics engine does perform (for both canClip = TRUE and canClip = FALSE) has been improved to avoid producing unnecessary artifacts in clipped output.
  • The grid package now allows gpar(fill) to be a linearGradient(), a radialGradient(), or a pattern(). The viewport(clip) can now also be a grob, which defines a clipping path, and there is a new viewport(mask) that can also be a grob, which defines a mask.
  • These new features are only supported so far on the Cairo-based graphics devices and on the pdf() device.
  • (Not Windows.) A warning is given when a Cairo-based type is specified for a png(), jpeg(), tiff() or bmp() device but Cairo is unsupported (so type = "Xlib" is tried instead).
  • grSoftVersion() now reports the versions of FreeType and FontConfig if they are used directly (not _via_ Pango), as is most commonly done on macOS.
  • C-LEVEL FACILITIES:
  • The _standalone_ libRmath math library and R's C API now provide log1pexp() again as documented, and gain log1mexp().
  • INSTALLATION on a UNIX-ALIKE:
  • configure checks for a program pkgconf if program pkg-config is not found. These are now only looked for on the path (like almost all other programs) so if needed specify a full path to the command in PKG_CONFIG, for example in file config.site.
  • C99 function iswblank is required - it was last seen missing ca 2003 so the workaround has been removed.
  • There are new configure options --with-internal-iswxxxxx, --with-internal-towlower and --with-internal-wcwidth which allows the system functions for wide-character classification case-switching and width (wcwidth and wcswidth) to be replaced b internal ones. The first has long been used on macOS, AIX (and Windows) but this enables it to be unselected there and selected for other platforms (it is the new default on Solaris). The second is new in this version of R and is selected by default on macOS and Solaris. The third has long been the default and remains so as it contains customizations for East Asian languages.
  • System versions of these functions are often minimally implemented (sometimes only for ASCII characters) and may not cover the full range of Unicode points: for example Solaris (and Windows) only cover the Basic Multilingual Plane.
  • Cairo installations without X11 are more likely to be detected by configure, when the file-based Cairo graphics devices will be available but not X11(type = "cairo").
  • There is a new configure option --with-static-cairo which is the default on macOS. This should be used when only static cairo (and where relevant, Pango) libraries are available.
  • Cairo-based graphics devices on platforms without Pango but with FreeType/FontConfig will make use of the latter for font selection.
  • LINK-TIME OPTIMIZATION on a UNIX-ALIKE:
  • Configuring with flag --enable-lto=R now also uses LTO when installing the recommended packages.
  • R CMD INSTALL and R CMD SHLIB have a new flag --use-LTO to use LTO when compiling code, for use with R configured with --enable-lto=R. For R configured with --enable-lto, they have the new flag --no-use-LTO. Packages can opt in or out of LTO compilation _via_ a UseLTO field in the DESCRIPTION file. (As usual this can be overridden by the command-line flags.)
  • BUILDING R on Windows:
  • for GCC >= 8, FC_LEN_T is defined in config.h and hence character lengths are passed from C to Fortran in _inter alia_ BLAS and LAPACK calls.
  • There is a new text file src/gnuwin32/README.compilation, which outlines how C/Fortran code compilation is organized and documents new features:
  • R can be built with Link-Time Optimization with a suitable compiler - doing so with GCC 9.2 showed several inconsistencies which have been corrected.
  • There is support for cross-compiling the C and Fortran code in R and standard packages on suitable (Linux) platforms. This is mainly intended to allow developers to test later versions of compilers - for example using GCC 9.2 or 10.x has detected issues that GCC 8.3 in Rtools40 does not.
  • There is experimental support for cross-building R packages with C, C++ and/or Fortran code.
  • The R installer can now be optionally built to support a single architecture (only 64-bit or only 32-bit).
  • PACKAGE INSTALLATION:
  • The default C++ standard has been changed to C++14 where available (which it is on all currently checked platforms): if not (as before) C++11 is used if available otherwise C++ is not supported. Packages which specify C++11 will still be installed using C++11.
  • C++14 compilers may give deprecation warnings, most often for std::random_shuffle (deprecated in C++14 and removed in C++17). Either specify C++11 (see 'Writing R Extensions') or modernize the code and if needed specify C++14. The latter has been supported since R 3.4.0 so the package's DESCRIPTION would need to include something like
  • Depends: R (>= 3.4)
  • PACKAGE INSTALLATION on Windows:
  • R CMD INSTALL and R CMD SHLIB make use of their flag --use-LTO when the LTO_OPT make macro is set in file etc/${R_ARCH}/Makeconf or in a personal/site Makevars file. (For details see 'Writing R Extensions' SS4.5.)
  • This provides a valuable check on code consistency. It does work with GCC 8.3 as in Rtools40, but that does not detect everything the CRAN checks with current GCC do.
  • PACKAGE INSTALLATION on macOS:
  • The default personal library directory on builds with --enable-aqua (including CRAN builds) now differs by CPU type,one of
  • ~/Library/R/x86_64/x.y/library
  • ~/Library/R/arm64/x.y/library
  • This uses the CPU type R (and hence the packages) were built for, so when a x86_64 build of R is run under Rosetta emulation on an arm64 Mac, the first is used.
  • UTILITIES:
  • R CMD check can now scan package functions for bogus return statements, which were possibly intended as return() calls (wish of PR#17180, patch by Sebastian Meyer). This check can be activated via the new environment variable _R_CHECK_BOGUS_RETURN_, true for --as-cran.
  • R CMD build omits tarballs and binaries of previous builds from the top-level package directory. (PR#17828, patch by Sebastian Meyer.)
  • R CMD check now runs sanity checks on the use of LazyData, for example that a data directory is present and that LazyDataCompression is not specified without LazyData and has a documented value. For packages with large LazyData databases without specifying LazyDataCompression, there is a reference to the code given in 'Writing R Extensions' SS1.1.6 to test the choice of compression (as in all the CRAN packages tested a non-default method was preferred).
  • R CMD build removes LazyData and LazyDataCompression fields from the DESCRIPTION file of packages without a data directory.
  • ENCODING-RELATED CHANGES:
  • The parser now treats Unnnnnnnn escapes larger than the upper limit for Unicode points (U10FFFF) as an error as they cannot be represented by valid UTF-8. Where such escapes are used for outputting non-printable (including unassigned) characters, 6 hex digits are used (rather than 8 with leading zeros). For clarity, braces are used, for example U{0effff}.
  • The parser now looks for non-ASCII spaces on Solaris (as previously on most other OSes).
  • There are warnings (including from the parser) on the use of unpaired surrogate Unicode points such as uD834. (These cannot be converted to valid UTF-8.)
  • Functions nchar(), tolower(), toupper() and chartr() and those using regular expressions have more support for inputs with a marked Latin-1 encoding.
  • The character-classification functions used (by default) to replace the system iswxxxxx functions on Windows, macOS and AIX have been updated to Unicode 13.0.0.
  • The character-width tables have been updated to include new assignments in Unicode 13.0.0.
  • The code for evaluating default (extended) regular expressions now uses the same character-classification functions as the rest of R (previously they differed on Windows, macOS and AIX).
  • There is a build-time option to replace the system's wide-character wctrans C function by tables shipped with R: use configure option --with-internal-towlower or (on Windows) -DUSE_RI18N_CASE in CFLAGS when building R. This may be needed to allow tolower() and toupper() to work with Unicode characters beyond the Basic Multilingual Plane where not supported by system functions (e.g. on Solaris where it is the new default).
  • R is more careful when truncating UTF-8 and other multi-byte strings that are too long to be printed, passed to the system or libraries or placed into an internal buffer. Truncation will no longer produce incomplete multibyte characters.
  • DEPRECATED AND DEFUNCT:
  • Function plclust() from the package stats and package.dependencies(), pkgDepends(), getDepList(), installFoundDepends(), and vignetteDepends() from package tools are defunct.
  • Defunct functions checkNEWS() and readNEWS() from package tools and CRAN.packages() from utils have been removed.
  • R CMD config CXXCPP is defunct (it was deprecated in R 3.6.2).
  • parallel::detectCores() drops support for Irix (retired in 2013).
  • The LINPACK argument to chol.default(), chol2inv(), solve.default() and svd() has been defunct since R 3.1.0. It was silently ignored up to R 4.0.3 but now gives an error.
  • Subsetting/indexing, such as ddd[*] or ddd$x on a DOTSXP(dot-dot-dot) object ddd has been disabled; it worked by accident only and was undocumented.
  • BUG FIXES:
  • Many more C-level allocations (mainly by malloc and strdup) are checked for success with suitable alternative actions.
  • Bug fix for replayPlot(); this was turning off graphics engine display list recording if a recorded plot was replayed in the same session. The impact of the bug became visible if resize the device after replay OR if attempted another savePlot() after replay (empty display list means empty screen on resize or empty saved plot).
  • R CMD check etc now warn when a package exports non-existing S4 classes or methods, also in case of no "methods" presence. (Reported by Alex Bertram; reproducible example and patch by Sebastian Meyer in PR#16662.)
  • boxplot() now also accepts calls for labels such as ylab, the same as plot(). (Reported by Marius Hofert.)
  • The help page for xtabs() now correctly states that addNA is setting na.action = na.pass among others. (Reported as PR#17770 by Thomas Soeiro.)
  • The R CMD check gives a longer and more comprehensible message when DESCRIPTION misses dependencies, e.g., in Imports:. (Thanks to the contributors of PR#17179.)
  • update.default() now calls the generic update() on the formula to work correctly for models with extended formulas. (As reported and suggested by Neal Fultz in PR#17865.)
  • The horizontal position of leaves in a dendrogram is now correct also with center = FALSE. (PR#14938, patch from Sebastian Meyer.)
  • all.equal.POSIXt() no longer warns about and subsequently ignores inconsistent "tzone" attributes, but describes the difference in its return value (PR#17277). This check can be disabled _via_ the new argument check.tzone = FALSE as suggested by Sebastian Meyer.
  • as.POSIXct() now populates the "tzone" attribute from its tz argument when x is a logical vector consisting entirely of NA values.
  • x[[2^31]]

New in R for Mac 4.0.5 (Apr 1, 2021)

  • BUG FIXES:
  • The change to the internal table in R 4.0.4 for iswprint has been reverted: it contained some errors in printability of 'East Asian' characters.
  • For packages using LazyData, R CMD build ignored the --resave-data option and the BuildResaveData field of the DESCRIPTION file (in R versions 4.0.0 to 4.0.4).

New in R for Mac 4.0.4 (Feb 16, 2021)

  • NEW FEATURES:
  • File share/texmf/tex/latex/jss.cls has been updated to work with LaTeX versions since Oct 2020.
  • Unicode character width tables (as used by nchar(, type = "w")) have been updated to Unicode 12.1 by Brodie Gaslam (PR#17781), including many emoji.
  • The internal table for iswprint (used on Windows, macOS and AIX) has been updated to include many recent Unicode characters.
  • INSTALLATION on a UNIX-ALIKE:
  • If an external BLAS is specified by --with-blas=foo or _via_ environment variable BLAS_LIBS is not found, this is now a configuration error. The previous behaviour was not clear from the documentation: it was to continue the search as if --with-blas=yes was specified.
  • BUG FIXES:
  • all.equal(x,y) now "sees" the two different NAs in factors, thanks to Bill Dunlap and others in PR#17897.
  • (~ NULL)[1] and similar formula subsetting now works, thanks to a report and patch by Henrik Bengtsson in PR#17935. Additionally, subsetting leaving an empty formula now works too, thanks to suggestions by Suharto Anggono.
  • .traceback(n) keeps source references again, as before R 4.0.0, fixing a regression; introduced by the PR#17580, reported including two patch proposals by Brodie Gaslam.
  • unlist(plst, recursive=FALSE) no longer drops content for pairlists with list components, thanks to the report and patch by Suharto Anggono in PR#17950.
  • iconvlist() now also works on MUSL based (Linux) systems, from a report and patch suggestion by Wesley Chan in PR#17970.
  • round() and signif() no longer tolerate wrong argument names, notably in 1-argument calls; reported by Shane Mueller on R-devel (mailing list); later reported as PR#17976.
  • .Machine has longdouble.* elements only if capabilities("long.double") is true, as documented. (Previously they were included if the platform had long double identical to double, as ARM does.)
  • p.adjust(numeric(), n=0) now works, fixing PR#18002.
  • identical(x,y) no longer prints "Unknown Type .." for typeof(x) == "..." objects.
  • Fix (auto-)print()ing of named complex vectors, see PR#17868 and PR#18019.
  • all.equal(, ) now works, fixing PR#18029.
  • as.data.frame.list(L, row.names=NULL) now behaves in line with data.frame(), disregarding names of components of L, fixing PR#18034, reported by Kevin Tappe.
  • checkRdaFiles(ff)$version is now correct also when ff contains files of different versions, thanks to a report and patch from Sebastian Meyer in PR#18041.
  • macOS: Quartz device live drawing could fail (no plot is shown) if the system changes the drawing context after view update (often the case since macOS Big Sur). System log may show "CGContextDelegateCreateForContext: invalid context" error.

New in R for Mac 4.0.3 (Oct 12, 2020)

  • NEW FEATURES:
  • On platforms using configure option --with-internal-tzcode, additional values "internal" and (on macOS only) "macOS" are accepted for the environment variable TZDIR. (See ?TZDIR.)
  • On macOS, "macOS" is used by default if the system timezone database is a newer version than that in the R installation.
  • When install.packages(type = "source") fails to find a package in a repository it mentions package versions which are excluded by their R version requirement and links to hints on why a package might not be found.
  • The default value for options("timeout") can be set from enviromnent variable R_DEFAULT_INTERNET_TIMEOUT, still defaulting to 60 (seconds) if that is not set or invalid.
  • This may be needed when child R processes are doing downloads, for example during the installation of source packages which download jars or other forms of data.
  • LINK-TIME OPTIMIZATION on a UNIX-ALIKE:
  • There is now support for parallelized Link-Time Optimization (LTO) with GCC and for 'thin' LTO with clang _via_ setting the LTO macro.
  • There is support for setting a different LTO flag for the Fortran compiler, including to empty when mixing clang and gfortran (as on macOS). See file config.site.
  • There is a new LTO_LD macro to set linker options for LTO compilation, for example to select an alternative linker or to parallelize thin LTO.
  • DEPRECATED AND DEFUNCT:
  • The LINPACK argument to chol.default(), chol2inv(), solve.default() and svd() has been defunct since R 3.1.0. Using it now gives a warning which will become an error in R 4.1.0.
  • BUG FIXES:
  • The code mitigating stack overflow with PCRE regexps on very long strings is enabled for PCRE2 < 10.30 also when JIT is enabled, since stack overflows have been seen in that case.
  • Fix to correctly show the group labels in dotchart() (which where lost in the ylab improvement for R 4.0.0).
  • addmargins(*, ..) now also works when fn() is a local function, thanks to bug report and patch PR#17124 from Alex Bertram.
  • rank(x) and hence sort(x) now work when x is an object (as per is.object(x)) of type "raw" _and_ provides a valid `[` method, e.g., for gmp::as.bigz(.) numbers.
  • chisq.test(*, simulate.p.value=TRUE) and r2dtable() now work correctly for large table entries (in the millions). Reported by Sebastian Meyer and investigated by more helpers in PR#16184.
  • Low-level socket read/write operations have been fixed to correctly signal communication errors. Previously, such errors could lead to a segfault due to invalid memory access. Reported and debugged by Dmitriy Selivanov in PR#17850.
  • quantile(x, pr) works more consistently for pr values slightly outside [0,1], thanks to Suharto Anggono's PR#17891.
  • Further, quantile(x, prN, names=FALSE) now works even when prN contains NAs, thanks to Anggono's PR#17892. Ditto for ordered factors or Date objects when type = 1 or 3, thanks to PR#17899.
  • Libcurl-based internet access, including curlGetHeaders(), was not respecting the "timeout" option. If this causes unanticipated timeouts, consider increasing the default by setting R_DEFAULT_INTERNET_TIMEOUT.
  • as.Date() now also works with an initial "", thanks to Michael Chirico's PR#17909.
  • isS3stdGeneric(f) now detects an S3 generic also when it it is trace()d, thanks to Gabe Becker's PR#17917.
  • R_allocLD() has been fixed to return memory aligned for long double type PR#16534.
  • fisher.test() no longer segfaults when called again after its internal stack has been exceeded PR#17904.
  • Accessing a long vector represented by a compact integer sequence no longer segfaults (reported and debugged by Hugh Parsonage).
  • duplicated() now works also for strings with multiple encodings inside a single vector PR#17809.
  • phyper(11, 15, 0, 12, log.p=TRUE) no longer gives NaN; reported as PR#17271 by Alexey Stukalov.
  • Fix incorrect calculation in logLik.nls() PR#16100, patch from Sebastian Meyer.
  • A very old bug could cause a segfault in model.matrix() when terms involved logical variables. Part of PR#17879.
  • model.frame.default() allowed data = 1, leading to involuntary variable capture (rest of PR#17879).
  • tar() no longer skips non-directory files, thanks to a patch by Sebastian Meyer, fixing the remaining part of PR#16716.

New in R for Mac 4.0.2 (Jun 25, 2020)

  • UTILITIES:
  • R CMD check skips vignette re-building (with a warning) if the VignetteBuilder package(s) are not available.
  • BUG FIXES:
  • Paths with non-ASCII characters caused problems for package loading on Windows PR#17833.
  • Using tcltk widgets no longer crashes R on Windows.
  • source(*, echo=TRUE) no longer fails in some cases with empty lines; reported by Bill Dunlap in PR#17769.
  • on.exit() now correctly matches named arguments, thanks to PR#17815 (including patch) by Brodie Gaslam.
  • regexpr(*, perl=TRUE) no longer returns incorrect positions into text containing characters outside of the Unicode Basic Multilingual Plane on Windows.

New in R for Mac 4.0.1 (Jun 8, 2020)

  • NEW FEATURES:
  • paste() and paste0() gain a new optional argument recycle0. When set to true, zero-length arguments are recycled leading to character(0) after the sep-concatenation, i.e., to the empty string "" if collapse is a string and to the zero-length value character(0) when collapse = NULL.
  • A package whose code uses this should depend on R (>= 4.0.1).
  • The summary() method now maps the counts correctly to the warning messages.
  • BUG FIXES:
  • aov(frml, ...) now also works where the formula deparses to more than 500 characters, thanks to a report and patch proposal by Jan Hauffa.
  • Fix a dozen places (code, examples) as Sys.setlocale() returns the new rather than the previous setting.
  • Fix for adding two complex grid units via sum(). Thanks to Gu Zuguang for the report and Thomas Lin Pedersen for the patch.
  • Fix parallel::mclapply(..., mc.preschedule=FALSE) to handle raw vector results correctly. PR#17779
  • Computing the base value, i.e., 2, "everywhere", now uses FLT_RADIX, as the original machar code looped indefinitely on the ppc64 architecture for the longdouble case.
  • In R 4.0.0, sort.list(x) when is.object(x) was true, e.g., for x

New in R for Mac 4.0.0 (May 8, 2020)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • Packages need to be (re-)installed under this version (4.0.0) of R
  • matrix objects now also inherit from class "array", so e.g., class(diag(1)) is c("matrix", "array"). This invalidates code incorrectly assuming that class(matrix_obj)) has length one
  • S3 methods for class "array" are now dispatched for matrix objects
  • There is a new syntax for specifying raw character constants similar to the one used in C++: r"(...)" with ... any character sequence not containing the sequence )". This makes it easier to write strings that contain backslashes or both single and double quotes. For more details see ?Quotes
  • R now uses a stringsAsFactors = FALSE default, and hence by default no longer converts strings to factors in calls to data.frame() and read.table()
  • A large number of packages relied on the previous behaviour and so have needed/will need updating
  • The plot() S3 generic function is now in package base rather than package graphics, as it is reasonable to have methods that do not use the graphics package. The generic is currently re-exported from the graphics namespace to allow packages importing it from there to continue working, but this may change in future
  • Packages which define S4 generics for plot() should be re-installed and package code using such generics from other packages needs to ensure that they are imported rather than rely on their being looked for on the search path (as in a namespace, the base namespace has precedence over the search path)
  • REFERENCE COUNTING:
  • Reference counting is now used instead of the NAMED mechanism for determining when objects can be safely mutated in base C code. This reduces the need for copying in some cases and should allow further optimizations in the future. It should help make the internal code easier to maintain
  • This change is expected to have almost no impact on packages using supported coding practices in their C/C++ code
  • MIGRATION TO PCRE2
  • This version of R is built against the PCRE2 library for Perl-like regular expressions, if available. (On non-Windows platforms PCRE1 can optionally be used if PCRE2 is not available at build time.) The version of PCRE in use can be obtained via extSoftVersion(): PCRE1 (formerly known as ‘PCRE’) has versions = 10
  • Making PCRE2 available when building R from source is strongly recommended (preferably version 10.30 or later) as PCRE1 is no longer developed: version 8.44 is ‘likely to be the final release’
  • PCRE2 reports errors for some regular expressions that were accepted by PCRE1. A hyphen now has to be escaped in a character class to be interpreted as a literal (unless first or last in the class definition). R, B and X are no longer allowed in character classes (PCRE1 treated these as literals)
  • Option PCRE_study is no longer used with PCRE2, and is reported as FALSE when that is in use
  • NEW FEATURES:
  • assertError() and assertWarning() (in package tools) can now check for specific error or warning classes via the new optional second argument classes (which is not back compatible with previous use of an unnamed second argument)
  • DF2formula(), the utility for the data frame method of formula(), now works without parsing and explicit evaluation, starting from Suharto Anggono's suggestion in PR#17555
  • approxfun() and approx() gain a new argument na.rm defaulting to true. If set to false, missing y values now propagate into the interpolated values
  • Long vectors are now supported as the seq argument of a for() loop
  • str(x) gets a new deparse.lines option with a default to speed it up when x is a large call object
  • The internal traceback object produced when an error is signalled (.Traceback), now contains the calls rather than the deparse()d calls, deferring the deparsing to the user-level functions .traceback() and traceback(). This fulfils the wish of PR#17580, reported including two patch proposals by Brodie Gaslam
  • data.matrix() now converts character columns to factors and from this to integers
  • package.skeleton() now explicitly lists all exports in the ‘NAMESPACE’ file
  • New function .S3method() to register S3 methods in R scripts
  • file.path() has some support for file paths not in the session encoding, e.g. with UTF-8 inputs in a non-UTF-8 locale the output is marked as UTF-8
  • Most functions with file-path inputs will give an explicit error if a file-path input in a marked encoding cannot be translated (to the native encoding or in some cases on Windows to UTF-8), rather than translate to a different file path using escapes. Some (such as dir.exists(), file.exists(), file.access(), file.info(), list.files(), normalizePath() and path.expand()) treat this like any other non-existent file, often with a warning
  • There is a new help document accessed by help("file path encoding") detailing how file paths with marked encodings are handled
  • New function list2DF() for creating data frames from lists of variables
  • iconv() has a new option sub = "Unicode" to translate UTF-8 input invalid in the to encoding using escapes
  • There is a new function infoRDS() providing information about the serialization format of a serialized object
  • S3 method lookup now by default skips the elements of the search path between the global and base environments
  • Added an argument add_datalist(*, small.size = 0) to allow the creation of a ‘data/datalist’ file even when the total size of the data sets is small
  • The backquote function bquote() has a new argument splice to enable splicing a computed list of values into an expression, like ,@ in LISP's backquote
  • The formula interface to t.test() and wilcox.test() has been extended to handle one-sample and paired tests
  • The palette() function has a new default set of colours (which are less saturated and have better accessibility properties). There are also some new built-in palettes, which are listed by the new palette.pals() function. These include the old default palette under the name "R3". Finally, the new palette.colors() function allows a subset of colours to be selected from any of the built-in palettes
  • n2mfrow() gains an option asp = 1 to specify the aspect ratio, fulfilling the wish and extending the proposal of Michael Chirico in PR#17648
  • For head(x, n) and tail() the default and other S3 methods notably for vector n, e.g. to get a “corner” of a matrix, has been extended to array's of higher dimension thanks to the patch proposal by Gabe Becker in PR#17652. Consequently, optional argument addrownums is deprecated and replaced by the (more general) argument keepnums. An invalid second argument n now leads to typically more easily readable error messages
  • New function .class2() provides the full character vector of class names used for S3 method dispatch
  • Printing methods(..) now uses a new format() method
  • sort.list(x) now works for non-atomic objects x and method = "auto" (the default) or "radix" in cases order(x) works
  • Where they are available, writeBin() allows long vectors
  • New function deparse1() produces one string, wrapping deparse(), to be used typically in deparse1(substitute(*)), e.g., to fix PR#17671
  • wilcox.test() enhancements: In the (non-paired) two-sample case, Inf values are treated as very large for robustness consistency. If exact computations are used, the result now has "exact" in the method element of its return value. New arguments tol.root and digits.rank where the latter may be used for stability to treat very close numbers as ties
  • readBin() and writeBin() now report an error for an invalid endian value. The affected code needs to be fixed with care as the old undocumented behavior was to swap endian-ness in such cases
  • sequence() is now an S3 generic with an internally implemented default method, and gains arguments to generate more complex sequences. Based on code from the S4Vectors Bioconductor package and the advice of Hervé Pagès
  • print()'s default method and many other methods (by calling the default eventually and passing ...) now make use of a new optional width argument, avoiding the need for the user to set and reset options("width")
  • memDecompress() supports the RFC 1952 format (e.g. in-memory copies of gzip-compressed files) as well as RFC 1950
  • memCompress() and memDecompress() support long raw vectors for types "gzip" and "zx"
  • sweep() and slice.index() can now use names of dimnames for their MARGIN argument (apply has had this for almost a decade)
  • New function proportions() and marginSums(). These should replace the unfortunately named prop.table() and margin.table(). They are drop-in replacements, but also add named-margin functionality. The old function names are retained as aliases for back-compatibility
  • Functions rbinom(), rgeom(), rhyper(), rpois(), rnbinom(), rsignrank() and rwilcox() which have returned integer since R 3.0.0 and hence NA when the numbers would have been outside the integer range, now return double vectors (without NAs, typically) in these cases
  • matplot(x,y) (and hence matlines() and matpoints()) now call the corresponding methods of plot() and lines(), e.g, when x is a "Date" or "POSIXct" object; prompted by Spencer Graves' suggestion
  • stopifnot() now allows customizing error messages via argument names, thanks to a patch proposal by Neal Fultz in PR#17688
  • unlink() gains a new argument expand to disable wildcard and tilde expansion. Elements of x of value "~" are now ignored
  • mle() in the stats4 package has had its interface extended so that arguments to the negative log-likelihood function can be one or more vectors, with similar conventions applying to bounds, start values, and parameter values to be kept fixed. This required a minor extension to class "mle", so saved objects from earlier versions may need to be recomputed
  • The default for pdf() is now useDingbats = FALSE
  • The default fill colour for hist() and boxplot() is now col = "lightgray"
  • The default order of the levels on the y-axis for spineplot() and cdplot() has been reversed
  • If the R_ALWAYS_INSTALL_TESTS environment variable is set to a true value, R CMD INSTALL behaves as if the --install-tests option is always specified. Thanks to Reinhold Koch for the suggestion
  • New function R_user_dir() in package tools suggests paths appropriate for storing R-related user-specific data, configuration and cache files
  • capabilities() gains a new logical option Xchk to avoid warnings about X11-related capabilities
  • The internal implementation of grid units has changed, but the only visible effects at user-level should be
  • a slightly different print format for some units (especially unit arithmetic)
  • faster performance (for unit operations) and
  • two new functions unitType() and unit.psum()
  • Based on code contributed by Thomas Lin Pedersen
  • When internal dispatch for rep.int() and rep_len() fails, there is an attempt to dispatch on the equivalent call to rep()
  • Object .Machine now contains new longdouble.* entries (when R uses long doubles internally)
  • news() has been enhanced to cover the news on R 3.x and 2.x
  • For consistency, N 1 character vectors, is deprecated now. Such use has been rare, and has ‘worked’ as expected in some cases only. In other cases, wrong x have silently been truncated, not detecting previous errors
  • Long-standing issue where the X11 device could lose events shortly after startup has been addressed (PR#16702)
  • The data.frame method for rbind() no longer drops levels from factor columns by default (PR#17562)
  • available.packages() and hence install.packages() now pass their ... argument to download.file(), fulfilling the wish of PR#17532; subsequently, available.packages() gets new argument quiet, solving PR#17573
  • stopifnot() gets new argument exprObject to allow an R object of class expression (or other ‘language’) to work more consistently, thanks to suggestions by Suharto Anggono
  • conformMethod() now works correctly in cases containing a “&& logic” bug, reported by Henrik Bengtsson. It now creates methods with "missing" entries in the signature. Consequently, rematchDefinition() is amended to use appropriate .local() calls with named arguments where needed
  • format.default(*, scientific = FALSE) now corresponds to a practically most extreme options(scipen = n) setting rather than arbitrary n = 100
  • format(as.symbol("foo")) now works (returning "foo")
  • postscript(.., title = *) now signals an error when the title string contains a character which would produce corrupt PostScript, thanks to PR#17607 by Daisuko Ogawa
  • Certain Ops (notably comparison such as ==) now also work for 0-length data frames, after reports by Hilmar Berger
  • methods(class = class(glm(..))) now warns more usefully and only once
  • write.dcf() no longer mangles field names (PR#17589)
  • Primitive replacement functions no longer mutate a referenced first argument when used outside of a complex assignment context
  • A better error message for contour(*, levels = Inf)
  • The return value of contourLines() is no longer invisible()
  • The Fortran code for calculating the coefficients component in lm.influence() was very inefficient. It has (for now) been replaced with much faster R code (PR#17624)
  • cm.colors(n) etc no longer append the code for alpha = 1, "FF", to all colors. Hence all eight *.colors() functions and rainbow() behave consistently and have the same non-explicit default (PR#17659)
  • dnorm had a problematic corner case with sd == -Inf or negative sd which was not flagged as an error in all cases. Thanks to Stephen D. Weigand for reporting and Wang Jiefei for analyzing this; similar change has been made in dlnorm()
  • The optional iter.smooth argument of plot.lm(), (the plot() method for lm and glm fits) now defaults to 0 for all glm fits. Especially for binary observations with high or low fitted probabilities, this effectively deleted all observations of 1 or 0. Also, the type of residuals used in the glm case has been switched to "pearson" since deviance residuals do not in general have approximately zero mean
  • In plot.lm, Cook's distance was computed from unweighted residuals, leading to inconsistencies. Replaced with usual weighted version. (PR#16056)
  • Time-series ts(*, start, end, frequency) with fractional frequency are supported more consistently; thanks to a report from Johann Kleinbub and analysis and patch by Duncan Murdoch in PR#17669
  • In case of errors mcmapply() now preserves attributes of returned "try-error" objects and avoids simplification, overriding SIMPLIFY to FALSE. (PR#17653)
  • as.difftime() gets new optional tz = "UTC" argument which should fix behaviour during daylight-savings-changeover days, fixing PR#16764, thanks to proposals and analysis by Johannes Ranke and Kirill Müller
  • round() does a better job of rounding “to nearest” by measuring and “to even”; thanks to a careful algorithm originally prompted by the report from Adam Wheeler and then others, in PR#17668
  • round(x, dig) for negative digits is much more rational now, notably for large |dig|
  • Inheritance information on S4 classes is maintained more consistently, particularly in the case of class unions (in part due to PR#17596 and a report from Ezra Tucker)
  • is() behaves more robustly when its argument class2 is a classRepresentation object
  • The warning message when attempting to export an nonexistent class is now more readable; thanks to Thierry Onkelinx for recognizing the problem
  • choose() misbehaved in corner cases where it switched n - k for k and n was only nearly integer (report from Erik Scott Wright)
  • mle() in the stats4 package had problems combining use of box constraints and fixed starting values (in particular, confidence intervals were affected)
  • Operator ? now has lower precedence than = to work as documented, so = behaves like

New in R for Mac 3.6.2 (Mar 1, 2020)

  • NEW FEATURES:
  • runmed(x, *) gains a new option na.action determining _how_ to handle NaN or NA in x.
  • dotchart() gains new options ann, xaxt, frame.plot and log.
  • INSTALLATION on a UNIX-ALIKE:
  • Detection of the C stack direction has been moved from run-time to configure: this is safer with LTO builds and allows the detection to be overridden - see file config.site.
  • Source-code changes enable installation on platforms using gcc-fno-common (the expected default for gcc 10.x).
  • C-LEVEL FACILITIES:
  • installTrChar (which is nowadays is wrapped by installChar) is defined in Rinternals.h. (Neither are part of the API.)
  • PACKAGE INSTALLATION:
  • Header Rconfig.h contains the value of FC_LEN_T deduced at installation which is used by the prototypes in headers R_ext/BLAS.h and R_ext/Lapack.h but to avoid extensive breakage this is only exposed when USE_FC_LEN_T is defined.
  • If a package's C/C++ calls to BLAS/LAPACK allow for the 'hidden' arguments used by most Fortran compilers to pass the lengths of Fortran character arguments, define USE_FC_LEN_T and include Rconfig.h (possibly _via_ R.h) before including R_ext/BLAS.h or R_ext/Lapack.h.
  • A package with Fortran source code and perhaps C (but not C++) sources can request for its shared object/DLL to be linked by the Fortran compiler by including a line USE_FC_TO_LINK= in src/Makevars[.win] and using $(SHLIB_OPENMP_FFLAGS) as part of PKG_LIBS.
  • The known reason for doing so is a package which uses Fortran (only) OpenMP on a platform where the Fortran OpenMP runtime is incompatible with the C one (e.g. gfortran 9.x with clang).
  • UTILITIES:
  • R CMD check has a new option to mitigate checks leaving files/directories in /tmp. See the 'R Internals' manual - this is part of --as-cran.
  • DEPRECATED AND DEFUNCT:
  • Support for specifying C++98 in package installation is deprecated.
  • Support in R CMD config for F77, FCPIFCPLAGS, CPP, CXXCPP and CXX98 and similar is deprecated. (CPP is found from the system make and may well not be set.)
  • Use $CC -E and $CXX -E instead of CPP and CXXCPP.
  • BUG FIXES:
  • runmed(x, *) when x contains missing values now works consistently for both algorithm="Stuetzle" and "Turlach", and no longer segfaults for "Turlach", as reported by Hilmar Berger.
  • apply(diag(3), 2:3, mean) now gives a helpful error message.
  • dgamma(x, shape, log=TRUE) now longer overflows to Inf for shape < 1 and very small x, fixing PR#17577, reported by Jonathan Rougier.
  • Buffer overflow in building error messages fixed. Reported by Benjamin Tremblay.
  • options(str = .) is correctly initialized at package utils load time, now. A consequence is that str() in scripts now is more consistent to interactive use, e.g., when displaying function(**) argument lists.
  • as.numeric() now gives correct error message.
  • Printing ls.str() no longer wrongly shows "" in rare cases.
  • Auto-printing S4 objects no longer duplicates the object, for faster speed and reduced memory consumption. Reported by Aaron Lun.
  • pchisq(, , ncp=100) no longer takes practically forever in some cases. Hence ditto for corresponding qchisq() calls.
  • x %% L for finite x no longer returns NaN when L is infinite, nor suffers from cancellation for large finite L, thanks to Long Qu's
  • Analogously, x %/% L and L %/% x suffer less from cancellation and return values corresponding to limits for large L.
  • grepl(NA, *) now returns logical as documented.
  • options(warn=1e11) is an error now, instead of later leading to C stack overflow because of infinite recursion.
  • R_tryCatch no longer transfers control for all conditions. Reported and patch provided by Lionel Henry in PR#17617.
  • format(object.size(.), digits=NULL) now works, fixing PR#17628 reported by Jonathan Carroll.
  • get_all_vars(f, d) now also works for cases, e.g. where d contains a matrix. Reported by Simon Wood in 2009 and patch provided by Ben Bolker in PR#13624.
  • Additionally, it now also works when some variables are data frames, fixing PR#14905, reported by Patrick Breheny.
  • barplot() could get spacings wrong if there were exactly two bars PR#15522. Patch by Michael Chirico.
  • power.t.test() works in more cases when returning values of n smaller than 2.
  • dotchart(*, pch=., groups=.) now works better. Reported by Robert and confirmed by Nic Rochette in PR#16953.
  • canCoerce(obj, cl) no longer assumes length(class(obj)) == 1.
  • plot.formula(*, subset = *) now also works in a boundary case reported by Robert Schlicht (TU Dresden).
  • readBin() and writeBin() of a rawConnection() now also work inlarge cases, thanks to a report and proposal by Taeke Harkema in

New in R for Mac 3.6.1 (Dec 12, 2019)

  • INSTALLATION on a UNIX-ALIKE:
  • The default detection of the shell variable libNN is overridden for derivatives of Debian Linux, some of which have started to have a /usr/lib64 directory. (E.g. Ubuntu 19.04.) As before, it can be specified in config.site.
  • UTILITIES:
  • R CMD config knows the values of AR and RANLIB, often set for LTO builds.
  • DEPRECATED AND DEFUNCT:
  • The use of a character vector with .Fortran() is formally deprecated and gives a non portability warning. (It has long been strongly discouraged in 'Writing R Extensions'.)
  • BUG FIXES:
  • On Windows, GUI package installation via menuInstallPkgs() works again, thanks to Len Weil's and Duncan Murdoch's PR#17556.
  • R CMD check on data() fixing PR#17558 thanks to Duncan Murdoch.
  • quasi(*, variance = list(..)) now works more efficiently, and should work in all cases fixing PR#17560. Further, quasi(var = mu(1-mu)) and quasi(var = "mu ^ 3") now work, and quasi(variance = "log(mu)") now gives a correct error message.
  • Creation of lazy loading database during package installation is again robust to Rprofile changing the current working directory (PR#17559).
  • boxplot(y ~ f, horizontal=TRUE) now produces correct x- and y-labels.
  • rbind.data.frame() allows to keep levels from factor columns (PR#17562) via new option factor.exclude.
  • Additionally, it works in one more case with matrix-columns which had been reported on 2017-01-16 by Krzysztof Banas.
  • Correct messaging in C++ pragma checks in tools code for R CMD check, fixing PR#17566 thanks to Xavier Robin.
  • print()ing and auto-printing no longer differs for functions with a user defined print.function, thanks to Bill Dunlap's report.
  • as.data.frame() treats 1D arrays the same as vectors, PR#17570.
  • Improvements in smoothEnds(x, *) working with NAs (towards runmed() working in that case, in the next version of R).
  • vcov(glm(), dispersion = *) works correctly again, fixing PR#17571 thanks to Pavel Krivitsky.
  • R CMD INSTALL and install.packages() on Windows are now more robust against a locked file in an earlier installation of the package to be installed. The default value of option install.lock on Windows has been changed to TRUE.
  • On Unix alikes (when readline is active), only expand tilde (~) file names starting with a tilde, instead of almost all tildes.
  • In R documentation (*.Rd) files, item [..] is no longer treated specially when rendered in LaTeX and hence pdf, but rather shows the brackets in all cases.

New in R for Mac 3.6.0 (May 1, 2019)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • Serialization format version 3 becomes the default for serialization and saving of the workspace (save(), serialize(), saveRDS(), compiler::cmpfile()). Serialized data in format 3 cannot be read by versions of R prior to version 3.5.0. Serialization format version 2 is still supported and can be selected by version = 2 in the save/serialization functions. The default can be changed back for the whole R session by setting environment variables R_DEFAULT_SAVE_VERSION and R_DEFAULT_SERIALIZE_VERSION to 2. For maximal back-compatibility, files ‘vignette.rds’ and ‘partial.rdb’ generated by R CMD build are in serialization format version 2, and resave by default produces files in serialization format version 2 (unless the original is already in format version 3).
  • The default method for generating from a discrete uniform distribution (used in sample(), for instance) has been changed. This addresses the fact, pointed out by Ottoboni and Stark, that the previous method made sample() noticeably non-uniform on large populations. See PR#17494 for a discussion. The previous method can be requested using RNGkind() or RNGversion() if necessary for reproduction of old results. Thanks to Duncan Murdoch for contributing the patch and Gabe Becker for further assistance.
  • The output of RNGkind() has been changed to also return the ‘kind’ used by sample().
  • NEW FEATURES:
  • Sys.setFileTime() has been vectorized so arguments path and time of length greater than one are now supported.
  • axis() gets new option gap.axis = NA for specifying a multiplication factor for the minimal “gap” (distance) between axis labels drawn. Its default is 1 for labels parallel to the axis, and 0.25 for perpendicular ones.
  • Perpendicular labels no longer overlap, fixing bug PR#17384.
  • The default method of plot() gains new arguments xgap.axis = NA and ygap.axis = NA to be passed to the x– and y– axis(.., gap.axis=*) calls.
  • removeSource() now works not only for functions but also for some language objects.
  • as.call(), rep.int(), rep_len() and nchar() dispatch internally.
  • is(object, class2) looks for class2 in the calling namespace after looking in the namespace of class(object).
  • extendrange(.., f) with a length-2 f now extends separately to the left and the right.
  • lengths() dispatches internally to S4 methods.
  • download.file() on Windows now uses URLdecode() to determine the file extension, and uses binary transfer (mode = "wb") also for file extension ‘.rds’.
  • The help page for download.file() now contains the same information on all platforms.
  • Setting C locale for collation via environment variables LC_ALL and LC_COLLATE and via a call to Sys.setlocale() now takes precedence over environment variable R_ICU_LOCALE.
  • There is a new function, nullfile(), to give the file name of the null system device (e.g., ‘/dev/null’) on the current platform.
  • There are two new options, keep.parse.data and keep.parse.data.pkgs, which control whether parse data are included into sources when keep.source or keep.source.pkgs is TRUE. By default, keep.parse.data.pkgs is now FALSE, which changes previous behavior and significantly reduces space and time overhead when sources are kept when installing packages.
  • In rapply(x, ..), x can also be “list-like” and of length >= 2^{31}.
  • trimws() gets new optional whitespace argument, allowing more extensive definitions of “space”, such as including Unicode spaces (as wished in PR#17431).
  • weighted.mean() no longer coerces the weights to a double/numeric vector, since sum() now handles integer overflow. This makes weighted.mean() more polymorphic and endomorphic, but be aware that the results are no longer guaranteed to be a vector of type double.
  • When loading namespaces, S3 method registrations which overwrite previous registrations are now noted by default (using packageStartupMessage()).
  • compiler::cmpfile() gains a version argument, for use when the output file should be saved in serialization format 2.
  • The axis labeling in the default method of pairs() may now be toggled by new options horOdd and verOdd.
  • (Not Windows nor macOS.) Package tcltk now supports an environment variable R_DONT_USE_TK which if set disables Tk initialization. This is intended for use to circumvent errors in loading the package, e.g. with recent Linux running under an address sanitizer.
  • The numeric method of all.equal() gets optional arguments countEQ and formatFUN. If countEQ is true, the mean error is more sensible when many entries are equal.
  • outer(x,y, FUN = "*") is more efficient using tcrossprod(u,v) instead of u %*% t(v).
  • vcov() is more efficient via new optional arguments in summary.mlm().
  • The default method of summary() gets an option to choose the kind of quantile()s to use; wish of PR#17438.
  • Fitting multiple linear models via lm() does work with matrix offsets, as suggested in PR#17407.
  • The new functions mem.maxVSize() and mem.maxMSize() allow the maximal size of the vector heap and the maximal number of nodes allowed in the current R process to be queried and set.
  • news() gains support for ‘NEWS.md’ files.
  • An effort has been started to have our reference manuals, i.e., all help pages. show platform-independent information (rather than Windows or Unix-alike specifics visible only on that platform). Consequently, the Windows version of X11() / x11() got identical formal arguments to the Unix one.
  • sessionInfo()$running has been factored out in a new variable osVersion.
  • slice.index() now also works for multi-dimensional margins.
  • untar() used with an external tar command assumes this supports decompression including xz and automagically detecting the compression type. This has been true of all mainstream implementations since 2009 (for GNU tar, since version 1.22): older implementations are still supported via the new argument support_old_tars whose default is controlled by environment variable R_SUPPORT_OLD_TARS. (It looks like NetBSD and OpenBSD have ‘older’ tar commands for this purpose.)
  • The new function asplit() allow splitting an array or matrix by its margins.
  • New functions errorCondition() and warningCondition() provide a convenient way to create structured error and warning objects.
  • .Deprecated() now signals a warning of class "deprecatedWarning", and .Defunct() now signals an error of class "defunctError".
  • Many ‘package not found’ errors are now signaled as errors of class "packageNotFoundError".
  • As an experimental feature, when loadNamespace() fails because the requested package is not available the error is initially signaled with a retry_loadNamespace restart available. This allows a calling handler to try to install the package and continue.
  • S3method() directives in ‘NAMESPACE’ can now also be used to perform delayed S3 method registration.
  • Experimentally, setting environment variable _R_CHECK_LENGTH_1_LOGIC2_ will lead to warnings (or errors if the variable is set to a ‘true’ value) when && or || encounter and use arguments of length more than one.
  • Added "lines" and "chars" coordinate systems to grconvertX() and grconvertY().
  • getOption() is more efficient notably for the rare case when called with two arguments, from several contributors in PR#17394.
  • In .col(dim) and .row(dim), dim now may also be an integer-valued "double".
  • sQuote() and dQuote() get an explicit q argument with obvious default instead of using getOption("fancyQuotes") implicitly and unconditionally.
  • unzip() can list archives with comments and with spaces in file names even using an external unzip command.
  • Command line completion has a new setting rc.settings(dots = FALSE) to remove ... from the list of possible function arguments.
  • library() no longer checks packages with compiled code match R.version$platform. loadNamespace() never has, and increasingly the ‘canonical name’ does not reflect the important characteristics of compiled code.
  • The primitive functions drop() and unclass() now avoid duplicating their data for atomic vectors that are large enough, by returning ALTREP wrapper objects with adjusted attributes. R-level assignments to change attributes will also use wrapper objects to avoid duplicating data for larger atomic vectors. R functions like structure() and unname() will therefore not duplicate data in these settings. Generic vectors as produced by list() are not yet covered by this optimization but may be in due course.
  • In formals(), envir becomes an optional argument instead of being hardwired.
  • Instead of signalling an error for an invalid S4 object x, str(x) now gives a warning and subsequently still shows most parts of x, e.g., when slots are missing.
  • gamma(x) and lgamma(x) no longer warn when correctly returning Inf or underflowing to zero. This helps maximum likelihood and similar computations.
  • convertColor() is now vectorized, so a lot faster for converting many colours at once. The new argument vectorized to colorConverter() ensures that non-vectorized colour converters still work. (Thanks to Brodie Gaslam.)
  • download.file() and url() get new argument headers for custom HTTP headers, e.g., allowing to perform basic http authentication, thanks to a patch contributed by Gábor Csárdi.
  • File-based connection functions file(), gzfile(), bzfile() and xzfile() now signal an error when used on a directory.
  • For approx(), splinefun() etc, a new setting ties = c("ordered", ) allows skipping the sorting and still treat ties.
  • format(x) gives a more user friendly error message in the case where no method is defined. A minimal method is provided in format.default(x) when isS4(x) is true.
  • which(x) now also works when x is a long vector, thanks to Suharto Anggono's PR#17201. NB: this may return a double result, breaking the previous guarantee of an integer result.
  • seq.default() is more careful to return an integer (as opposed to double) result when its arguments are large and/or classed objects; see comment #9 of Suharto Anggono's PR#17497.
  • The plot() method for lm and glm fits, plot.lm(), gains a new option iter.smooth with a default of 0 for binomial fits, no longer down-weighting when smoothing the residuals.
  • zip() passes its list of files via standard input to the external command when too long for the command line (on some platforms).
  • data() gains an overwrite argument.
  • t.test() now also returns the standard error (in list component stderr).
  • model.matrix(*, contrasts.arg = CC) now warns about invalid contrasts.args.
  • Performance of substr() and substring() has been improved.
  • stopifnot() has been simplified thanks to Suharto Anggono's proposals to become considerably faster for cheap expressions.
  • The default ‘user agent’ has been changed when accessing http:// and https:// sites using libcurl. (A site was found which caused libcurl to infinite-loop with the previous default.)
  • sessionInfo() now also contains RNGkind() and prints it when it differs from the default; based on a proposal and patch by Gabe Becker in PR#17535. Also, RNGversion(getRversion()) works directly.
  • library() and require() now allow more control over handling search path conflicts when packages are attached. The policy is controlled by the new conflicts.policy option.
  • barplot() gets a formula method, thanks to a patch proposal by Arni Magnusson in PR#17521.
  • pmax() and pmin(x) now also work for long vectors, thanks to Suharto Anggono's PR#17533.
  • bxp() now warns when omitting duplicated arguments.
  • New hcl.colors() function to provide wide range of HCL-based colour palettes with much better perceptual properties than the existing RGB/HSV-based palettes like rainbow().
  • Also a new hcl.pals() function to list available palette names for hcl.colors().
  • Contributed by Achim Zeileis.
  • The default colours for image() and filled.contour() are now based on hcl.colors().
  • The palette-generating functions rainbow(), gray.colors(), etc. get a new rev argument to facilitate reversing the order of colors.
  • New str2lang() and str2expression() as streamlined versions of parse(text=., keep.source=FALSE) allow to abstract typical call constructions, e.g., in formula manipulations. (Somewhat experimental)
  • Add update_PACKAGES() for incrementally updating a package repository index, instead of rebuilding the index from scratch. Thanks to Gabe Becker in PR#17544 for the patch, based on part of his switchr package.
  • INSTALLATION on a UNIX-ALIKE:
  • The options selected for the C++ compiler default to the C++11 standard if supported, otherwise to the C++98 standard.
  • Visibility macros such as C_VISIBILITY can now be user-set (including to empty), e.g. in ‘config.site’.
  • Macro FCLIBS, which has sometimes been needed on Solaris, has been renamed to FCLIBS_XTRA.
  • Macro F77 is always set to the value of FC, so the latter should be set to user-select the Fortran compiler for both fixed-form and free-form Fortran. In particular, gfortran is now the first choice for F77, not f95.
  • Macros FFLAGS and FCFLAGS remain distinct to allow for a compiler which needs a flag to select free- or fixed-form Fortran (most use the source-file extension to choose: ‘.f’ is fixed-form and ‘.f90’ and ‘.f95’ are free-form).
  • If only one of them is set, its value is used for both.
  • The special-casing of CFLAGS, CXXFLAGS and FFLAGS for Intel compilers on Linux has been removed: we do not have recent experience but the generic defaults now chosen are the same as those previously special-cased for x86_64.
  • If necessary, override the defaults on the configure command line or in file ‘config.site’.
  • Long-untested configure support for HP-UX and very old versions of Linux has been removed.
  • configure --with-blas (without specifying a value) includes OpenBLAS in its search (before ATLAS and a generic BLAS). This follows recent versions of the ax_blas autoconf macro.
  • The configure macro MAKEINFO has been updated to TEXI2ANY.
  • Support for make install-strip has been enhanced.
  • PACKAGE INSTALLATION:
  • Source package installation is by default ‘staged’: the package is installed into a temporary location under the final library directory and moved into place once the installation is complete. The benefit is that partially-installed packages are hidden from other R sessions.
  • The overall default is set by environment variable R_INSTALL_STAGED. R CMD INSTALL has new options --staged-install and --no-staged-install, and packages can use the StagedInstall field in their ‘DESCRIPTION’ file to opt out. (That opt-out is a temporary measure which may be withdrawn in future.)
  • Staged installation requires either --pkglock or --lock, one of which is used by default.
  • The interpretation of source code with extension ‘.f’ is changing. Previously this denoted FORTRAN 77 code, but current compilers no longer have a FORTRAN 77 mode and interpret it as ‘fixed-form’ Fortran 90 (or later where supported) code. Extensions ‘.f90’ and ‘.f95’ continue to indicate ‘free-form’ Fortran code.
  • Legal FORTRAN 77 code is also legal fixed-form Fortran 9x; however this change legitimizes the use of later features, in particular to replace features marked ‘obsolescent’ in Fortran 90 and ‘deleted’ in Fortran 2018 which gfortran 8.x and later warn about.
  • Packages containing files in the ‘src’ directory with extensions ‘.f90’ or ‘.f95’ are now linked using the C or C++ compiler rather than the Fortran 9x compiler. This is consistent with fixed-form Fortran code and allows mixing of C++ and free-form Fortran on most platforms.
  • Consequentially, a package which includes free-form Fortran 9x code which uses OpenMP should include SHLIB_OPENMP_CFLAGS (or the CXXFLAGS version if they also include C++ code) in PKG_LIBS rather than SHLIB_OPENMP_FCFLAGS — fortunately on almost all current platforms they are the same flag.
  • Macro PKG_FFLAGS will be used for the compilation of both fixed-form and free-form Fortran code unless PKG_FCFLAGS is also set (in ‘src/Makevars’ or ‘src/Makevars.win’).
  • The make macro F_VISIBILITY is now preferred for both fixed-form and free-form Fortran, for use in ‘src/Makevars’ and similar.
  • R CMD INSTALL gains a new option --strip which (where supported) strips installed shared object(s): this can also be achieved by setting the environment variable _R_SHLIB_STRIP_ to a true value.
  • The new option --strip-lib attempts stripping of static and shared libraries installed under ‘lib’.
  • These are most useful on platforms using GNU binutils (such as Linux) and compiling with -g flags.
  • There is more support for installing UTF-8-encoded packages in a strict Latin-1 locale (and probably for other Latin locales): non-ASCII comments in R code (and ‘NAMESPACE’ files) are worked around better.
  • UTILITIES:
  • R CMD check now optionally checks makefiles for correct and portable use of the SHLIB_OPENMP_*FLAGS macros.
  • R CMD check now evaluates Sexpr{} expressions (including those in macros) before checking the contents of ‘Rd’ files and so detects issues both in evaluating the expressions and in the expanded contents.
  • R CMD check now lists missing packages separated by commas and with regular quotes such as to be useful as argument in calling install.packages(c(..)); from a suggestion by Marcel Ramos.
  • tools::Rd2latex() now uses UTF-8 as its default output encoding.
  • R CMD check now checks line endings of files with extension ‘.hpp’ and those under ‘inst/include’. The check now includes that a non-empty file is terminated with a newline.
  • R CMD build will correct line endings in such files.
  • R CMD check now tries re-building all vignettes rather than stopping at the first error: whilst doing so it adds ‘bookmarks’ to the log. By default (see the ‘R Internals’ manual) it re-builds each vignette in a separate process.
  • It now checks for duplicated vignette titles (also known as ‘index entries’): they are used as hyperlinks on CRAN package pages and so do need to be unique.
  • R CMD check has more comprehensive checks on the ‘data’ directory and the functioning of data() in a package.
  • R CMD check now checks autoconf-generated ‘configure’ files have their corresponding source files, including optionally attempting to regenerate them on platforms with autoreconf.
  • R CMD build has a new option --compression to select the compression used for the tarball.
  • R CMD build now removes ‘src/*.mod’ files on all platforms.
  • C-LEVEL FACILITIES:
  • New pointer protection C functions R_PreserveInMSet and R_ReleaseFromMSet have been introduced to replace UNPROTECT_PTR, which is not safe to mix with UNPROTECT (and with PROTECT_WITH_INDEX). Intended for use in parsers only.
  • NAMEDMAX has been raised to 7 to allow further protection of intermediate results from (usually ill-advised) assignments in arguments to BUILTIN functions. Properly written package code should not be affected.
  • R_unif_index is now considered to be part of the C API.
  • R_GetCurrentEnv() allows C code to retrieve the current environment.
  • DEPRECATED AND DEFUNCT:
  • Argument compressed of untar() is deprecated — it is only used for external tar commands which increasingly for extraction auto-detect compression and ignore their zjJ flags.
  • var(f) and hence sd(f) now give an error for factor arguments; they gave a deprecation warning since R 3.2.3, PR#16564.
  • Package tools' vignetteDepends() has been deprecated (it called a function deprecated since Feb 2016), being partly replaced by newly exported vignetteInfo().
  • The f77_f2c script has been removed: it no longer sufficed to compile the ‘.f’ files in R.
  • The deprecated legacy support of make macros such as CXX1X has been removed: use the CXX11 forms instead.
  • Make macro F77_VISIBILITY is deprecated in favour of F_VISIBILITY.
  • Make macros F77, FCPIFCPLAGS and SHLIB_OPENMP_FCFLAGS are deprecated in favour of FC, FPICFLAGS and SHLIB_OPENMP_FFLAGS respectively.
  • $.data.frame had become an expensive version of the default method, so has been removed. (Thanks to Radford Neal for picking this up and to Duncan Murdoch for providing a patch.)
  • BUG FIXES:
  • replayPlot(r) now also works in the same R session when r has been “reproduced” from serialization, typically after saving to and reading from an RDS file.
  • substr() and substring() now signal an error when the input is invalid UTF-8.
  • file.copy() now works also when its argument to is of length greater than one.
  • mantelhaen.test() no longer suffers from integer overflow in largish cases, thanks to Ben Bolker's PR#17383.
  • Calling setGeneric("foo") in a package no longer fails when the enclosing environment of the implicit generic foo() is .GlobalEnv.
  • untar(file(".tar.gz"), *) now gives a better error message, suggesting to use gzfile() instead.
  • Method dispatch uses more relevant environments when looking up class definitions.
  • The documentation for identify() incorrectly claimed that the indices of identified points were returned in the order that the points were selected. identify() now has a new argument order to allow the return value to include the order in which points were identified; the documentation has been updated. Reported by Richard Rowe and Samuel Granjeaud.
  • order(...., decreasing=c(TRUE, FALSE)) could fail in some cases. Reported from StackOverflow via Karl Nordström.
  • User macros in Rd files now accept empty and multi-line arguments.
  • Calling install.packages() with a length zero pkgs argument now is a no-op (PR#17422).
  • unlist(x) now returns a correct factor when x is a nested list with factor leaves, fixing PR#12572 and PR#17419.
  • The documentation help(family) gives more details about the aic component, thanks to Ben Bolker's prompting.
  • The documentation for attributes and `attributes

New in R for Mac 3.5.2 (Mar 11, 2019)

  • PACKAGE INSTALLATION:
  • New macro CXX_VISIBILITY analogous to C_VISIBILITY (which several packages have been misusing for C++ code) for the default C++ compiler (but not necessarily one used for non-default C++ dialects like C++14).
  • TESTING:
  • The random number generator tests in tests/p-r-random-tests.R no longer fail occasionally as they now randomly sample from "certified" random seeds.
  • BUG FIXES:
  • The "glm" method of drop1() miscalculated the score test (test="Rao") when the model contained an offset.
  • Linear multiple empty models such as lm(y ~ 0) now have a correctly dimensioned empty coefficient matrix; reported by Brett Presnell.
  • vcov() and hence confint() now work (via a consistency change in summary.lm()).
  • confint() now works correctly; reported on R-devel by Steven Pav.
  • quade.test() now also works correctly when its arguments are not yet sorted along groups, fixing PR#15842.
  • Installation on a Unix-alike tries harder to link to the pthread library where required (rather than relying on OpenMP to provide it: configuring with --disable-openmp was failing on some Linux systems).
  • The data.frame method for print(x) is fast now also for large data frames x and got an optional argument max, thanks to suggestions by Juan Telleria.
  • hist() no longer integer overflows in very rare cases, fixing PR#17450.
  • untar() ignored a character compressed argument: however many external tar programs ignore the flags which should have been set and automagically choose the compression type, and if appropriate gzip or bzip2 compression would have been chosen from the magic header of the tarball.
  • zapsmall(x) now works for more "number-like" objects.
  • The tools-internal function called from R CMD INSTALL now gets a warnOption = 1 argument and only sets options(warn = warnOption) when that increases the warning level (PR#17453).
  • Analogously, the tools-internal function called from R CMD check gets a warnOption = 1 argument and uses the larger of that and getOption("warn"), also allowing to be run with increased warning level.
  • Parse data now have deterministic parent nodes (PR#16041).
  • Calling match() with length one x and POSIXlt table gave a segfault (PR#17459).
  • Fork clusters could hang due to a race condition in cluster initialization (makeCluster()).
  • nextn(n) now also works for larger n and no longer loops infinitely for e.g, n

New in R for Mac 3.5.1 (Dec 21, 2018)

  • BUG FIXES:
  • file("stdin") is no longer considered seekable.
  • dput() and dump() are no longer truncating when options(deparse.max.lines = *) is set.
  • Calls with an S3 class are no longer evaluated when printed, fixing part of PR#17398, thanks to a patch from Lionel Henry.
  • Allow file argument of Rscript to include space even when it is first on the command line.
  • callNextMethod() uses the generic from the environment of the calling method. Reported by Herv'e Pag`es with well documented examples.
  • Compressed file connections are marked as blocking.
  • optim(*, lower = c(-Inf, -Inf)) no longer warns (and switches the method), thanks to a suggestion by John Nash.
  • predict(fm, newdata) is now correct also for models where the formula has terms such as splines::ns(..) or stats::poly(..), fixing PR#17414, based on a patch from Duncan Murdoch.
  • simulate.lm(glm(*, gaussian(link = ))) has been corrected, fixing PR#17415 thanks to Alex Courtiol.
  • unlist(x) no longer fails in some cases of nested empty lists. Reported by Steven Nydick.
  • qr.coef(qr()) now works. Reported by Kun Ren.
  • The radix sort is robust to vectors with >1 billion elements (but long vectors are still unsupported). Thanks to Matt Dowle for the fix.
  • Terminal connections (e.g., stdin) are no longer buffered. Fixes PR#17432.
  • deparse(x), dput(x) and dump() now respect c()'s argument names recursive and use.names, e.g., for x

New in R for Mac 3.5.0 (Apr 29, 2018)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • All packages are by default byte-compiled on installation. This makes the installed packages larger (usually marginally so) and may affect the format of messages and tracebacks (which often exclude .Call and similar).
  • NEW FEATURES:
  • factor() now uses order() to sort its levels, rather than sort.list(). This allows factor() to support custom vector-like objects if methods for the appropriate generics are defined. It has the side effect of making factor() succeed on empty or length-one non-atomic vector(-like) types (e.g., "list"), where it failed before.
  • diag() gets an optional names argument: this may require updates to packages defining S4 methods for it.
  • chooseCRANmirror() and chooseBioCmirror() no longer have a useHTTPS argument, not needed now all R builds support https:// downloads.
  • New summary() method for warnings() with a (somewhat experimental) print() method.
  • (methods package.) .self is now automatically registered as a global variable when registering a reference class method.
  • tempdir(check = TRUE) recreates the tempdir() directory if it is no longer valid (e.g. because some other process has cleaned up the ‘/tmp’ directory).
  • New askYesNo() function and "askYesNo" option to ask the user binary response questions in a customizable but consistent way. (Suggestion of PR#17242.)
  • New low level utilities ...elt(n) and ...length() for working with ... parts inside a function.
  • isTRUE() is more tolerant and now true in x

New in R for Mac 3.4.3 (Dec 8, 2017)

  • INSTALLATION on a UNIX-ALIKE:
  • A workaround has been added for the changes in location of time-zone files in macOS 10.13 'High Sierra' and again in 10.13.1, so the default time zone is deduced correctly from the system setting when R is configured with --with-internal-tzcode (the default on macOS).
  • R CMD javareconf has been updated to recognize the use of a Java 9 SDK on macOS.
  • BUG FIXES:
  • raw(0) & raw(0) and raw(0) | raw(0) again return raw(0) (rather than logical(0)).
  • intToUtf8() converts integers corresponding to surrogate code points to NA rather than invalid UTF-8, as well as values larger than the current Unicode maximum of 0x10FFFF. (This aligns with the current RFC3629.)
  • Fix calling of methods on S4 generics that dispatch on ... when the call contains ....
  • Following Unicode 'Corrigendum 9', the UTF-8 representations of U+FFFE and U+FFFF are now regarded as valid by utf8ToInt().
  • range(c(TRUE, NA), finite = TRUE) and similar no longer return NA. (Reported by Lukas Stadler.)
  • The self starting function attr(SSlogis, "initial") now also works when the y values have exact minimum zero and is slightly changed in general, behaving symmetrically in the y range.
  • The printing of named raw vectors is now formatted nicely as for other such atomic vectors, thanks to Lukas Stadler.

New in R for Mac 3.4.1 (Jul 14, 2017)

  • INSTALLATION on a UNIX-ALIKE:
  • The deprecated support for PCRE versions older than 8.20 has been removed.
  • BUG FIXES:
  • getParseData() gave incorrect column information when code contained multi-byte characters. (PR#17254)
  • Asking for help using expressions like ?stats::cor() did not work. (PR#17250)
  • readRDS(url(....)) now works.
  • R CMD Sweave again returns status = 0 on successful completion.
  • Vignettes listed in .Rbuildignore were not being ignored properly. (PR#17246)
  • file.mtime() no longer returns NA on Windows when the file or directory is being used by another process. This affected installed.packages(), which is now protected against this.
  • R CMD INSTALL Windows .zip file obeys --lock and --pkglock flags.
  • (Windows only) The choose.files() function could return incorrect results when called with multi = FALSE. (PR#17270)
  • aggregate(, drop = FALSE) now also works in case of near-equal numbers in by. (PR#16918)
  • fourfoldplot() could encounter integer overflow when calculating the odds ratio. (PR#17286)
  • parse() no longer gives spurious warnings when extracting srcrefs from a file not encoded in the current locale.
  • This was seen from R CMD check with inst/doc/*.R files, and check has some additional protection for such files.
  • print.noquote(x) now always returns its argument x (invisibly).
  • Non-UTF-8 multibyte character sets were not handled properly in source references. (PR#16732)

New in R for Mac 3.4.0 (Apr 24, 2017)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • (Unix-alike) The default methods for download.file() and url() now choose "libcurl" except for file:// URLs. There will be small changes in the format and wording of messages, including in rare cases if an issue is a warning or an error. For example, when HTTP re-direction occurs, some messages refer to the final URL rather than the specified one.
  • Those who use proxies should check that their settings are compatible (see ?download.file: the most commonly used forms work for both "internal" and "libcurl").
  • table() has been amended to be more internally consistent and become back compatible to R

New in R for Mac 3.3.3 (Mar 8, 2017)

  • NEW FEATURES:
  • Changes when redirection of a http:// URL to a https:// URL is encountered:
  • The internal methods of download.file() and url() now report that they cannot follow this (rather than failing silently).
  • (Unix-alike) download.file(method = "auto") (the default) re-tries with method = "libcurl".
  • (Unix-alike) url(method = "default") with an explicit open argument re-tries with method = "libcurl". This covers many of the usages, e.g. readLines() with a URL argument.
  • INSTALLATION on a UNIX-ALIKE:
  • The configure check for the zlib version is now robust to versions longer than 5 characters, including 1.2.11.
  • UTILITIES:
  • Environmental variable _R_CHECK_TESTS_NLINES_ controls how R CMD check reports failing tests (see SS8 of the 'R Internals' manual).
  • DEPRECATED AND DEFUNCT:
  • (C-level Native routine registration.) The undocumented styles field of the components of R_CMethodDef and R_FortranMethodDef is deprecated.
  • BUG FIXES:
  • vapply(x, *) now works with long vectors x. (PR#17174)
  • isS3method("is.na.data.frame") and similar are correct now. (PR#17171)
  • grepRaw(, , fixed = TRUE) now works, thanks to a patch by Mikko Korpela. (PR#17132)
  • Package installation into a library where the package exists _via_ symbolic link now should work wherever Sys.readlink() works, resolving PR#16725.
  • "Cincinnati" was missing an "n" in the precip dataset.
  • Fix buffer overflow vulnerability in pdf() when loading an encoding file. Reported by Talos (TALOS-2016-0227).
  • getDLLRegisteredRoutines() now produces its warning correctly when multiple DLLs match, thanks to Matt Dowle's PR#17184.
  • Sys.timezone() now returns non-NA also on platforms such as Ubuntu 14.04.5 LTS, thanks to Mikko Korpela's PR#17186.
  • format(x) for an illegal "POSIXlt" object x no longer segfaults.
  • methods(f) now also works for f "(" or "{".
  • (Windows only) dir.create() did not check the length of the path to create, and so could overflow a buffer and crash R. (PR#17206)
  • On some systems, very small hexadecimal numbers in hex notation would underflow to zero. (PR#17199)
  • pmin() and pmax() now work again for ordered factors and 0-length S3 classed objects, thanks to Suharto Anggono's PR#17195 and PR#17200.
  • bug.report() did not do any validity checking on a package's BugReports field. It now ignores an empty field, removes leading whitespace and only attempts to open http:// and https:// URLs, falling back to emailing the maintainer.
  • Bandwidth selectors bw.ucv() and bw.SJ() gave incorrect answers or incorrectly reported an error (because of integer overflow) for inputs longer than 46341. Similarly for bw.bcv() at length 5793.
  • Another possible integer overflow is checked and may result in an error report (rather than an incorrect result) for much longer inputs (millions for a smooth distribution).
  • findMethod() failed if the active signature had expanded beyond what a particular package used. (Example with packages XR and XRJulia on CRAN.)
  • qbeta() underflowed too early in some very asymmetric cases. (PR#17178)
  • R CMD Rd2pdf had problems with packages with non-ASCII titles in .Rd files (usually the titles were omitted).

New in R for Mac 3.3.2 (Nov 7, 2016)

  • NEW FEATURES:
  • extSoftVersion() now reports the version (if any) of the readline library in use.
  • The version of LAPACK included in the sources has been updated to 3.6.1, a bug-fix release including a speedup for the non-symmetric case of eigen().
  • Use options(deparse.max.lines=) to limit the number of lines recorded in .Traceback and other deparsing activities.
  • format() looks more regular, also for non-character atomic matrices.
  • abbreviate() gains an option named = TRUE.
  • The online documentation for package methods is extensively rewritten. The goals are to simplify documentation for basic use, to note old features not recommended and to correct out-of-date information.
  • Calls to setMethod() no longer print a message when creating a generic function in those cases where that is natural: S3 generics and primitives.
  • INSTALLATION and INCLUDED SOFTWARE:
  • Versions of the readline library >= 6.3 had been changed so that terminal window resizes were not signalled to readline: code has been added using a explicit signal handler to work around that (when R is compiled against readline >= 6.3). (PR#16604)
  • configure works better with Oracle Developer Studio 12.5.
  • UTILITIES:
  • R CMD check reports more dubious flags in files src/Makevars[.in], including -w and -g.
  • R CMD check has been set up to filter important warnings from recent versions of gfortran with -Wall -pedantic: this now reports non-portable GNU extensions such as out-of-order declarations.
  • R CMD config works better with paths containing spaces, even those of home directories (as reported by Ken Beath).
  • DEPRECATED AND DEFUNCT:
  • Use of the C/C++ macro NO_C_HEADERS is deprecated (no C headers are included by R headers from C++ as from R 3.3.0, so it should no longer be needed).
  • BUG FIXES:
  • The check for non-portable flags in R CMD check could be stymied by src/Makevars files which contained targets.
  • (Windows only) When using certain desktop themes in Windows 7 or higher, Alt-Tab could cause Rterm to stop accepting input. (PR#14406; patch submitted by Jan Gleixner.)
  • pretty(d, ..) behaves better for date-time d (PR#16923).
  • When an S4 class name matches multiple classes in the S4 cache, perform a dynamic search in order to obey namespace imports. This should eliminate annoying messages about multiple hits in the class cache. Also, pass along the package from the ClassExtends object when looking up superclasses in the cache.
  • sample(NA_real_) now works.
  • Packages using non-ASCII encodings in their code did not install data properly on systems using different encodings.
  • merge(df1, df2) now also works for data frames with column names "na.last", "decreasing", or "method". (PR#17119)
  • contour() caused a segfault if the labels argument had length zero. (Reported by Bill Dunlap.)
  • unique(warnings()) works more correctly, thanks to a new duplicated.warnings() method.
  • findInterval(x, vec = numeric(), all.inside = TRUE) now returns 0s as documented. (Reported by Bill Dunlap.)
  • (Windows only) R CMD SHLIB failed when a symbol in the resulting library had the same name as a keyword in the .def file. (PR#17130)
  • pmax() and pmin() now work with (more ?) classed objects, such as "Matrix" from the Matrix package, as documented for a long time.
  • axis(side, x = D) and hence Axis() and plot() now work correctly for "Date" and time objects D, even when "time goes backward", e.g., with decreasing xlim. (Reported by William May.)
  • str(I(matrix(..))) now looks as always intended.
  • plot.ts(), the plot() method for time series, now respects cex, lwd and lty. (Reported by Greg Werbin.)
  • parallel::mccollect() now returns a named list (as documented) when called with wait = FALSE. (Reported by Michel Lang.)
  • If a package added a class to a class union in another package, loading the first package gave erroneous warnings about "undefined subclass".
  • c()'s argument use.names is documented now, as belonging to the (C internal) default method. In "parallel", argument recursive is also moved from the generic to the default method, such that the formal argument list of base generic c() is just (...).
  • rbeta(4, NA) and similarly rgamma() and rnbinom() now return NaN's with a warning, as other r(), and as documented. (PR#17155)
  • Using options(checkPackageLicense = TRUE) no longer requires acceptance of the licence for non-default standard packages such as compiler. (Reported by Mikko Korpela.)
  • split(, *) now works even when the split off parts are long. (PR#17139)
  • min() and max() now also work correctly when the argument list starts with character(0). (PR#17160)
  • Subsetting very large matrices (prod(dim(.)) >= 2^31) now works thanks to Michael Schubmehl's PR#17158.
  • bartlett.test() used residual sums of squares instead of variances, when the argument was a list of lm objects. (Reported by Jens Ledet Jensen).
  • plot(, which = *) now correctly labels the contour lines for the standardized residuals for which = 6. It also takes the correct p in case of singularities (also for which = 5). (PR#17161)
  • xtabs(~ exclude) no longer fails from wrong scope, thanks to Suharto Anggono's PR#17147.
  • Reference class calls to methods() did not re-analyse previously defined methods, meaning that calls to methods defined later would fail. (Reported by Charles Tilford).
  • findInterval(x, vec, left.open = TRUE) misbehaved in some cases. (Reported by Dmitriy Chernykh.)

New in R for Mac 3.3.1 (Jun 22, 2016)

  • BUG FIXES:
  • R CMD INSTALL and hence install.packages() gave an internal error installing a package called description from a tarball on a case-insensitive file system.
  • match(x, t) (and hence x %in% t) failed when x was of length one, and either character and x and t only differed in their Encoding or when x and t where complex with NAs or NaNs. (PR#16885.)
  • unloadNamespace(ns) also works again when ns is a 'namespace', as from getNamespace().
  • rgamma(1,Inf) or rgamma(1, 0,0) no longer give NaN but the correct limit.
  • length(baseenv()) is correct now.
  • pretty(d, ..) for date-time d rarely failed when "halfmonth" time steps were tried (PR#16923) and on 'inaccurate' platforms such as 32-bit windows or a configuration with --disable-long-double; see comment #15 of PR#16761.
  • In text.default(x, y, labels), the rarely(?) used default for labels is now correct also for the case of a 2-column matrix x and missing y.
  • as.factor(c(a = 1L)) preserves names() again as in R < 3.1.0.
  • strtrim(""[0], 0[0]) now works.
  • Use of Ctrl-C to terminate a reverse incremental search started by Ctrl-R in the readline-based Unix terminal interface is now supported for readline >= 6.3 (Ctrl-G always worked). (PR#16603)
  • diff() now keeps the "units" attribute, as subtraction already did, PR#16940.

New in R for Mac 3.3.0 (May 4, 2016)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • nchar(x, *)'s argument keepNA governing how the result for NAs in x is determined, gets a new default keepNA = NA which returns NA where x is NA, except for type = "width" which still returns 2, the formatting / printing width of NA.
  • All builds have support for https: URLs in the default methods for download.file(), url() and code making use of them.
  • Unfortunately that cannot guarantee that any particular https: URL can be accessed. For example, server and client have to successfully negotiate a cryptographic protocol (TLS/SSL, ...) and the server's identity has to be verifiable _via_ the available certificates. Different access methods may allow different protocols or use private certificate bundles: we encountered a https: CRAN mirror which could be accessed by one browser but not by another nor by download.file() on the same Linux machine.
  • NEW FEATURES:
  • The print method for methods() gains a byclass argument.
  • New functions validEnc() and validUTF8() to give access to the validity checks for inputs used by grep() and friends.
  • Experimental new functionality for S3 method checking, notably isS3method().
  • Also, the names of the R 'language elements' are exported as character vector tools::langElts.
  • str(x) now displays "Time-Series" also for matrix (multivariate) time-series, i.e. when is.ts(x) is true.
  • (Windows only) The GUI menu item to install local packages now accepts *.tar.gz files as well as *.zip files (but defaults to the latter).
  • New programmeR's utility function chkDots().
  • D() now signals an error when given invalid input, rather than silently returning NA. (Request of John Nash.)
  • formula objects are slightly more "first class": e.g., formula() or new("formula", y ~ x) are now valid. Similarly, for "table", "ordered" and "summary.table". Packages defining S4 classes with the above S3/S4 classes as slots should be reinstalled.
  • New function strrep() for repeating the elements of a character vector.
  • rapply() preserves attributes on the list when how = "replace".
  • New S3 generic function sigma() with methods for extracting the estimated standard deviation aka "residual standard deviation" from a fitted model.
  • news() now displays R and package news files within the HTML help system if it is available. If no news file is found, a visible NULL is returned to the console.
  • as.raster(x) now also accepts raw arrays x assuming values in 0:255.
  • Subscripting of matrix/array objects of type "expression" is now supported.
  • type.convert("i") now returns a factor instead of a complex value with zero real part and missing imaginary part.
  • Graphics devices cairo_pdf() and cairo_ps() now allow non-default values of the cairographics 'fallback resolution' to be set.
  • This now defaults to 300 on all platforms: that is the default documented by cairographics, but apparently was not used by all system installations.
  • file() gains an explicit method argument rather than implicitly using getOption("url.method", "default").
  • Thanks to a patch from Tomas Kalibera, x[x != 0] is now typically faster than x[which(x != 0)] (in the case where x has no NAs, the two are equivalent).
  • read.table() now always uses the names for a named colClasses argument (previously names were only used when colClasses was too short). (In part, wish of PR#16478.)
  • (Windows only) download.file() with default method = "auto" and a ftps:// URL chooses "libcurl" if that is available.
  • The out-of-the box Bioconductor mirror has been changed to one using https://: use chooseBioCmirror() to choose a http:// mirror if required.
  • The data frame and formula methods for aggregate() gain a drop argument.
  • available.packages() gains a repos argument.
  • The undocumented switching of methods for url() on https: and ftps: URLs is confined to method = "default" (and documented).
  • smoothScatter() gains a ret.selection argument.
  • qr() no longer has a ... argument to pass additional arguments to methods.
  • [ has a method for class "table".
  • It is now possible (again) to replayPlot() a display list snapshot that was created by recordPlot() in a different R session.
  • It is still not a good idea to use snapshots as a persistent storage format for R plots, but it is now not completely silly to use a snapshot as a format for transferring an R plot between two R sessions.
  • The underlying changes mean that packages providing graphics devices (e.g., Cairo, RSvgDevice, cairoDevice, tikzDevice) will need to be reinstalled.
  • Code for restoring snapshots was contributed by Jeroen Ooms and JJ Allaire.
  • Some testing code is available at .
  • tools::undoc(dir = D) and codoc(dir = D) now also work when D is a directory whose normalizePath()ed version does not end in the package name, e.g. from a symlink.
  • abbreviate() has more support for multi-byte character sets - it no longer removes bytes within characters and knows about Latin vowels with accents. It is still only really suitable for (most) European languages, and still warns on non-ASCII input.
  • abbreviate(use.classes = FALSE) is now implemented, and that is more suitable for non-European languages.
  • match(x, table) is faster (sometimes by an order of magnitude) when x is of length one and incomparables is unchanged, thanks to Peter Haverty (PR#16491).
  • More consistent, partly not back-compatible behavior of NA and NaN coercion to complex numbers, operations less often resulting in complex NA (NA_complex_).
  • lengths() considers methods for length and [[ on x, so it should work automatically on any objects for which appropriate methods on those generics are defined.
  • The logic for selecting the default screen device on OS X has been simplified: it is now quartz() if that is available even if environment variable DISPLAY has been set by the user.
  • The choice can easily be overridden _via_ environment variable R_INTERACTIVE_DEVICE.
  • On Unix-like platforms which support the getline C library function, system(*,intern = TRUE) no longer truncates (output) lines longer than 8192 characters, thanks to Karl Millar. (PR#16544)
  • rank() gains a ties.method = "last" option, for convenience (and symmetry).
  • regmatches(invert = NA) can now be used to extract both non-matched and matched substrings.
  • data.frame() gains argument fix.empty.names; as.data.frame.list() gets new cut.names, col.names and fix.empty.names.
  • plot(x ~ x, *) now warns that it is the same as plot(x ~ 1, *).
  • recordPlot() has new arguments load and attach to allow package names to be stored as part of a recorded plot. replayPlot() has new argument reloadPkgs to load/attach any package names that were stored as part of a recorded plot.
  • S4 dispatch works within calls to .Internal(). This means explicit S4 generics are no longer needed for unlist() and as.vector().
  • Only font family names starting with "Hershey" (and not "Her" as before) are given special treatment by the graphics engine.
  • S4 values are automatically coerced to vector (via as.vector) when subassigned into atomic vectors.
  • findInterval() gets a left.open option.
  • The version of LAPACK included in the sources has been updated to 3.6.0, including those 'deprecated' routines which were previously included. _Ca_ 40 double-complex routines have been added at the request of a package maintainer.
  • As before, the details of what is included are in src/modules/lapack/README and this now gives information on earlier additions.
  • tapply() has been made considerably more efficient without changing functionality, thanks to proposals from Peter Haverty and Suharto Anggono. (PR#16640)
  • match.arg(arg) (the one-argument case) is faster; so is sort.int(). (PR#16640)
  • The format method for object_size objects now also accepts "binary" units such as "KiB" and e.g., "Tb". (Partly from PR#16649.)
  • Profiling now records calls of the form foo::bar and some similar cases directly rather than as calls to . Contributed by Winston Chang.
  • New string utilities startsWith(x, prefix) and endsWith(x, suffix). Also provide speedups for some grepl("^...",*) uses (related to proposals in PR#16490).
  • Reference class finalizers run at exit, as well as on garbage collection.
  • Avoid parallel dependency on stats for port choice and random number seeds. (PR#16668)
  • The radix sort algorithm and implementation from data.table (forder) replaces the previous radix (counting) sort and adds a new method for order(). Contributed by Matt Dowle and Arun Srinivasan, the new algorithm supports logical, integer (even with large values), real, and character vectors. It outperforms all other methods, but there are some caveats (see ?sort).
  • The order() function gains a method argument for choosing between "shell" and "radix".
  • New function grouping() returns a permutation that stably rearranges data so that identical values are adjacent. The return value includes extra partitioning information on the groups. The implementation came included with the new radix sort.
  • rhyper(nn, m, n, k) no longer returns NA when one of the three parameters exceeds the maximal integer.
  • switch() now warns when no alternatives are provided.
  • parallel::detectCores() now has default logical = TRUE on all platforms - as this was the default on Windows, this change only affects Sparc Solaris.
  • Option logical = FALSE is now supported on Linux and recent versions of OS X (for the latter, thanks to a suggestion of Kyaw Sint).
  • hist() for "Date" or "POSIXt" objects would sometimes give misleading labels on the breaks, as they were set to the day before the start of the period being displayed. The display format has been changed, and the shift of the start day has been made conditional on right = TRUE (the default). (PR#16679)
  • R now uses a new version of the logo (donated to the R Foundation by RStudio). It is defined in .svg format, so will resize without unnecessary degradation when displayed on HTML pages-there is also a vector PDF version. Thanks to Dirk Eddelbuettel for producing the corresponding X11 icon.
  • New function .traceback() returns the stack trace which traceback() prints.
  • lengths() dispatches internally.
  • dotchart() gains a pt.cex argument to control the size of points separately from the size of plot labels. Thanks to Michael Friendly and Milan Bouchet-Valat for ideas and patches.
  • as.roman(ch) now correctly deals with more diverse character vectors ch; also arithmetic with the resulting roman numbers works in more cases. (PR#16779)
  • prcomp() gains a new option rank. allowing to directly aim for less than min(n,p) PC's. The summary() and its print() method have been amended, notably for this case.
  • gzcon() gains a new option text, which marks the connection as text-oriented (so e.g. pushBack() works). It is still always opened in binary mode.
  • The import() namespace directive now accepts an argument except which names symbols to exclude from the imports. The except expression should evaluate to a character vector (after substituting symbols for strings). See Writing R Extensions.
  • New convenience function Rcmd() in package tools for invoking R CMD tools from within R.
  • New functions makevars_user() and makevars_site() in package tools to determine the location of the user and site specific Makevars files for customizing package compilation.
  • UTILITIES:
  • R CMD check has a new option --ignore-vignettes for use with non-Sweave vignettes whose VignetteBuilder package is not available.
  • R CMD check now by default checks code usage (_via_ codetools) with only the base package attached. Functions from default packages other than base which are used in the package code but not imported are reported as undefined globals, with a suggested addition to the NAMESPACE file.
  • R CMD check --as-cran now also checks DOIs in package CITATION and Rd files.
  • R CMD Rdconv and R CMD Rd2pdf each have a new option --RdMacros=pkglist which allows Rd macros to be specified before processing.
  • DEPRECATED AND DEFUNCT:
  • The previously included versions of zlib, bzip2, xz and PCRE have been removed, so suitable external (usually system) versions are required (see the 'R Installation and Administration' manual).
  • The unexported and undocumented Windows-only devices cairo_bmp(), cairo_png() and cairo_tiff() have been removed. (These devices should be used as e.g. bmp(type = "cairo").)
  • (Windows only) Function setInternet2() has no effect and will be removed in due course. The choice between methods "internal" and "wininet" is now made by the method arguments of url() and download.file() and their defaults can be set _via_ options. The out-of-the-box default remains "wininet" (as it has been since R 3.2.2).

New in R for Mac 3.2.5 (Apr 16, 2016)

  • BUG FIXES:
  • format.POSIXlt() behaved incorrectly in R 3.2.4. E.g. the output of format(as.POSIXlt(paste0(1940:2000,"-01-01"), tz = "CET"), usetz = TRUE) ended in two "CEST" time formats.
  • A typo in the Makefile for src/extra/xz prevented builds of liblzma.a. (Notice that this will become unbundled in 3.3.0.)

New in R for Mac 3.2.4 (Mar 14, 2016)

  • NEW FEATURES:
  • install.packages() and related functions now give a more informative warning when an attempt is made to install a base package.
  • summary(x) now prints with less rounding when x contains infinite values. (Request of PR#16620.)
  • provideDimnames() gets an optional unique argument.
  • shQuote() gains type = "cmd2" for quoting in cmd.exe in Windows. (Response to PR#16636.)
  • The data.frame method of rbind() gains an optional argument stringsAsFactors (instead of only depending on getOption("stringsAsFactors")).
  • smooth(x, *) now also works for long vectors.
  • tools::texi2dvi() has a workaround for problems with the texi2dvi script supplied by texinfo 6.1. It extracts more error messages from the LaTeX logs when in emulation mode.
  • UTILITIES:
  • R CMD check will leave a log file build_vignettes.log from the re-building of vignettes in the .Rcheck directory if there is a problem, and always if environment variable _R_CHECK_ALWAYS_LOG_VIGNETTE_OUTPUT_ is set to a true value.
  • DEPRECATED AND DEFUNCT:
  • Use of SUPPORT_OPENMP from header Rconfig.h is deprecated in favour of the standard OpenMP define _OPENMP.
  • (This has been the recommendation in the manual for a while now.)
  • The make macro AWK which is long unused by R itself but recorded in file etc/Makeconf is deprecated and will be removed in R 3.3.0.
  • The C header file S.h is no longer documented: its use should be replaced by R.h.
  • BUG FIXES:
  • kmeans(x, centers = ) now works. (PR#16623)
  • Vectorize() now checks for clashes in argument names. (PR#16577)
  • file.copy(overwrite = FALSE) would signal a successful copy when none had taken place. (PR#16576)
  • ngettext() now uses the same default domain as gettext(). (PR#14605)
  • array(.., dimnames = *) now warns about non-list dimnames and, from R 3.3.0, will signal the same error for invalid dimnames as matrix() has always done.
  • addmargins() now adds dimnames for the extended margins in all cases, as always documented.
  • heatmap() evaluated its add.expr argument in the wrong environment. (PR#16583)
  • require() etc now give the correct entry of lib.loc in the warning about an old version of a package masking a newer required one.
  • The internal deparser did not add parentheses when necessary, e.g. before [] or [[]]. (Reported by Lukas Stadler; additional fixes included as well).
  • as.data.frame.vector(*, row.names=*) no longer produces 'corrupted' data frames from row names of incorrect length, but rather warns about them. This will become an error.
  • url connections with method = "libcurl" are destroyed properly. (PR#16681)
  • withCallingHandler() now (again) handles warnings even during S4 generic's argument evaluation. (PR#16111)
  • deparse(..., control = "quoteExpressions") incorrectly quoted empty expressions. (PR#16686)
  • format()ting datetime objects ("POSIX[cl]?t") could segfault or recycle wrongly. (PR#16685)
  • plot.ts(, las = 1) now does use las.
  • saveRDS(*, compress = "gzip") now works as documented. (PR#16653)
  • (Windows only) The Rgui front end did not always initialize the console properly, and could cause R to crash. (PR#16998)
  • dummy.coef.lm() now works in more cases, thanks to a proposal by Werner Stahel (PR#16665). In addition, it now works for multivariate linear models ("mlm", manova) thanks to a proposal by Daniel Wollschlaeger.
  • The as.hclust() method for "dendrogram"s failed often when there were ties in the heights.
  • reorder() and midcache.dendrogram() now are non-recursive and hence applicable to somewhat deeply nested dendrograms, thanks to a proposal by Suharto Anggono in PR#16424.
  • cor.test() now calculates very small p values more accurately (affecting the result only in extreme not statistically relevant cases). (PR#16704)
  • smooth(*, do.ends=TRUE) did not always work correctly in R versions between 3.0.0 and 3.2.3.
  • pretty(D) for date-time objects D now also works well if range(D) is (much) smaller than a second. In the case of only one unique value in D, the pretty range now is more symmetric around that value than previously.
  • Similarly, pretty(dt) no longer returns a length 5 vector with duplicated entries for Date objects dt which span only a few days.
  • The figures in help pages such as ?points were accidentally damaged, and did not appear in R 3.2.3. (PR#16708)
  • available.packages() sometimes deleted the wrong file when cleaning up temporary files. (PR#16712)
  • The X11() device sometimes froze on Red Hat Enterprise Linux 6. It now waits for MapNotify events instead of Expose events, thanks to Siteshwar Vashisht. (PR#16497)
  • [dpqr]nbinom(*, size=Inf, mu=.) now works as limit case, for 'dpq' as the Poisson. (PR#16727) pnbinom() no longer loops infinitely in border cases.
  • approxfun(*, method="constant") and hence ecdf() which calls the former now correctly "predict" NaN values as NaN.
  • summary.data.frame() now displays NAs in Date columns in all cases. (PR#16709)

New in R for Mac 3.2.3 (Dec 11, 2015)

  • NEW FEATURES:
  • Some recently-added Windows time zone names have been added to the conversion table used to convert these to Olson names. (Including those relating to changes for Russia in Oct 2014, as in PR#16503.)
  • (Windows) Compatibility information has been added to the manifests for Rgui.exe, Rterm.exe and Rscript.exe. This should allow win.version() and Sys.info() to report the actual Windows version up to Windows 10.
  • Windows "wininet" FTP first tries EPSV / PASV mode rather than only using active mode (reported by Dan Tenenbaum).
  • which.min(x) and which.max(x) may be much faster for logical and integer x and now also work for long vectors.
  • The 'emulation' part of tools::texi2dvi() has been somewhat enhanced, including supporting quiet = TRUE. It can be selected by texi2dvi = "emulation".
  • (Windows) MiKTeX removed its texi2dvi.exe command in Sept 2015: tools::texi2dvi() tries texify.exe if it is not found.
  • (Windows only) Shortcuts for printing and saving have been added to menus in Rgui.exe. (Request of PR#16572.)
  • loess(..., iterTrace=TRUE) now provides diagnostics for robustness iterations, and the print() method for summary() shows slightly more.
  • The included version of PCRE has been updated to 8.38, a bug-fix release.
  • View() now displays nested data frames in a more friendly way. (Request with patch in PR#15915.)
  • INSTALLATION and INCLUDED SOFTWARE:
  • The included configuration code for libintl has been updated to that from gettext version 0.19.5.1 - this should only affect how an external library is detected (and the only known instance is under OpenBSD). (Wish of PR#16464.)
  • configure has a new argument --disable-java to disable the checks for Java.
  • The configure default for MAIN_LDFLAGS has been changed for the FreeBSD, NetBSD and Hurd OSes to one more likely to work with compilers other than gcc (FreeBSD 10 defaults to clang).
  • configure now supports the OpenMP flags -fopenmp=libomp (clang) and -qopenmp (Intel C).
  • Various macros can be set to override the default behaviour of configure when detecting OpenMP: see file config.site.
  • Source installation on Windows has been modified to allow for MiKTeX installations without texi2dvi.exe. See file MkRules.dist.
  • BUG FIXES:
  • regexpr(pat, x, perl = TRUE) with Python-style named capture did not work correctly when x contained NA strings. (PR#16484)
  • The description of dataset ToothGrowth has been improved/corrected. (PR#15953)
  • model.tables(type = "means") and hence TukeyHSD() now support "aov" fits without an intercept term. (PR#16437)
  • close() now reports the status of a pipe() connection opened with an explicit open argument. (PR#16481)
  • Coercing a list without names to a data frame is faster if the elements are very long. (PR#16467)
  • (Unix-only) Under some rare circumstances piping the output from Rscript or R -f could result in attempting to close the input file twice, possibly crashing the process. (PR#16500)
  • (Windows) Sys.info() was out of step with win.version() and did not report Windows 8.
  • topenv(baseenv()) returns baseenv() again as in R 3.1.0 and earlier. This also fixes compilerJIT(3) when used in .Rprofile.
  • detach()ing the methods package keeps .isMethodsDispatchOn() true, as long as the methods namespace is not unloaded.
  • Removed some spurious warnings from configure about the preprocessor not finding header files. (PR#15989)
  • rchisq(*, df=0, ncp=0) now returns 0 instead of NaN, and dchisq(*, df=0, ncp=*) also no longer returns NaN in limit cases (where the limit is unique). (PR#16521)
  • pchisq(*, df=0, ncp > 0, log.p=TRUE) no longer underflows (for ncp > ~60).
  • nchar(x, "w") returned -1 for characters it did not know about (e.g. zero-width spaces): it now assumes 1. It now knows about most zero-width characters and a few more double-width characters.
  • Help for which.min() is now more precise about behavior with logical arguments. (PR#16532)
  • The print width of character strings marked as "latin1" or "bytes" was in some cases computed incorrectly.
  • abbreviate() did not give names to the return value if minlength was zero, unlike when it was positive.
  • (Windows only) dir.create() did not always warn when it failed to create a directory. (PR#16537)
  • When operating in a non-UTF-8 multibyte locale (e.g. an East Asian locale on Windows), grep() and related functions did not handle UTF-8 strings properly. (PR#16264)
  • read.dcf() sometimes misread lines longer than 8191 characters. (Reported by Herv'e Pag`es with a patch.)
  • within(df, ..) no longer drops columns whose name start with a ".".
  • The built-in HTTP server converted entire Content-Type to lowercase including parameters which can cause issues for multi-part form boundaries (PR#16541).
  • Modifying slots of S4 objects could fail when the methods package was not attached. (PR#16545)
  • splineDesign(*, outer.ok=TRUE) (splines) is better now (PR#16549), and interpSpline() now allows sparse=TRUE for speedup with non-small sizes.
  • If the expression in the traceback was too long, traceback() did not report the source line number. (Patch by Kirill M"uller.)
  • The browser did not truncate the display of the function when exiting with options("deparse.max.lines") set. (PR#16581)
  • When bs(*, Boundary.knots=) had boundary knots inside the data range, extrapolation was somewhat off. (Patch by Trevor Hastie.)
  • var() and hence sd() warn about factor arguments which are deprecated now. (PR#16564)
  • loess(*, weights = *) stored wrong weights and hence gave slightly wrong predictions for newdata. (PR#16587)
  • aperm(a, *) now preserves names(dim(a)).
  • poly(x, ..) now works when either raw=TRUE or coef is specified. (PR#16597)
  • data(package=*) is more careful in determining the path.
  • prettyNum(*, decimal.mark, big.mark): fixed bug introduced when fixing PR#16411.

New in R for Mac 3.2.2 (Aug 16, 2015)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • It is now easier to use secure downloads from https:// URLs on builds which support them: no longer do non-default options need to be selected to do so. In particular, packages can be installed from repositories which offer https:// URLs, and those listed by setRepositories() now do so (for some of their mirrors).
  • Support for https:// URLs is available on Windows, and on other platforms if support for libcurl was compiled in and if that supports the https protocol (system installations can be expected to do). So https:// support can be expected except on rather old OSes (an example being OS X ‘Snow Leopard’, where a non-system version of libcurl can be used).
  • (Windows only) The default method for accessing URLs via download.file() and url() has been changed to be "wininet" using Windows API calls. This changes the way proxies need to be set and security settings made: there have been some reports of sites being inaccessible under the new default method (but the previous methods remain available).
  • NEW FEATURES:
  • cmdscale() gets new option list. for increased flexibility when a list should be returned.
  • configure now supports texinfo version 6.0, which (unlike the change from 4.x to 5.0) is a minor update. (Wish of PR#16456.)
  • (Non-Windows only) download.file() with default method = "auto" now chooses "libcurl" if that is available and a https:// or ftps:// URL is used.
  • (Windows only) setInternet2(TRUE) is now the default. The command-line option --internet2 and environment variable R_WIN_INTERNET2 are now ignored.
  • Thus by default the "internal" method for download.file() and url() uses the "wininet" method: to revert to the previous default use setInternet2(FALSE).
  • This means that https:// can be read by default by download.file() (they have been readable by file() and url() since R 3.2.0).
  • There are implications for how proxies need to be set (see ?download.file): also, cacheOK = FALSE is not supported.
  • chooseCRANmirror() and chooseBioCmirror() now offer HTTPS mirrors in preference to HTTP mirrors. This changes the interpretation of their ind arguments: see their help pages.
  • capture.output() gets optional arguments type and split to pass to sink(), and hence can be used to capture messages.
  • C-LEVEL FACILITIES:
  • Header ‘Rconfig.h’ now defines HAVE_ALLOCA_H if the platform has the ‘alloca.h’ header (it is needed to define alloca on Solaris and AIX, at least: see ‘Writing R Extensions’ for how to use it).
  • INSTALLATION and INCLUDED SOFTWARE:
  • The libtool script generated by configure has been modified to support FreeBSD >= 10 (PR#16410).
  • BUG FIXES:
  • The HTML help page links to demo code failed due to a change in R 3.2.0. (PR#16432)
  • If the na.action argument was used in model.frame(), the original data could be modified. (PR#16436)
  • getGraphicsEvent() could cause a crash if a graphics window was closed while it was in use. (PR#16438)
  • matrix(x, nr, nc, byrow = TRUE) failed if x was an object of type "expression".
  • strptime() could overflow the allocated storage on the C stack when the timezone had a non-standard format much longer than the standard formats. (Part of PR#16328.)
  • options(OutDec = s) now signals a warning (which will become an error in the future) when s is not a string with exactly one character, as that has been a documented requirement.
  • prettyNum() gains a new option input.d.mark which together with other changes, e.g., the default for decimal.mark, fixes some format()ting variants with non-default getOption("OutDec") such as in PR#16411.
  • download.packages() failed for type equal to either "both" or "binary". (Reported by Dan Tenenbaum.)
  • The dendrogram method of labels() is much more efficient for large dendrograms, now using rapply(). (Comment #15 of PR#15215)
  • The "port" algorithm of nls() could give spurious errors. (Reported by Radford Neal.)
  • Reference classes that inherited from reference classes in another package could invalidate methods of the inherited class. Fixing this requires adding the ability for methods to be “external”, with the object supplied explicitly as the first argument, named .self. See "Inter-Package Superclasses" in the documentation.
  • readBin() could fail on the SPARC architecture due to alignment issues. (Reported by Radford Neal.)
  • qt(*, df=Inf, ncp=.) now uses the natural qnorm() limit instead of returning NaN. (PR#16475)
  • Auto-printing of S3 and S4 values now searches for print() in the base namespace and show() in the methods namespace instead of searching the global environment.
  • polym() gains a coefs = NULL argument and returns class "poly" just like poly() which gets a new simple=FALSE option. They now lead to correct predict()ions, e.g., on subsets of the original data.
  • rhyper(nn, ) now works correctly. (PR#16489)
  • ttkimage() did not (and could not) work so was removed. Ditto for tkimage.cget() and tkimage.configure(). Added two Ttk widgets and missing subcommands for Tk's image command: ttkscale(), ttkspinbox(), tkimage.delete(), tkimage.height(), tkimage.inuse(), tkimage.type(), tkimage.types(), tkimage.width(). (PR#15372, PR#16450)
  • getClass("foo") now also returns a class definition when it is found in the cache more than once.

New in R for Mac 3.2.1 (Jun 19, 2015)

  • NEW FEATURES:
  • utf8ToInt() now checks that its input is valid UTF-8 and returns NA if it is not.
  • install.packages() now allows type = "both" with repos = NULL if it can infer the type of file.
  • nchar(x, *) and nzchar(x) gain a new argument keepNA which governs how the result for NAs in x is determined. For the R 3.2.x series, the default remains FALSE which is fully back compatible. From R 3.3.0, the default will change to keepNA = NA and you are advised to consider this for code portability.
  • news() more flexibly extracts dates from package ‘NEWS.Rd’ files.
  • lengths(x) now also works (trivially) for atomic x and hence can be used more generally as an efficient replacement of sapply(x, length) and similar.
  • The included version of PCRE has been updated to 8.37, a bug-fix release.
  • diag() no longer duplicates a matrix when extracting its diagonal.
  • as.character.srcref() gains an argument to allow characters corresponding to a range of source references to be extracted.
  • BUG FIXES:
  • acf() and ccf() now guarantee values strictly in [-1,1] (instead of sometimes very slightly outside). PR#15832.
  • as.integer("111111111111") now gives NA (with a warning) as it does for the corresponding numeric or negative number coercions. Further, as.integer(M + 0.1) now gives M (instead of NA) when M is the maximal representable integer.
  • On some platforms nchar(x, "c") and nchar(x, "w") would return values (possibly NA) for inputs which were declared to be UTF-8 but were not, or for invalid strings without a marked encoding in a multi-byte locale, rather than give an error. Additional checks have been added to mitigate this.
  • apply(a, M, function(u) c(X = ., Y = .)) again has dimnames containing "X" and "Y" (as in R < 3.2.0).
  • (Windows only) In some cases, the --clean option to R CMD INSTALL could fail. (PR#16178)
  • (Windows only) choose.files() would occasionally include characters from the result of an earlier call in the result of a later one. (PR#16270)
  • A change in RSiteSearch() in R 3.2.0 caused it to submit invalid URLs. (PR#16329)
  • Rscript and command line R silently ignored incomplete statements at the end of a script; now they are reported as parse errors. (PR#16350)
  • Parse data for very long strings was not stored. (PR#16354)
  • plotNode(), the workhorse of the plot method for "dendrogram"s is no longer recursive, thanks to Suharto Anggono, and hence also works for deeply nested dendrograms. (PR#15215)
  • The parser could overflow internally when given numbers in scientific format with extremely large exponents. (PR#16358)
  • If the CRAN mirror was not set, install.packages(type = "both") and related functions could repeatedly query the user for it. (Part of PR#16362)
  • The low-level functions .rowSums() etc. did not check the length of their argument, so could segfault. (PR#16367)
  • The quietly argument of library() is now correctly propagated from .getRequiredPackages2().
  • Under some circumstances using the internal PCRE when building R fron source would cause external libs such as -llzma to be omitted from the main link.
  • The .Primitive default methods of the logic operators, i.e., !, & and |, now give correct error messages when appropriate, e.g., for `&`(TRUE) or `!`(). (PR#16385)
  • cummax(x) now correctly propagates NAs also when x is of type integer and begins with an NA.
  • summaryRprof() could fail when the profile contained only two records. (PR#16395)
  • HTML vignettes opened using vignette() did not support links into the rest of the HTML help system. (Links worked properly when the vignette was opened using browseVignettes() or from within the help system.)
  • arima(*, xreg = .) (for d >= 1) computes estimated variances based on a the number of effective observations as in R version 3.0.1 and earlier. (PR#16278)
  • slotNames(.) is now correct for "signature" objects (mostly used internally in methods).
  • On some systems, the first string comparison after a locale change would result in NA.

New in R for Mac 3.2.0 (Apr 20, 2015)

  • anyNA() gains a recursive argument.
  • When x is missing and names is not false (including the default value), Sys.getenv(x, names) returns an object of class "Dlist" and hence prints tidily.
  • (Windows.) shell() no longer consults the environment variable SHELL: too many systems have been encountered where it was set incorrectly (usually to a path where software was compiled, not where it was installed). R_SHELL, the preferred way to select a non-default shell, can be used instead.
  • Some unusual arguments to embedFonts() can now be specified as character vectors, and the defaults have been changed accordingly.
  • Functions in the Summary group duplicate less. (PR#15798)
  • (Unix-alikes.) system(cmd, input = ) now uses ‘shell-execution-environment’ redirection, which will be more natural if cmd is not a single command (but requires a POSIX-compliant shell). (Wish of PR#15508)
  • read.fwf() and read.DIF() gain a fileEncoding argument, for convenience.
  • Graphics devices can add attributes to their description in .Device and .Devices. Several of those included with R use a "filepath" attribute.
  • pmatch() uses hashing in more cases and so is faster at the expense of using more memory. (PR#15697)
  • pairs() gains new arguments to select sets of variables to be plotted against each other.
  • file.info(, extra_cols = FALSE) allows a minimal set of columns to be computed on Unix-alikes: on some systems without properly-configured caching this can be significantly faster with large file lists.
  • New function dir.exists() in package base to test efficiently whether one or more paths exist and are directories.
  • dput() and friends gain new controls hexNumeric and digits17 which output double and complex quantities as, respectively, binary fractions (exactly, see sprintf("%a")) and as decimals with up to 17 significant digits.
  • save(), saveRDS() and serialize() now support ascii = NA which writes ASCII files using sprintf("%a") for double/complex quantities. This is read-compatible with ascii = TRUE but avoids binary->decimal->binary conversions with potential loss of precision. Unfortunately the Windows C runtime's lack of C99 compliance means that the format cannot be read correctly there in R before 3.1.2.
  • The default for formatC(decimal.mark =) has been changed to be getOption("OutDec"); this makes it more consistent with format() and suitable for use in print methods, e.g. those for classes "density", "ecdf", "stepfun" and "summary.lm".
  • getOption("OutDec") is now consulted by the print method for class "kmeans", by cut(), dendrogram(), plot.ts() and quantile() when constructing labels and for the report from legend(trace = TRUE).
  • (In part, wish of PR#15819.)
  • printNum() and hence format() and formatC() give a warning if big.mark and decimal.mark are set to the same value (period and comma are not uncommonly used for each, and this is a check that conventions have not got mixed).
  • merge() can create a result which uses long vectors on 64-bit platforms.
  • dget() gains a new argument keep.source which defaults to FALSE for speed (dput() and dget() are most often used for data objects where this can make dget() many times faster).
  • Packages may now use a file of common macro definitions in their help files, and may import definitions from other packages.
  • A number of macros have been added in the new ‘share/Rd’ directory for use in package overview help pages, and promptPackage() now makes use of them.
  • tools::parse_Rd() gains a new permissive argument which converts unrecognized macros into text. This is used by utils:::format.bibentry to allow LaTeX markup to be ignored.
  • options(OutDec =) can now specify a multi-byte character, e.g., options(OutDec = "\u00b7") in a UTF-8 locale.
  • is.recursive(x) is no longer true when x is an external pointer, a weak reference or byte code; the first enables all.equal(x, x) when x

New in R for Mac 3.1.3 (Mar 10, 2015)

  • NEW FEATURES:
  • The internal method of download.file() can now handle files larger than 2GB on 32-bit builds which support such files (tested on 32-bit R running on 64-bit Windows).
  • kruskal.test() warns on more types of suspicious input.
  • The as.dendrogram() method for "hclust" objects gains a check argument protecting against memory explosion for invalid inputs.
  • capabilities() has a new item long.double which indicates if the build uses a long double type which is longer than double.
  • nlm() no longer modifies the callback argument in place (a new vector is allocated for each invocation, which mimics the implicit duplication that occurred in R < 3.1.0); note that this is a change from the previously documented behavior. (PR#15958)
  • icuSetCollate() now accepts locale = "ASCII" which uses the basic C function strcmp and so collates strings byte-by-byte in numerical order.
  • sessionInfo() tries to report the OS version in use (not just that compiled under, and including details of Linux distributions).
  • model.frame() (used by lm() and many other modelling functions) now warns when it drops contrasts from factors. (Wish of PR#16119)
  • install.packages() and friends now accept the value type = "binary" as a synonym for the native binary type on the platform (if it has one).
  • Single source or binary files can be supplied for install.packages(type = "both") and the appropriate type and repos = NULL will be inferred.
  • New function pcre_config() to report on some of the configuration options of the version of PCRE in use. In particular, this reports if regular expressions using \p{xx} are supported.
  • (Windows.) download.file(cacheOK = FALSE) is now supported when internet2.dll is used.
  • browseURL() has been updated to work with Firefox 36.0 which has dropped support for the -remote interface.
  • INSTALLATION and INCLUDED SOFTWARE:
  • The included version of PCRE has been updated to 8.36.
  • configure accepts MAKEINFO=texi2any as another way to ensure texinfo 5.x is used when both 5.x and 4.x are installed.
  • UTILITIES:
  • R CMD check now checks the packages used in \donttest sections of the examples are specified in the DESCRIPTION file. (These are needed to run the examples interactively.)
  • R CMD check checks for the undeclared use of GNU extensions in Makefiles, and for Makefiles with a missing final linefeed.
  • R CMD build will correct line endings in all Makefiles, not just those in the src directory.
  • R CMD check notes uses of library() and require() in package code: see the section 'Suggested packages' of 'Writing R Extensions' for good practice.
  • DEPRECATED AND DEFUNCT:
  • The configure option --with-valgrind-instrumentation=3 is deprecated and will be removed in R 3.2.0.
  • BUG FIXES:
  • (Windows.) Rscript.exe was missing a manifest specifying the modern style for common controls (e.g., the download progress bar).
  • If a package had extra documentation files but no vignette, the HTML help system produced an empty index page.
  • The parser now gives an error if a null character is included in a string using Unicode escapes. (PR#16046)
  • qr.Q() failed on complex arguments due to pre-3.0(!) typo. (PR#16054)
  • abs() failed with named arguments when the argument was complex. (PR#16047)
  • "noquote" objects may now be used as columns in dataframes. (PR#15997)
  • Some values with extremely long names were printed incorrectly. (PR#15999)
  • Extremely large exponents on zero expressed in scientific notation (e.g. 0.0e50000) could give NaN. (PR#15976)
  • download.file() reported downloaded sizes as 0KB if less than 1MB, only for R 3.1.2 and only on big-endian platforms.
  • prompt() did not escape percent signs in the automatically generated usage section of help files.
  • drop.terms() dropped some of the attributes of the object it was working with. (PR#16029)
  • (Windows.) The command completion in Rgui.exe messed up the console. (PR#15791)
  • (Windows.) The choose.files() command returned a blank string when the user asked for a single file but cancelled the request. (PR#16074)
  • Math2 S4 group generics failed to correctly dispatch "structure"- and "nonStructure"-derived classes.
  • loadNamespace() imposed undocumented restrictions on the versionCheck parameter. (Reported by Geoff Lee.)
  • Rare over-runs detected by AddressSanitizer in substr() and its replacement version have been avoided.
  • _Inter alia_ that fix gives the documented behaviour for substr(x, 1, 2)

New in R for Mac 3.1.2 (Nov 10, 2014)

  • NEW FEATURES:
  • embedFonts() now defaults to format = "ps2write" for ‘.ps’ and ‘.eps’ files. This is available in Ghostscript 9.x (since 2010) whereas the previous default, format = "pswrite", was removed in Ghostscript 9.10.
  • For consistency with [dpqr]norm(), [dp]lnorm(sdlog = 0) model a point mass at exp(mulog) rather than return NaN (for an error).
  • capabilities() now reports if ICU is compiled in for use for collation (it is only actually used if a suitable locale is set for collation, and never for a C locale).
  • (OS X only.) Package tcltk checks when loaded if it is linked against the CRAN X11-based Tcl/Tk and if so that the Tcl/Tk component and the X11 libraries are installed. This allows more informative error messages to be given advising the installation of the missing component or of XQuartz.
  • The X11() device and X11-based versions of the data editor and viewer (invoked by edit() and View() for data frames and matrices from command-line R) check that the X11 libraries are installed and if not advises installing XQuartz.
  • icuSetCollate() allows locale = "default", and locale = "none" to use OS services rather than ICU for collation.
  • Environment variable R_ICU_LOCALE can be used to set the default ICU locale, in case the one derived from the OS locale is inappropriate (this is currently necessary on Windows).
  • New function icuGetCollate() to report on the ICU collation locale in use (if any).
  • utils::URLencode() was updated to use unreserved and reserved characters from RFC 3986, http://tools.ietf.org/html/rfc3986, instead of RFC 1738.
  • unique(warnings()) and c(warnings()) are now supported.
  • The Bioconductor ‘version’ used by setRepositories() now defaults to 3.0. (It can be set at runtime via environment variable R_BIOC_VERSION.)
  • INSTALLATION and INCLUDED SOFTWARE:
  • The configure script reports on the more important capabilities/options which will not be compiled in.
  • More types of external BLAS are recognized by name in that report.
  • When building R as a shared library, the -L${R_HOME}/lib${R_ARCH} flag is placed earlier in the link commands used during installation and when packages are installed: this helps ensure that the current build has priority if an R shared library has already been installed by e.g. install-libR in a library mentioned in LDFLAGS (and not in ‘your system's library directory’ as documented). (Wish of PR#15790.)
  • LaTeX package upquote is no longer required for R's use of inconsolata.
  • (Windows only) If both 32 and 64 bit versions of R are installed, the ‘bin/R.exe’ and ‘bin/Rscript.exe’ executables now run 64 bit R. (To run 32 bit R, overwrite these files with copies of ‘bin/i386/Rfe.exe’.)
  • UTILITIES:
  • Running R CMD check with _R_CHECK_DEPENDS_ONLY_ true now makes the VignetteBuilder packages available even if they are listed in Suggests, since they are needed to recognise and process non-Sweave vignettes.
  • R CMD check now reports empty importFrom declarations in a ‘NAMESPACE’ file, as these are common errors (writing importFrom(Pkg) where import(Pkg) was intended).
  • R CMD check now by default checks code usage directly on the package namespace without loading and attaching the package and its suggests and enhances. For good practice with packages in the Suggests field, see §1.1.3.1 of ‘Writing R Extensions’. For use of lazy-data objects in the package's own code, see ?data.
  • BUG FIXES:
  • dmultinom() did not handle non-finite probabilities correctly.
  • prettyNum(x, zero.print=*) now also works when x contains NAs.
  • A longstanding bug exhibited by nlminb() on Windows was traced to a compiler bug in gcc 4.6.3; a workaround has been put in place. (PR#15244 and PR#15914).
  • Rendering of \command in HTML versions of help pages has been improved: this is particularly evident on the help page for INSTALL.
  • as.hexmode(x) and as.octmode(x) now behave correctly for some numeric x, e.g., c(NA, 1) or c(1, pi).
  • drop1() failed if the scope argument had no variables to drop. (PR#15935)
  • edit() (and hence fix()) failed if an object had a non-character attribute named "source" (an attribute that had been used in R prior to version 2.14.0).
  • callGeneric() could fail if the generic had ... as a formal argument. (PR#15937).
  • Forking in package parallel called C entry point exit in the child. This was unsafe (_exit should have been called), and could flush stdin of the main R process (seen most often on Solaris).
  • As good practice, stdout is now flushed before forking a child.
  • R objects such as list(`a\b` = 1) now print correctly.
  • getAnywhere("C_pbinom") now returns correctly a single object (rather than unlisting it).
  • The confint() method for nls() fits failed it these has specified parameter limits despite using an algorithm other than "port". (PR#15960)
  • Subclassing an S4 class failed if the class required arguments to the generator, through its initialize() method.
  • removeSource() did not properly handle expressions containing arguments that were supplied as missing, e.g. x[i,]. (PR#15957)
  • as.environment(list()) now works, and as.list() of such an environment is now the same as list().
  • Several tcltk functions failed when run in unusual environments. (PR#15970)
  • options(list()) now works (trivially). (PR#15979)
  • merge(, ..) now works correctly for two ‘independent’ dendrograms (PR#15648), and still compatibly via adjust = "auto" e.g. for two branches of an existing dendrogram.
  • The plot method for "hclust" objects gets an optional argument check; When that is true (the default) it checks more carefully for valid input.
  • (Windows only) If a user chose to install 64 bit R but not 32 bit R, the ‘bin/R’ and ‘bin/Rscript’ executables failed to run. (PR#15981)
  • Various possible buffer overruns have been prevented, and missed memory protection added. (PR#15990)
  • Rscript no longer passes --args to R when there are no extra (“user”) arguments.
  • objects like getClass("refClass")@prototype now print() and str() without error.
  • identical() now also looks at the S4 bit.
  • hist(x, breaks) is more robust in adding a small fuzz to few breaks when some are very large. (PR#15988)
  • sub() and gsub() did not handle regular expressions like "\s{2,}" properly if the text contained NA or non-ascii elements in a UTF-8 locale. Part of this was due to a bug in the TRE library. (PR#16009)
  • RShowDoc("NEWS") now displays the PDF version.
  • Matrices and arrays with last dimension zero did not print at all or incompletely. (PR#16012)
  • plot.histogram() and hence hist() now respect the xaxs, yaxs and lab graphics parameters. (PR#16021)
  • bw.SJ(x) and other bw.*() no longer segfault when x contains non-finite values. (PR#16024)
  • R CMD Rd2pdf unintentionally ignored its --os option.
  • The internal method of download.file() was not reporting file sizes and progress correctly on files larger than 2GB (inherited from libxml2). This is corrected for 64-bit builds (32-bit platforms may not support such files, but where possible will be supported in future versions of R).
  • Work around a bug in OS X Yosemite where key environment variables may be duplicated causing issues in subprocesses. The duplicates are now removed on R startup (via Rprofile). (PR#16042)
  • Adjust X11 auto-launch detection in DISPLAY on OS X to recognize latest XQuartz.

New in R for Mac 3.1.1 (Jul 14, 2014)

  • NEW FEATURES:
  • When attach() reports conflicts, it does so compatibly with library() by using message().
  • R CMD Sweave no longer cleans any files by default, compatibly with versions of R prior to 3.1.0. There are new options --clean, --clean=default and --clean=keepOuts.
  • tools::buildVignette() and tools::buildVignettes() with clean = FALSE no longer remove any created files. buildvignette() gains a keep argument for more cleaning customization.
  • The Bioconductor 'version' used by setRepositories() can now be set by environment variable R_BIOC_VERSION at runtime, not just when R is installed. (It has been stated that Bioconductor will switch from 'version' 2.14 to 'version' 3.0 during the lifetime of the R 3.1 series.)
  • Error messages from bugs in embedded Sexpr code in Sweave documents now report the source location.
  • type.convert(), read.table() and similar read.*() functions get a new numerals argument, specifying how numeric input is converted when its conversion to double precision loses accuracy. The default value, "allow.loss" allows accuracy loss, as in R versions before 3.1.0.
  • For some compilers, integer addition could overflow without a warning. R's internal code for both integer addition and subtraction is more robust now. (PR#15774)
  • The function determining the default number of knots for smooth.spline() is now exported, as .nknots.smspl().
  • dbeta(, a,b), pbeta(), qbeta() and rbeta() are now defined also for a = 0, b = 0, or infinite a and b (where they typically returned NaN before).
  • Many package authors report that the RStudio graphics device does not work correctly with their package's use of dev.new(). The new option dev.new(noRStudioGD = TRUE) replaces the RStudio override by the default device as selected by R itself, still respecting environment variables R_INTERACTIVE_DEVICE and R_DEFAULT_DEVICE.
  • readRDS() now returns visibly.
  • Modifying internal logical scalar constants now results in an error instead of a warning.
  • install.packages(repos = NULL) now accepts http:// or ftp:// URLs of package archives as well as file paths, and will download as required. In most cases repos = NULL can be deduced from the extension of the URL.
  • The warning when using partial matching with the $ operator on data frames is now only given when options("warnPartialMatchDollar") is TRUE.
  • Package help requests like package?foo now try the package foo whether loaded or not.
  • General help requests now default to trying all loaded packages, not just those on the search path.
  • Added a new function promptImport(), to generate a help page for a function that was imported from another package (and presumably re-exported, or help would not be needed).
  • INSTALLATION and INCLUDED SOFTWARE:
  • configure option --with-internal-tzcode can now be used with variable rsharedir.
  • The included version of PCRE has been updated to 8.35.
  • There is a new target make uninstall-libR to remove an installed shared/static libR.
  • make install-libR now works if a sub-architecture is used, although the user will need to specify libdir differently for different sub-architectures.
  • There is more extensive advice on which LaTeX packages are required to install R or to make package manuals (as done by R CMD check) in the 'Writing R Extensions' manual.
  • Compilers/linkers were handling the visibility controls in src/extra/xz inconsistently (and apparently in some cases incorrectly), so it has been simplified. (PR#15327)
  • (Windows) There is updated support for the use of ICU for collation: see the 'R Installation and Administration Manual'.
  • BUG FIXES:
  • dbinom(x, n), pbinom(), dpois(), etc, are slightly less restrictive in checking if n is integer-valued. (Wish of PR#15734.)
  • pchisq(x, df, ncp, log.p = TRUE) is more accurate and no longer underflows for small x and ncp < 80, e.g, for pchisq(1e-5, df = 100, ncp = 1, log = TRUE). (Based on PR#15635 and a suggestion by Roby Joehanes.)
  • The s ("step into") command in the debugger would cause R to step into expressions evaluated there, not just into functions being debugged. (PR#15770)
  • The C code used by strptime() rejected time-zone offsets of more than +1200 (+1245, +1300 and +1400 can occur). (PR#15768)
  • (Windows only.) png(type = "cairo", antialias = "gray") was not accepted. (PR#15760)
  • Use of save(..., envir=) with named objects could fail. (PR#15758)
  • Sweave() mis-parsed Sexpr expressions that contained backslashes. (PR#15779)
  • The return value from options(foo = NULL) was not the previous value of the option. (PR#15781)
  • enc2utf8() and enc2native() did not always mark the encoding of the return values when it was known.
  • dnbinom(x, size = , mu, log = TRUE) no longer underflows to -Inf for large mu, thanks to a suggestion from Alessandro Mammana (MPI MolGen, Berlin).
  • pbeta(x, a, b, log = TRUE) no longer behaves discontinuously (in a small x-region) because of denormalized numbers. Also, pbeta(1-1e-12, 1e30, 1.001, log=TRUE) now terminates "in real time".
  • The "CRAN" filter (see available.packages()) no longer removes duplicates other than of packages on CRAN, and does not fail if there is no CRAN repository in getOption("repos").
  • The device listing from dev2bitmap() and bitmap() was truncated to 1000 characters: modern versions of GhostScript on most platforms have many more devices.
  • (Windows.) Commands such as Sys.which() and pipe() which needed to find the full path to a command could segfault if the 'long' path name was much longer than the 'short' path name (which Sys.which() returns), as the behaviour of the Windows API call had changed.
  • R CMD build will fail with an error if one of the packages specified in the VignetteBuilder field is not installed. (Without loading those packages it cannot be ascertained which files are intended to be vignettes. This means that the VignetteBuilder packages have to be installed for package checking too.) (Wish of PR#15775.)
  • Misguided attempts to use chull() with non-finite points now give an error (related to PR#15777).
  • For a formula with exactly 32 variables the 32nd variable was aliased to the intercept in some C-level computations of terms, so that for example attempting to remove it would remove the intercept instead (and leave a corrupt internal structure). (PR#15735)
  • anyDuplicated() silently returned wrong values when the first duplicate was at an index which was too large to be stored in an integer vector (although a lot of RAM and patience would have been needed to encounter this).
  • tools::Rd2ex(commentDontrun = FALSE) failed if the block had only one line.
  • Hexadecimal constants such as 0x110p-5L which were incorrectly qualified by L were parsed incorrectly since R 3.0.0, with a slightly garbled warning. (PR#15753)
  • system() returned success on some platforms even if the system was unable to launch a process. (PR#15796)
  • (Windows Rgui console.) Unbuffered output was sometimes not output immediately if the prompt was not on the last line of the console.
  • The built-in help server did not declare the encoding for the DESCRIPTION or other text files to be the package encoding, so non-ASCII characters could be displayed incorrectly.
  • R is now trying harder to not cleanup child processes that were not spawned by mcparallel() on platforms that provide information about the source process of the SIGCHLD signal. This allows 3rd party libraries to manage the exit status of children that they spawn without R interfering.
  • mcmapply() was only parallelizing if the number of jobs was bigger than the number of cores. It now parallelizes if the number of jobs is more than one.
  • Auto-printing would re-evaluate its argument when trying to dispatch to a print method. This is now avoided when possible.
  • Unserializing (including load() and readRDS()) could silently return incorrect numeric values from ASCII saves if there was a read error.
  • getParseData() could return incorrect values for the parents of some elements. (Reported by Andrew Redd.)
  • Attempting to use data frames of 2^31 or more rows with merge() or to create a merged data frame of that size now gives a clearer error message.
  • parse() did not check its file argument was a connection if it was not a character string, so e.g. parse(FALSE) attempted to read from stdin.
  • Nor did dump() and dput().
  • The "help.try.all.packages" option was ignored when the shortcut syntax for help was used, e.g. ?foo.
  • A potential segfault in string allocation has been fixed. (Found by Radford Neal.)
  • Potential memory protection errors in sort() and D() have been fixed. (Found by Radford Neal.)
  • Fixed a lack of error checking in graphics event functions. (Found by Radford Neal; a different patch used here than the one in pqR.)
  • numericDeriv() sometimes miscalculated the gradient. (PR#15849, reported originally by Radford Neal)

New in R for Mac 3.1.0 (Apr 12, 2014)

  • NEW FEATURES:
  • type.convert() (and hence by default read.table()) returns a character vector or factor when representing a numeric input as a double would lose accuracy. Similarly for complex inputs.
  • If a file contains numeric data with unrepresentable numbers of decimal places that are intended to be read as numeric, specify colClasses in read.table() to be "numeric".
  • tools::Rdiff(useDiff = FALSE) is closer to the POSIX definition of diff -b (as distinct from the description in the man pages of most systems).
  • New function anyNA(), a version of any(is.na(.)) which is fast for atomic vectors, based on a proposal by Tim Hesterberg. (Wish of PR#15239.)
  • arrayInd(*, useNames = TRUE) and, analogously, which(*, arr.ind = TRUE) now make use of names(.dimnames) when available.
  • is.unsorted() now also works for raw vectors.
  • The "table" method for as.data.frame() (also useful as as.data.frame.table()) now passes sep and base arguments to provideDimnames().
  • uniroot() gets new optional arguments, notably extendInt, allowing to auto-extend the search interval when needed. The return value has an extra component, init.it.
  • switch(f, ...) now warns when f is a factor, as this typically happens accidentally where the useR meant to pass a character string, but f is treated as integer (as always documented).
  • The parser has been modified to use less memory.
  • The way the unary operators (+ - !) handle attributes is now more consistent. If there is no coercion, all attributes (including class) are copied from the input to the result: otherwise only names, dims and dimnames are.
  • colorRamp() and colorRampPalette() now allow non-opaque colours and a ramp in opacity via the new argument alpha = TRUE. (Suggested by Alberto Krone-Martins, but optionally as there are existing uses which expect only RGB values.)
  • grid.show.layout() and grid.show.viewport() get an optional vp.ex argument.
  • There is a new function find_gs_cmd() in the tools package to locate a GhostScript executable. (This is an enhanced version of a previously internal function there.)
  • object.size() gains a format() method.
  • There is a new family, "ArialMT", for the pdf() and postscript() devices. This will only be rendered correctly on viewers which have access to Monotype TrueType fonts (which are sometimes requested by journals).
  • The text and PDF news files, including NEWS and NEWS.2, have been moved to the doc directory.
  • combn(x, simplify = TRUE) now gives a factor result for factor input x (previously user error). (Related to PR#15442.)
  • Added utils::fileSnapshot() and utils::changedFiles() functions to allow snapshots and comparison of directories of files.
  • make.names(names, unique=TRUE) now tries to preserve existing names. (Suggestion of PR#15452.)
  • New functions cospi(x), sinpi(x), and tanpi(x), for more accurate computation of cos(pi*x), etc, both in R and the C API. Using these gains accuracy in some cases, e.g., inside lgamma() or besselI(). (Suggested by Morten Welinder in PR#15529.)
  • print.table(x, zero.print = ".") now also has an effect when x is not integer-valued.
  • There is more support to explore the system's idea of time-zone names. Sys.timezone() tries to give the current system setting by name (and succeeds at least on Linux, OS X, Solaris and Windows), and OlsonNames() lists the names in the system's Olson database. Sys.timezone(location = FALSE) gives the previous behaviour.
  • Platforms with a 64-bit time_t type are allowed to handle conversions between the "POSIXct" and "POSIXlt" classes for date-times outside the 32-bit range (before 1902 or after 2037): the existing workarounds are used on other platforms. (Note that time-zone information for post-2037 is speculative at best, and the OS services are tested for known errors and so not used on OS X.)
  • Currently time_t is usually long and hence 64-bit on Unix-alike 64-bit platforms: however it several cases the time-zone database is 32-bit. On R for Windows it is 64-bit (for both architectures as from this version).
  • The "save.defaults" option can include a value for compression_level. (Wish of PR#15579.)
  • colSums() and friends now have support for arrays and data-frame columns with 2^31 or more elements.
  • as.factor() is faster when f is an unclassed integer vector (for example, when called from tapply()).
  • fft() now works with longer inputs, from the 12 million previously supported up to 2 billion. (PR#15593)
  • Complex svd() now uses LAPACK subroutine ZGESDD, the complex analogue of the routine used for the real case.
  • Sweave now outputs .tex files in UTF-8 if the input encoding is declared to be UTF-8, regardless of the local encoding. The UTF-8 encoding may now be declared using a LaTeX comment containing the string %\SweaveUTF8 on a line by itself.
  • file.copy() gains a copy.date argument.
  • Printing of date-times will make use of the time-zone abbreviation in use at the time, if known. For example, for Paris pre-1940 this could be LMT, PMT, WET or WEST. To enable this, the "POSIXlt" class has an optional component "zone" recording the abbreviation for each element.
  • For platforms which support it, there is also a component "gmtoff" recording the offset from GMT where known.
  • (On Windows, by default on OS X and optionally elsewhere.) The system C function strftime has been replaced by a more comprehensive version with closer conformance to the POSIX 2008 standard.
  • dnorm(x, log = FALSE) is more accurate (but somewhat slower) for |x| > 5; as suggested in PR#15620.
  • Some versions of the tiff() device have further compression options.
  • read.table(), readLines() and scan() have a new argument to influence the treatment of embedded nuls.
  • Avoid duplicating the right hand side values in complex assignments when possible. This reduces copying of replacement values in expressions such as Z$a

New in R for Mac 3.0.3 (Mar 6, 2014)

  • NEW FEATURES:
  • On Windows there is support for making ‘.texi’ manuals using texinfo 5.0 or later: the setting is in file ‘src/gnuwin32/MkRules.dist’. 
A packaging of the Perl script and modules for texinfo 5.2 has been made available at http://www.stats.ox.ac.uk/pub/Rtools/.
  • write.table() now handles matrices of 2^31 or more elements, for those with large amounts of patience and disc space.
  • There is a new function, La_version(), to report the version of LAPACK in use.
  • The HTML version of ‘An Introduction to R’ now has links to PNG versions of the figures.
  • There is some support to produce manuals in ebook formats. (See ‘doc/manual/Makefile’. Suggested by Mauro Cavalcanti.)
  • On a Unix-alike Sys.timezone() returns NA if the environment variable TZ is unset, to distinguish it from an empty string which on some OSes means the UTC time zone.
  • The backtick may now be escaped in strings, to allow names containing them to be constructed, e.g. `\``. (PR#15621)
  • read.table(), readLines() and scan() now warn when an embedded nul is found in the input. (Related to PR#15625 which was puzzled by the behaviour in this unsupported case.)
  • (Windows only.) file.symlink() works around the undocumented restriction of the Windows system call to backslashes. (Wish of PR#15631.)
  • KalmanForecast(fast = FALSE) is now the default, and the help contains an example of how fast = TRUE can be used in this version. (The usage will change in 3.1.0.)
  • strptime() now checks the locale only when locale-specific formats are used and caches the locale in use: this can halve the time taken on OSes with slow system functions (e.g. OS X).
  • strptime() and the format() methods for classes "POSIXct", "POSIXlt" and "Date" recognize strings with marked encodings: this allows, for example, UTF-8 French month names to be read on (French) Windows.
  • iconv(to = "utf8") is now accepted on all platforms (some implementations did already, but GNU libiconv did not: however converted strings were not marked as being in UTF-8). The official name, "UTF-8" is still preferred.
  • available.packages() is better protected against corrupt metadata files. (A recurring problem with Debian package shogun-r: PR#14713.)
  • Finalizers are marked to be run at garbage collection, but run only at a somewhat safer later time (when interrupts are checked). This circumvents some problems with finalizers running arbitrary code during garbage collection (the known instances being running options() and (C-level) path.expand() re-entrantly).
  • INSTALLATION and INCLUDED SOFTWARE:
  • The included version of PCRE has been updated to 8.34. This fixes bugs and makes the behaviour closer to Perl 5.18. In particular, the concept of ‘space’ includes VT and hence agrees with POSIX's.
  • PACKAGE INSTALLATION:
  • The new field SysDataCompression in the ‘DESCRIPTION’ file allows user control over the compression used for ‘sysdata.rda’ objects in the lazy-load database.
  • install.packages(dependencies = value) for value = NA (the default) or value = TRUE omits packages only in LinkingTo for binary package installs.
  • C-LEVEL FACILITIES:
  • The long undocumented remapping of rround() to Rf_fround() in header ‘Rmath.h’ is now formally deprecated: use fround() directly.
  • Remapping of prec() and trunc() in the ‘Rmath.h’ header has been disabled in C++ code (it has caused breakage with libc++ headers).
  • BUG FIXES:
  • getParseData() truncated the imaginary part of complex number constants. (Reported by Yihui Xie.)
  • dbeta(x, a, b) with a or b within a factor of 2 of the largest representable number could infinite-loop. (Reported by Ioannis Kosmidis.)
  • provideDimnames() failed for arrays with a 0 dimension. (PR#15465)
  • rbind() and cbind() did not handle list objects correctly. (PR#15468)
  • replayPlot() now checks if it is replaying a plot from the same session.
  • rasterImage() and grid.raster() now give error on an empty (zero-length) raster. (Reported by Ben North.)
  • plot.lm() would sometimes scramble the labels in plot type 5. (PR#15458 and PR#14837)
  • min() did not handle NA_character_ values properly. (Reported by Magnus Thor Torfason.)
  • (Windows only.) readRegistry() would duplicate default values for keys. (PR#15455)
  • str(..., strict.width = "cut") did not handle it properly when more than one line needed to be cut. (Reported by Gerrit Eichner.)
  • Removing subclass back-references when S4 classes were removed or their namespace unloaded had several bugs (e.g., PR#15481).
  • aggregate() could fail when there were too many levels present in the by argument. (PR#15004)
  • namespaceImportFrom() needed to detect primitive functions when checking for duplicated imports (reported by Karl Forner).
  • getGraphicsEvent() did not exit when a user closed the graphics window. (PR#15208)
  • Errors in vignettes were not always captured and displayed properly. (PR#15495)
  • contour() could fail when dealing with extremely small z values. (PR#15454)
  • Several functions did not handle zero-length vectors properly, including browseEnv(), format(), gl(), relist() and summary.data.frame(). (E.g., PR#15499)
  • Sweave() did not restore the R output to the console if it was interrupted by a user in the middle of evaluating a code chunk. (Reported by Michael Sumner.)
  • Fake installs of packages with vignettes work again.
  • Illegal characters in the input caused parse() (and thus source()) to segfault. (PR#15518)
  • The nonsensical use of nmax = 1 in duplicated() or unique() is now silently ignored.
  • qcauchy(p, *) is now fully accurate even when p is very close to 1. (PR#15521)
  • The validmu() and valideta() functions in the standard glm() families now also report non-finite values, rather than failing.
  • Saved vignette results (in a ‘.Rout.save’ file) were not being compared to the new ones during R CMD check.
  • Double-clicking outside of the list box (e.g. on the scrollbar) of a Tk listbox widget generated by tk_select.list() no longer causes the window to close. (PR#15407)
  • Improved handling of edge cases in parallel::splitindices(). (PR#15552)
  • HTML display of results from help.search() and ?? sometimes contained badly constructed links.
  • c() and related functions such as unlist() converted raw vectors to invalid logical vectors. (PR#15535)
  • (Windows only) When a call to system2() specified one of stdin, stdout or stderr to be a file, but the command was not found (e.g. it contained its arguments, or the program was not on the PATH), it left the file open and unusable until R terminated. (Reported by Mathew McLean.)
  • The bmp() device was not recording res = NA correctly: it is now recorded as 72 ppi.
  • Several potential problems with compiler-specific behaviour have been identified using the ‘Undefined Behaviour Sanitizer’ in conjunction with the clang compiler.
  • hcl() now honours NA inputs (previously they were mapped to black).
  • Some translations in base packages were being looked up in the main catalog rather than that for the package.
  • As a result of the 3.0.2 change about ‘the last second before the epoch’, most conversions which should have given NA returned that time. (The platforms affected include Linux and OS X, but not Windows nor Solaris.)
  • rowsum() has more support for matrices and dataframes with 2^31 or more elements. (PR#15587)
  • predict(, interval = "confidence", scale = ) now works. (PR#15564)
  • The bug fix in 3.0.2 for PR#15411 was too aggressive, and sometimes removed spaces that should not have been removed. (PR#15583)
  • Running R code in a tcltk callback failed to set the busy flag, which will be needed to tell OS X not to ‘App Nap’.
  • The code for date-times before 1902 assumed that the offset from GMT in 1902 was a whole number of minutes: that was not true of Paris (as recorded on some platforms).
  • Using Sys.setlocale to set LC_NUMERIC to "C" (to restore the sane behavior) no longer gives a warning.
  • deparse() now deparses complex vectors in a way that re-parses to the original values. (PR#15534, patch based on code submitted by Alex Bertram.)
  • In some extreme cases (more than 10^15) integer inputs to dpqrxxx() functions might have been rounded up by one (with a warning about being non-integer). (PR#15624)
  • Plotting symbol pch = 14 had the triangle upside down on some devices (typically screen devices). The triangle is supposed to be point up. (Reported by Bill Venables.)
  • getSrcref() did not work on method definitions if rematchDefinition() had been used.
  • KalmanForecast(fast = FALSE) reported a (harmless) stack imbalance.
  • The count of observations used by KalmanRun() did not take missing values into account.
  • In locales where the abbreviated name of one month is a partial match for the full name of a later one, the %B format in strptime() could fail. An example was French on OS X, where juin is abbreviated to jui and partially matches juillet. Similarly for weekday names.
  • pbeta(x, a, b, log.p = TRUE) sometimes underflowed to zero for very small and very differently sized a, b. (PR#15641)
  • approx() and approxfun() now handle infinite values with the "constant" method. (PR#15655)
  • stripchart() again respects reversed limits in xlim and ylim. (PR#15664)

New in R for Mac 3.0.2 (Sep 25, 2013)

  • NEW FEATURES:
  • The ‘NEWS’ files have been re-organized. 
This file contains news for R >= 3.0.0: news for the 0.x.y, 1.x.y and 2.x.y releases is in files ‘NEWS.0’, ‘NEWS.1’ and ‘NEWS.2’. The latter files are now installed when R is installed. An HTML version of news from 2.10.0 to 2.15.3 is available as ‘doc/html/NEWS.2.html’.
  • sum() for integer arguments now uses an integer accumulator of at least 64 bits and so will be more accurate in the very rare case that a cumulative sum exceeds 2^53 (necessarily summing more than 4 million elements).
  • The example() and tools::Rd2ex() functions now have parameters to allow them to ignore \dontrun markup in examples. (Suggested by Peter Solymos.)
  • str(x) is considerably faster for very large lists, or factors with 100,000 levels, the latter as in PR#15337.
  • col2rgb() now converts factors to character strings not integer codes (suggested by Bryan Hanson).
  • tail(warnings()) now works, via the new `[` method.
  • There is now support for the LaTeX style file ‘zi4.sty’ which has in some distributions replaced ‘inconsolata.sty’.
  • unlist(x) now typically returns all non-list xs unchanged, not just the “vector” ones. Consequently, format(lst) now also works when the list lst has non-vector elements.
  • The tools::getVignetteInfo() function has been added to give information about installed vignettes.
  • New assertCondition(), etc. utilities in tools, useful for testing.
  • Profiling now records non-inlined calls from byte-compiled code to BUILTIN functions.
  • Various functions in stats and elsewhere that use non-standard evaluation are now more careful to follow the namespace scoping rules. E.g. stats::lm() can now find stats::model.frame() even if stats is not on the search path or if some package defines a function of that name.
  • If an invalid/corrupt .Random.seed object is encountered in the workspace it is ignored with a warning rather than giving an error. (This allows R itself to rely on a working RNG, e.g. to choose a random port.)
  • seq() and seq.int() give more explicit error messages if called with invalid (e.g. NaN) inputs.
  • When parse() finds a syntax error, it now makes partial parse information available up to the location of the error. (Request of Reijo Sund.)
  • Methods invoked by NextMethod() had a different dynamic parent to the generic. This was causing trouble where S3 methods invoked via lazy evaluation could lose track of their generic. (PR#15267)
  • Code for the negative binomial distribution now treats the case size == 0 as a one-point distribution at zero.
  • abbreviate() handles without warning non-ASCII input strings which require no abbreviation.
  • read.dcf() no longer has a limit of 8191 bytes per line. (Wish of PR#15250.)
  • formatC(x) no longer copies the class of x to the result, to avoid misuse creating invalid objects as in PR#15303. A warning is given if a class is discarded.
  • Dataset npk has been copied from MASS to allow more tests to be run without recommended packages being installed.
  • The initialization of the regression coefficients for non-degenerate differenced models in arima() has been changed and in some examples avoids a local maximum. (PR#15396)
  • termplot() now has an argument transform.x to control the display of individual terms in the plot. (PR#15329)
  • format() now supports digits = 0, to display nsmall decimal places.
  • There is a new read-only par() parameter called "page", which returns a logical value indicating whether the next plot.new() call will start a new page.
  • Processing Sweave and Rd documents to PDF now renders backticks and single quotes better in several instances, including in \code and \samp expressions.
  • utils::modifyList() gets a new argument keep.null allowing NULL components in the replacement to be retained, instead of causing corresponding components to be deleted.
  • tools::pkgVignettes() gains argument check; if set to TRUE, it will warn when it appears a vignette requests a non-existent vignette engine.
  • UTILITIES:
  • R CMD check --as-cran checks the line widths in usage and examples sections of the package Rd files.
  • R CMD check --as-cran now implies --timings.
  • R CMD check looks for command gfile if a suitable file is not found. (Although file is not from GNU, OpenCSW on Solaris installs it as gfile.)
  • R CMD build (with the internal tar) checks the permissions of ‘configure’ and ‘cleanup’ files and adds execute permission to the recorded permissions for these files if needed, with a warning. This is useful on OSes and file systems which do not support execute permissions (notably, on Windows).
  • R CMD build now weaves and tangles all vignettes, so suggested packages are not required during package installation if the source tarball was prepared with current R CMD build.
  • checkFF() (used by R CMD check) does a better job of detecting calls from other packages, including not reporting those where a function has been copied from another namespace (e.g. as a default method). It now reports calls where .NAME is a symbol registered in another package.
  • On Unix-alike systems, R CMD INSTALL now installs packages group writably whenever the library (lib.loc) is group writable. Hence, update.packages() works for other group members (suggested originally and from a patch by Dirk Eddelbuettel).
  • R CMD javareconf now supports the use of symbolic links for JAVA_HOME on platforms which have realpath. So it is now possible to use 
R CMD javareconf JAVA_HOME=/usr/lib/jvm/java-1.7.0
on a Linux system and record that value rather than the frequently-changing full path such as ‘/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64’.
  • (Windows only.) Rscript -e requires a non-empty argument for consistency with Unix versions of R. (Also Rterm -e and R -e.)
  • R CMD check does more thorough checking of declared packages and namespaces. It reports
  • packages declared in more than one of the Depends, Imports, Suggests and Enhances fields of the ‘DESCRIPTION’ file.
  • namespaces declared in Imports but not imported from, neither in the ‘NAMESPACE’ file nor using the :: nor ::: operators.
  • packages which are used in library() or requires() calls in the R code but were already put on the search path via Depends.
  • packages declared in Depends not imported via the ‘NAMESPACE’ file (except the standard packages). Objects used from Depends packages should be imported to avoid conflicts and to allow correct operation when the namespace is loaded but not attached.
  • objects imported via ::: calls where :: would do.
  • objects imported by :: which are not exported.
  • objects imported by ::: calls which do not exist.
  • See ‘Writing R Extensions’ for good practice.
  • R CMD check optionally checks for non-standard top-level files and directories (which are often mistakes): this is enabled for --as-cran.
  • LaTeX style file upquote.sty is no longer included (the version was several years old): it is no longer used in R. A much later version is commonly included in LaTeX distributions but does not play well with the ae fonts which are the default for Sweave vignettes.
  • R CMD build makes more use of the ‘build’ sub-directory of package sources, for example to record information about the vignettes.
  • INSTALLATION and INCLUDED SOFTWARE:
  • The macros used for the texinfo manuals have been changed to work better with the incompatible changes made in texinfo 5.x.
  • The minimum version for a system xz library is now 5.0.3 (was 4.999). This is in part to avoid 5.0.2, which can compress in ways other versions cannot decompress.
  • The included version of PCRE has been updated to 8.33.
  • The included version of zlib has been updated to 1.2.8, a bug-fix release.
  • The included version of xz utils's liblzma has been updated to 5.0.5.
  • Since javareconf (see above) is used when R is installed, a stable link for JAVA_HOME can be supplied then.
  • Configuring with --disable-byte-compilation will override the ‘DESCRIPTION’ files of recommended packages, which typically require byte-compilation.
  • More of the installation and checking process will work even when TMPDIR is set to a path containing spaces, but this is not recommended and external software (such as texi2dvi) may fail.
  • PACKAGE INSTALLATION:
  • Installation is aborted immediately if a LinkingTo package is not installed.
  • R CMD INSTALL has a new option --no-byte-compile which will override a ByteCompile field in the package's ‘DESCRIPTION’ file.
  • License BSD is deprecated: use BSD_3_clause or BSD_2_clause instead. 
License X11 is deprecated: use MIT or BSD_2_clause instead.
  • Version requirements for LinkingTo packages are now recognized: they are checked at installation. (Fields with version requirements were previously silently ignored.)
  • The limit of 500 S3method entries in a NAMESPACE file has been removed.
  • The default ‘version’ of Bioconductor for its packages has been changed to the upcoming 2.13, but this can be set by the environment variable R_BIOC_VERSION, e.g. in file ‘Renviron.site’.
  • C-LEVEL FACILITIES:
  • ‘Rdefines.h’ has been tweaked so it can be included in C++ code after ‘R_ext/Boolean.h’ (which is included by ‘R.h’). 
Note that ‘Rdefines.h’ is not kept up-to-date, and ‘Rinternals.h’ is preferred for new code.
  • eval and applyClosure are now protected against package code supplying an invalid rho.
  • DEPRECATED AND DEFUNCT:
  • The unused namespace argument to package.skeleton() is now formally deprecated and will be removed in R 3.1.0.
  • plclust() is deprecated: use the plot() method for class "hclust" instead.
  • Functions readNEWS() and checkNEWS() in package tools are deprecated (and they have not worked with current ‘NEWS’ files for a long time).
  • DOCUMENTATION:
  • ‘An Introduction to R’ has a new chapter on using R as a scripting language including interacting with the OS.
  • BUG FIXES:
  • help.request() could not determine the current version of R on CRAN. (PR#15241)
  • On Windows, file.info() failed on root directories unless the path was terminated with an explicit ".". (PR#15302)
  • The regmatches 1. (Bill Dunlap, PR#15386).
  • stem() now discards infinite inputs rather than hanging. (PR#15376)
  • The parser now enforces C99 syntax for floating point hexadecimal constants (e.g. 0x1.1p0), rather than returning unintended values for malformed constants. (PR#15234)
  • model.matrix() now works with very long LHS names (more than 500 bytes). (PR#15377)
  • integrate() reverts to the pre-2.12.0 behaviour: from 2.12.0 to 3.0.1 it sometimes failed to achieve the requested tolerance and reported error estimates that were exceeded. (PR#15219)
  • strptime() now handles %W fields with value 0. (PR#15915)
  • R is now better protected against people trying to interact with the console in startup code. (PR#15325)
  • Subsetting 1D arrays often lost dimnames (PR#15301).
  • Unary + on a logical vector did not coerce to integer, although unary - did.
  • na.omit() and na.exclude() added a row to a zero-row data frame. (PR#15399)
  • All the (where necessary cut-down) vignettes are installed if R was configured with --without-recommended-packages.
  • source() did not display filenames when reporting syntax errors.
  • Syntax error reports misplaced the caret pointing out the bad token.
  • (Windows only) Starting R with R (instead of Rterm or Rgui) would lose any zero-length strings from the command line arguments. (PR#15406)
  • Errors in the encoding specified on the command line via --encoding=foo were not handled properly. (PR#15405)
  • If x is a symbol, is.vector(x, "name") now returns TRUE, since "name" and "symbol" should be synonyms. (Reported by Hervé Pagès.)
  • R CMD rtags works on platforms (such as OS X) with a XSI-conformant shell command echo. (PR#15231)
  • is.unsorted(NA) returns false as documented (rather than NA).
  • R CMD LINK did not know about sub-architectures.
  • system() and system2() are better protected against users who misguidedly have spaces in the temporary directory path.
  • file.show() and edit() are now more likely to work on file paths containing spaces. (Where external utilities are used, not the norm on Windows nor in R.app which should previously have worked.)
  • Packages using the methods package are more likely to work when they import it but it is not attached. (Several parts of its C code were looking for its R functions on the search path rather than in its namespace.)
  • lgamma(-x) is no longer NaN for very small x.
  • (Windows) system2() now respects specifying stdout and stderr as files if called from Rgui. (PR#15393)
  • Closing an x11() device whilst locator() or identify() is in progress no longer hangs R. (PR#15253)
  • list.dirs(full.names = FALSE) was not implemented. (PR#15170)
  • format() sometimes added unnecessary spaces. (PR#15411)
  • all.equal(check.names = FALSE) would ignore the request to ignore the names and would check them as attributes.
  • The symbol set by tools::Rd2txt_options(itemBullet=) was not respected in some locales. (PR#15435)
  • mcMap() was not exported by package parallel. (PR#15439)
  • plot() for TukeyHSD objects did not balance dev.hold() and dev.flush() calls on multi-page plots. (PR#15449)

New in R for Mac 3.0.1 (May 17, 2013)

  • NEW FEATURES:
  • chooseCRANmirror() and chooseBioCmirror() gain an ind argument (like setRepositories()).
  • mcparallel has a new argument mc.interactive which can modify the interactive flag in the child process. The new default is FALSE which makes child processes non-interactive by default (this prevents lock-ups due to children waiting for interactive input).
  • scan() now warns when end-of-file occurs within a quoted string.
  • count.fields() is now consistent with scan() in its handling of newlines in quoted strings. Instead of triggering an error, this results in the current line receiving NA as the field count, with the next line getting the total count of the two lines.
  • The default method of image() will plot axes of the class of xlim and ylim (and hence of x and y if there is a suitable range() method). Based on a suggestion of Michael Sumner.
  • load() now has a verbose argument for debugging support, to print the names of objects just before loading them.
  • When loading a serialized object encounters a reference to a namespace which cannot be loaded, this is replaced by a reference to the global environment, with a warning.
  • pairs() gains a line.main option for title placement.
  • The remaining instances in which serialization to a raw vector was limited to 2GB have been unlimited on a 64-bit platform, and in most cases serialization to a vector of more than 1GB will be substantially faster.
  • UTILITIES:
  • R CMD config now make use of personal ‘Makevars’ files under ‘~/.R’ and a site file ‘Makevars.site’, in the same way as R CMD SHLIB and R CMD INSTALL. This makes the utility more useful in package configure scripts. 
On Windows finding the personal files may require the environment variable HOME set. 
The old behaviour can be obtained with the new options --no-user-files and --no-site-files.
  • PACKAGE INSTALLATION:
  • Alternatives to the site and user customization files ‘Makevars.site’ and ‘~/.R/Makevars’ can be specified via the environment variables R_MAKEVARS_SITE and R_MAKEVARS_USER respectively. These can be used to suppress the use of the default files by setting an empty value (where possible) or a non-existent path.
  • BUG FIXES:
  • sys.source() did not report error locations when keep.source = TRUE.
  • as.POSIXct.numeric was coercing origin using the tz argument and not "GMT" as documented (PR#14973).
  • The active binding to assign fields in reference classes has been cleaned up to reduce dependence on the class' package environment, also fixing bug in initializing read-only fields (inspired by a report from Hadley Wickham).
  • str(d) no longer gives an error when names(d) contain illegal multibyte strings (PR#15247).
  • Profiling of built-in functions with line.profiling= TRUE did not record the line from which they were called.
  • citation(pkg) dropped the header and footer specified in the ‘CITATION’ file (PR#15257).
  • Quotes were handled differently when reading the first line and reading the rest, so read.table() misread some files that contained quote characters (PR#15245).
  • cat() with sep a character vector of length greater than one and more than one argument was using separators inconsistently (PR#15261).
  • On Windows in R 3.0.0, savePlot() failed because of an incorrect check on the argument count.
  • unzip(list = TRUE) returned Names as a factor and not a character vector (as documented) for the internal method. (Noticed by Sean O'Riordain.)
  • contourLines() now checks more comprehensively for conformance of its x, y and z arguments (it was used incorrectly in package R2G2).
  • Saved graphics display lists are R version-specific. Attempting to load workspaces containing them (or some other version-specific objects) aborted the load in R 3.0.0 and earlier; now it does a partial load and generates a warning instead.
  • In R 3.0.0, identify() and locator() did not record information correctly, so replaying a graph (e.g. by copying it to another device) would fail. (PR#15271)
  • Calling file.copy() or dirname() with the invalid input "" (which was being used in packages, despite not being a file path) could have caused a segfault. 
dirname("") is now "" rather than "." (unless it segfaulted).
  • supsmu() could read/write outside its input vectors for very short inputs (seen in package rms for n = 4).
  • as.dendrogram()'s hclust method uses less memory and hence gets considerably faster for large (n ~ 1000) clusterings, thanks to Daniel Müllner. (PR#15174)
  • The return value when all workers failed from parallel::mclapply(mc.presechedule = TRUE) was a list of strings and not of error objects. (Spotted by Karl Forner and Bernd Bischl.)
  • In R 3.0.0, when help() found multiple pages with the same alias, the HTML display of all the selections was not produced. (PR#15282)
  • splinefun(method="monoH.FC") now produces a function with first argument named x and allows deriv=3, as documented. (PR#15273)
  • summaryRprof() would only read the first chunksize lines of an Rprof file produced with line.profiling=TRUE. By default, this is the first 100 seconds. (PR#15288)
  • lsfit() produced an incorrect error message when argument x had more columns than rows or x had a different number of rows than y. (Spotted by Renaud Gaujoux.)
  • Binary operations on equal length vectors copied the class name from the second operand when the first had no class name, but did not set the object bit. (PR#15299)
  • The trace() method for reference generator objects failed after those objects became function definitions.
  • write.table() did not check that factors were constructed correctly, and so caused a segment fault when writing bad ones. (PR#15300)
  • The internal HTTP server no longer chokes on POST requests without body. It will also pass-through other request types for custom handlers (with the method stored in Request-Method header) instead of failing.

New in R for Mac 3.0.0 (Apr 3, 2013)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • Packages need to be (re-)installed under this version (3.0.0) of R.
  • There is a subtle change in behaviour for numeric index values 2^31 and larger. These never used to be legitimate and so were treated as NA, sometimes with a warning. They are now legal for long vectors so there is no longer a warning, and x[2^31] = 3.0.0.
  • Palette changes get recorded on the display list, so replaying plots (including when resizing screen devices and using dev.copy()) will work better when the palette is changed during a plot.
  • chol(pivot = TRUE) now defaults to LAPACK, not LINPACK.
  • The parse() function has a new parameter keep.source, which defaults to options("keep.source").
  • Profiling via Rprof() now optionally records information at the statement level, not just the function level.
  • The Rprof() function now quotes function names in in its output file on Windows, to be consistent with the quoting in Unix.
  • Profiling via Rprof() now optionally records information about time spent in GC.
  • The HTML help page for a package now displays non-vignette documentation files in a more accessible format.
  • To support options(stringsAsFactors = FALSE), model.frame(), model.matrix() and replications() now automatically convert character vectors to factors without a warning.
  • The print method for objects of class "table" now detects tables with 0-extents and prints the results as, e.g., < table of extent 0 x 1 x 2 >. (Wish of PR#15198.)
  • Deparsing involving calls to anonymous functions and has been made closer to reversible by the addition of extra parentheses.
  • The function utils::packageName() has been added as a lightweight version of methods::getPackageName().
  • find.package(lib.loc = NULL) now treats loaded namespaces preferentially in the same way as attached packages have been for a long time.
  • In Windows, the Change Directory dialog now defaults to the current working directory, rather than to the last directory chosen in that dialog.
  • available.packages() gains a "license/restricts_use" filter which retains only packages for which installation can proceed solely based on packages which are guaranteed not to restrict use.
  • New check_packages_in_dir() function in package tools for conveniently checking source packages along with their reverse dependencies.
  • R's completion mechanism has been improved to handle help requests (starting with a question mark). In particular, help prefixes are now supported, as well as quoted help topics. To support this, completion inside quotes are now handled by R by default on all platforms.
  • The memory manager now allows the strategy used to balance garbage collection and memory growth to be controlled by setting the environment variable R_GC_MEM_GROW. See ?Memory for more details.
  • (‘For experts only’, as the introductory manual says.) The use of environment variables R_NSIZE and R_VSIZE to control the initial (= minimum) garbage collection trigger for number of cons cels and size of heap has been restored: they can be overridden by the command-line options --min-nsize and --min-vsize; see ?Memory.
  • On Windows, the device name for bitmap devices as reported by .Device and .Devices no longer includes the file name. This is for consistency with other platforms and was requested by the lattice maintainer. 
win.metafile() still uses the file name: the exact form is used by package tkrplot.
  • set.seed(NULL) re-initializes .Random.seed as done at the beginning of the session if not already set. (Suggestion of Bill Dunlap.)
  • The breaks argument in hist.default() can now be a function that returns the breakpoints to be used (previously it could only return the suggested number of breakpoints).
  • File ‘share/licenses/licenses.db’ has some clarifications, especially as to which variants of ‘BSD’ and ‘MIT’ is intended and how to apply them to packages. The problematic licence ‘Artistic-1.0’ has been removed.
  • LONG VECTORS:
  • This section applies only to 64-bit platforms.
  • There is support for vectors longer than 2^31 - 1 elements. This applies to raw, logical, integer, double, complex and character vectors, as well as lists. (Elements of character vectors remain limited to 2^31 - 1 bytes.)
  • Most operations which can sensibly be done with long vectors work: others may return the error ‘long vectors not supported yet’. Most of these are because they explicitly work with integer indices (e.g. anyDuplicated() and match()) or because other limits (e.g. of character strings or matrix dimensions) would be exceeded or the operations would be extremely slow.
  • length() returns a double for long vectors, and lengths can be set to 2^31 or more by the replacement function with a double value.
  • Most aspects of indexing are available. Generally double-valued indices can be used to access elements beyond 2^31 - 1.
  • There is some support for matrices and arrays with each dimension less than 2^31 but total number of elements more than that. Only some aspects of matrix algebra work for such matrices, often taking a very long time. In other cases the underlying Fortran code has an unstated restriction (as was found for complex svd()).
  • dist() can produce dissimilarity objects for more than 65536 rows (but for example hclust() cannot process such objects).
  • serialize() to a raw vector is unlimited in size (except by resources).
  • The C-level function R_alloc can now allocate 2^35 or more bytes.
  • agrep() and grep() will return double vectors of indices for long vector inputs.
  • Many calls to .C() have been replaced by .Call() to allow long vectors to be supported (now or in the future). Regrettably several packages had copied the non-API .C() calls and so failed.
  • .C() and .Fortran() do not accept long vector inputs. This is a precaution as it is very unlikely that existing code will have been written to handle long vectors (and the R wrappers often assume that length(x) is an integer).
  • Most of the methods for sort() work for long vectors. 
rank(), sort.list() and order() support long vectors (slowly except for radix sorting).
  • sample() can do uniform sampling from a long vector.
  • PERFORMANCE IMPROVEMENTS:
  • More use has been made of R objects representing registered entry points, which is more efficient as the address is provided by the loader once only when the package is loaded. 
This has been done for packages base, methods, splines and tcltk: it was already in place for the other standard packages. 
Since these entry points are always accessed by the R entry points they do not need to be in the load table which can be substantially smaller and hence searched faster. This does mean that .C / .Fortran / .Call calls copied from earlier versions of R may no longer work – but they were never part of the API.
  • Many .Call() calls in package base have been migrated to .Internal() calls.
  • solve() makes fewer copies, especially when b is a vector rather than a matrix.
  • eigen() makes fewer copies if the input has dimnames.
  • Most of the linear algebra functions make fewer copies when the input(s) are not double (e.g. integer or logical).
  • A foreign function call (.C() etc) in a package without a PACKAGE argument will only look in the first DLL specified in the ‘NAMESPACE’ file of the package rather than searching all loaded DLLs. A few packages needed PACKAGE arguments added.
  • The @

New in R for Mac 2.15.3 (Mar 2, 2013)

  • NEW FEATURES:
  • lgamma(x) for very small x (in the denormalized range) is no longer Inf with a warning.
  • image() now sorts an unsorted breaks vector, with a warning.
  • The internal methods for tar() and untar() do a slightly more general job for 'ustar'-style handling of paths of more than 100 bytes.
  • Packages compiler and parallel have been added to the reference index (refman.pdf).
  • untar(tar = "internal") has some support for pax headers as produced by e.g. gnutar --posix (which seems prevalent on OpenSUSE 12.2) or bsdtar --format pax, including long path and link names.
  • sQuote() and dQuote() now handle 0-length inputs. (Suggestion of Ben Bolker.)
  • summaryRprof() returns zero-row data frames rather than throw an error if no events are recorded, for consistency.
  • The included version of PCRE has been updated to 8.32.
  • The tcltk namespace can now be re-loaded after unloading.
  • The Tcl/Tk event loop is inhibited in a forked child from package parallel (as in e.g. mclapply()).
  • parallel::makeCluster() recognizes the value random for the environment variable R_PARALLEL_PORT: this chooses a random value for the port and reduces the chance of conflicts when multiple users start a cluster at the same time.
  • UTILITIES:
  • The default for TAR on Windows for R CMD build has been changed to be internal if no tar command is on the path.
  • This enables most packages to be built 'out of the box' without Rtools: the main exceptions are those which need to be installed to re-build vignettes and need Rtools for installation (usually because they contain compiled code).
  • C-LEVEL FACILITIES:
  • On a 64-bit Windows platform with enough RAM, R_alloc can now allocate up to just under 32GB like other 64-bit platforms.
  • DEPRECATED AND DEFUNCT:
  • Use of col2rgb(0) is deprecated (see the help page for its limitations).
  • The deprecated intensities component returned by hist() is no longer recognized by the plot() method and will be removed in R 3.0.0.
  • real(), as.real() and is.real() are now formally deprecated and give a warning.
  • This is formal notice that the non-API EISPACK entry points in R will be removed shortly.
  • INSTALLATION:
  • The configure tests for Objective C and Objective C++ now work on Mac OS 10.8 with Xcode 4.5.2 (PR#15107).
  • The cairo-based versions of X11() now work with current versions of cairographics (e.g. 1.12.10). (PR#15168)
  • A workaround for earlier versions of R is to use X11.options(type = "nbcairo").
  • Configuration and R CMD javareconf now come up with a smaller set of library paths for Java on Oracle-format JDK (including OpenJDK). This helps avoid conflicts between libraries (such as libjpeg) supplied in the JDK and system libraries. This can always be overridden if needed: see the 'R Installation and Administration' manual.
  • BUG FIXES:
  • beta(a, b) could overflow to infinity in its calculations when one of a and b was less than one. (PR#15075)
  • lbeta(a, b) no longer gives NaN if a or b is very small (in the denormalized range).
  • bquote() is now able to substitute default arguments in single-argument functions. (PR#15077)
  • browseEnv(html = FALSE) would segfault if called from R (not R.app) on a CRAN-style Mac OS X build of R.

New in R for Mac 2.15.2 (Oct 26, 2012)

  • NEW FEATURES:
  • The X11() window gains an icon: the latter may be especially useful on Ubuntu's 'Unity' interface.
  • The WM_CLASS should be set in circumstances where the Window Manager failed to make use of X11 resource settings.
  • (Contributed by Philip Johnson.)
  • The "Date" and "POSIXt" methods for cut() will accept an unsorted breaks argument (as the default method does, although this was undocumented). (Wish of PR#14961.)
  • Reference class methods (in the methods package) that use other methods in an indirect way (e.g., by sapply()) must tell the code analysis to include that method. They can now do so by invoking $usingMethods().
  • More Polish translations are available: for the RGui menus and for several recommended packages.
  • Multistratum MANOVA works. In fact, it seems to have done so for years in spite of the help page claiming it did not.
  • qqline() has new optional arguments distribution, probs and qtype, following the example of lattice's panel.qqmathline().
  • The handling of single quotes in the en@quot pseudo-language has been slightly improved. Double quotes are no longer converted.
  • New functions checkPoFiles() and checkPoFile() have been added to the tools package to check for consistency of format strings in translation files.
  • model.matrix(~1, ...) now also contains the same rownames that less trivial formulae produce. (Wish of PR#14992, changes the output of several packages.)
  • Misuse of rep() on undocumented types of objects (e.g. calls) is now reported as an error.
  • The included LAPACK has been updated to 3.4.1, with some patches from the current SVN sources. (_Inter alia_, this resolves PR#14692.)
  • file.copy(recursive = TRUE) has some additional checks on user error leading to attempted infinite recursion (and on some platforms to crashing R).
  • PCRE has been updated to version 8.31, a bug-fix release.
  • The included version of liblzma has been updated to version 5.0.4, a minor bug-fix release.
  • New function .bincode(), a 'bare-bones' version of cut.default(labels = FALSE) for use in packages with image() methods.
  • The HTML manuals now use directional single quotes.
  • maintainer() now converts embedded new lines to spaces. It no longer gives a non-obvious error for non-installed packages.
  • The X11() device has some protection against being used with forked processes _via_ package parallel.
  • Setting the environment variable R_OSX_VALGRIND (to any value) allows R to be run under valgrind on Mac OS 10.6 and 10.7 (valgrind currently has very limited support for 10.8), provided system() is not used (directly or indirectly). This should not be needed for valgrind >= 3.8.1.
  • The model.frame() method for "lm" uses xlevels: this is safer if data was supplied or model = FALSE was used and the levels of factors used in the fit had been re-ordered since fitting.
  • Similarly, model.frame(fm, data=) copies across the variables used for safe prediction from the fit.
  • Functions such as parLapply() in package parallel can make use of a default cluster if one is set. (Reported by Martin Morgan.)
  • chol(pivot = TRUE, LINPACK = FALSE) is now available using LAPACK 3.2 subroutine DPSTRF.
  • The functions .C(), .Call(), .External() and .Fortran() now check that they are called with an unnamed first argument: the formal arguments were changed from name= to .NAME= in R 2.13.0, but some packages were still using the old name. This is currently a warning, but will be an error in future.
  • step() no longer tries to improve a model with AIC of -Inf (a perfect fit).
  • spline() and splinefun() gain a new method "hyman", an implementation of Hyman's method of constructing monotonic interpolation splines. (Based on contributions of Simon Wood and Rob Hyndman.)
  • On Windows, the C stack size has been increased to 64MB (it has been 10MB since the days of 32MB RAM systems).
  • PERFORMANCE IMPROVEMENTS:
  • array() is now implemented in C code (for speed) when data is atomic or an unclassed list (so it is known that as.vector(data) will have no class to be used by rep()).
  • rep() is faster and uses less memory, substantially so in some common cases (e.g. if times is of length one or length.out is given, and each = 1).
  • findInterval(), tabulate(), cut(), hist() and image.default() all use .Call() and are more efficient.
  • duplicated(), unique() and similar now support vectors of lengths above 2^29 on 64-bit platforms.
  • Omitting PACKAGE in .C() etc calls was supposed to make use of the DLL from the namespace within which the enclosing function was defined. It was less successful in doing so than it might be, and gave no indication it had failed.
  • A new search strategy is very successful and gives a warning when it fails. In most cases this is because the entry point is not actually provided by that package (and so PACKAGE should be used to indicate which package is intended) but in some the namespace does not have a DLL specified by a useDynLib() directive so PACKAGE is required.
  • UTILITIES:
  • R CMD check now checks if a package can be loaded by library(pkgname, lib.loc = "somewhere") without being on the library search path (unless it is already installed in .Library, when it always will be).
  • R CMD check --as-cran notes 'hidden' files and directories (with names starting with a dot) that are not needed for the operation of R CMD INSTALL or R CMD build: such files should be excluded from the published tarball.
  • R CMD check (if checking subdirectories) checks that the R code in any demos is ASCII and can be parsed, and warns if not.
  • When R CMD Rd2pdf is used with inputenx.sty, it allows further characters (mainly for Eastern European languages) by including ix-utf8enc.dfu (if available). (Wish of PR#14989.)
  • R CMD build now omits several types of hidden files/directories, including inst/doc/.Rinstignore, vignettes/.Rinstignore, (.Rinstignore should be at top level), .deps under src, .Renviron, .Rprofile, .Rproj.user, .backups, .cvsignore, .cproject, .directory, .dropbox, .exrc, .gdb.history, .gitattributes, .gitignore, .gitmodules, .hgignore, .hgtags, .htaccess, .latex2html-init, .project, .seed, .settings, .tm_properties and various leftovers.
  • R CMD check now checks for .C(), .Call(), .External() and .Fortran() calls in other packages, and gives a warning on those found from R itself (which are not part of the API and change without notice: many will changed for R 2.16.0).
  • C-LEVEL FACILITIES:
  • The limit for R_alloc on 64-bit platforms has been raised to just under 32GB (from just under 16GB).
  • The misuse of .C("name", ..., PACKAGE = foo) where foo is an arbitrary R object is now an error.
  • The misuse .C("name",..., PACKAGE = "") is now warned about in R CMD check, and will be an error in future.
  • DEPRECATED AND DEFUNCT:
  • Use of array() with a 0-length dim argument is deprecated with a warning (and was contrary to the documentation).
  • Use of tapply() with a 0-length INDEX list is deprecated with a warning.
  • Translation packages are deprecated.
  • Calling rep() or rep.int() on a pairlist is deprecated and will give a warning. In any case, rep() converted a pairlist to a list so you may as well do that explicitly.
  • Entry point rcont2 is no longer part of the API, and will move to package stats in R 2.16.0.
  • The 'internal' graphics device invoked by .Call("R_GD_nullDevice", package = "grDevices") is about to be removed: use pdf(file = NULL) instead.
  • eigen(EISPACK = TRUE), chol(pivot = FALSE, LINPACK = TRUE), chol2inv(LINPACK = TRUE), solve(LINPACK = TRUE) and svd(LINPACK = TRUE) are deprecated and give a warning.
  • They were provided for compatibility with R 1.7.0 (Mar 2003)!
  • The 'internal function' kappa.tri() has been renamed to .kappa_tri() so it is not inadvertently called as a method for class "tri".
  • Functions sessionData() and browseAll() in package methods are on a help page describing them as 'deprecated' and are now formally deprecated.
  • PACKAGE INSTALLATION:
  • For a Windows or Mac OS X binary package install, install.packages() will check if a source package is available on the same repositories, and report if it is a later version or there is a source package but no binary package available.
  • This check can be suppressed: see the help page.
  • install.packages(type = "both") has been enhanced. In interactive use it will ask whether to choose the source version of a package if the binary version is older and contains compiled code, and also asks if source packages with no binary version should be installed).
  • INSTALLATION:
  • There is a new configure option --with-libtiff (mainly in case the system installation needs to be avoided).
  • LAPACK 3.4.1 does use some Fortran 90 features, so g77 no longer suffices.
  • If an external LAPACK is used, it must be version 3.2 or later.
  • BUG FIXES:
  • On Windows, starting Rterm via R.exe caused Ctrl-C to misbehave. (PR#14948)
  • The tools::latexToUtf8() function missed conversions that were contained within braces.
  • Long timezone specifications (such as a file name preceded by :) could crash as.POSIXlt. (PR#14945)
  • R CMD build --resave-data could fail if there was no data directory but there was an R/sysdata.rda file. (PR#14947)
  • is.na() misbehaved on a 0-column data frame. (PR#14959)
  • anova.lmlist() failed if test was supplied. (PR#14960)
  • It was unable to compute Cp tests for object of class "lm" (it assumed class "glm").
  • The formula method for sunflowerplot() now allows xlab and ylab to be set. (Reported by Gerrit Eichner.)
  • The "POSIXt" and "Date" methods for hist() could fail on Windows where adjustments to the right-hand boundary crossed a DST transition time.
  • On Windows, the code in as.POSIXct() to handle incorrectly specified isdst fields might have resulted in NA being returned.
  • aov() and manova() gave spurious warning about singular error model in the multiresponse case.
  • In ns() and bs(), specifying knots = NULL is now equivalent to omitting it, also when df is specified. (PR#14970)
  • sprintf() did not accept numbered arguments ending in zero. (PR#14975)
  • rWishart() could overflow the C stack and maybe crash the R process for dimensions of several hundreds or more. (Reported by Michael Braun on R-sig-mac.)
  • Base package vignettes (e.g. vignette("Sweave")) were not fully installed in builds of R from the tarball.
  • lchoose() and choose() could overflow the C stack and crash R.
  • When given a 0-byte file and asked to keep source references, parse() read input from stdin() instead.
  • pdf(compress = TRUE) did not delete temporary files it created until the end of the R session. (PR#14991)
  • logLik() did not detect the error of applying it to a multiple-response linear model. (PR#15000)
  • file.copy(recursive = TRUE) did not always report FALSE for a failure two or more directories deep.
  • qgeom() could return -1 for extremely small q. (PR#14967.)
  • smooth.spline() used DUP = FALSE which allowed its compiled C code to change the function: this was masked by the default byte-compilation. (PR#14965.)
  • In Windows, the GUI preferences for foreground color were not always respected. (Reported by Benjamin Wells.)
  • On OS X, the Quartz versions of the bitmap devices did not respect antialias = "none". (PR#15006.)
  • unique() and similar would infinite-loop if called on a vector of length > 2^29 (but reported that the vector was too long for 2^30 or more).
  • parallel::stopCluster() now works with MPI clusters without snow being on the search path.
  • terms.formula() could exhaust the stack, and the stack check did not always catch this before the segfault. (PR#15013)
  • sort.list(method = "radix") could give incorrect results on certain compilers (seen with clang on Mac OS 10.7 and Xcode 4.4.1).
  • backsolve(T, b) gave incorrect results when nrows(b) > ncols(T) and b had more than one column.
  • It could segfault or give nonsense if k was specified as more than ncols(T).
  • smooth.spline() did not check that a specified numeric spar was of length 1, and gave corrupt results if it was of length 0.
  • Protection added to do_system. (PR#15025)
  • Printing of vectors with names > 1000 characters now works correctly rather than truncating. (PR#15028)
  • qr() for a complex matrix did not pivot the column names.
  • --with-blas='-framework vecLib' now also works on OS X 10.8.
  • R CMD check no longer fails with an error if a DESCRIPTION file incorrectly contains a blank line. (Reported by Bill Dunlap.)
  • install.packages(type = "both") could call chooseCRANmirror() twice.
  • lm.wfit() could segfault in R 2.15.1 if all the weights were zero. (PR#15044)
  • A malformed package name could cause R CMD INSTALL to write outside the target library.
  • Some of the quality control functions (e.g. tools::checkFF()) were wrongly identifying the source of S4 methods in a package and so not checking them.
  • The default type of display by browseEnv() when using R.app on Mac OS X has been incorrect for a long time.
  • The implementation of importMethodsFrom in a NAMESPACE file could be confused and fail to find generics when importing from multiple packages (reported and fixed by Michael Lawrence).
  • The detection of the C stack direction is better protected against compiler optimization. (PR#15011.)
  • Long custom line types would sometimes segfault on the cairographics-based devices. (PR#15055.)
  • tools::checkPoFile() unprotected too early in its C code and so segfaulted from time to time.
  • The Fortran code underlying nlminb() could infinite-loop if any of the input functions returned NA or NaN. This is now an error for the gradient or Hessian, and a warning for the function (with the value replaced by Inf). (In part, PR#15052.)
  • The code for creating coerce() methods could generate false notes about ambiguous selection; the notes have been suppressed for this function.
  • arima.sim() could give too long an output in some corner cases (in part, PR#15068).
  • anova.glm() with test = "Rao" didn't work when models included an offset. (Reported by Soren Feodor Nielsen.)
  • as.data.frame.matrix() could return invalid data frame with no row.names attribute for 0-row matrix. (Reported by Herv'e Pag`es.)
  • Compilation with the vecLib or Accelerate frameworks on OS X without using that also for LAPACK is more likely to be successful.

New in R for Mac 2.15.1 (Jun 25, 2012)

  • NEW FEATURES:
  • source() now uses withVisible() rather than .Internal(eval.with.vis). This sometimes alters tracebacks slightly.
  • install.packages("pkg_version.tgz") on Mac OS X now has sanity checks that this is actually a binary package (as people have tried it with incorrectly named source packages).
  • splineDesign() and spline.des() in package splines have a new option sparse which can be used for efficient construction of a sparse B-spline design matrix (via Matrix).
  • norm() now allows type = "2" (the ‘spectral’ or 2-norm) as well, mainly for didactical completeness.
  • pmin() and pmax()) now also work when one of the inputs is of length zero and others are not, returning a zero-length vector, analogously to, say, +.
  • colorRamp() (and hence colorRampPalette()) now also works for the boundary case of just one color when the ramp is flat.
  • qqline() has new optional arguments distribution, probs and qtype, following the example of lattice's panel.qqmathline().
  • .C() gains some protection against the misuse of character vector arguments. (An all too common error is to pass character(N), which initializes the elements to "", and then attempt to edit the strings in-place, sometimes forgetting to terminate them.)
  • Calls to the new function globalVariables() in package utils declare that functions and other objects in a package should be treated as globally defined, so that CMD check will not note them.
  • print(packageDescription(*)) trims the Collate field by default.
  • The included copy of zlib has been updated to version 1.2.7.
  • A new option "show.error.locations" has been added. When set to TRUE, error messages will contain the location of the most recent call containing source reference information. (Other values are supported as well; see ?options.)
  • The NA warning messages from e.g. pchisq() now report the call to the closure and not that of the .Internal.
  • Added Polish translations by Łukasz Daniel.
  • PERFORMANCE IMPROVEMENTS:
  • In package parallel, makeForkCluster() and the multicore-based functions use native byte-order for serialization (deferred from 2.15.0).
  • lm.fit(), lm.wfit(), glm.fit() and lsfit() do less copying of objects, mainly by using .Call() rather than .Fortran().
  • .C() and .Fortran() do less copying: arguments which are raw, logical, integer, real or complex vectors and are unnamed are not copied before the call, and (named or not) are not copied after the call. Lists are no longer copied (they are supposed to be used read-only in the C code).
  • tabulate() makes use of .C(DUP = FALSE) and hence does not copy bin. (Suggested by Tim Hesterberg.) It also avoids making a copy of a factor argument bin.
  • Other functions (often or always) doing less copying include cut(), dist(), the complex case of eigen(), hclust(), image(), kmeans(), loess(), stl() and svd(LINPACK = TRUE).
  • There is less copying when using primitive replacement functions such as names(), attr() and attributes().
  • DEPRECATED AND DEFUNCT:
  • The converters for use with .C() (see ?getCConverterDescriptions) are deprecated: use the .Call() interface instead. There are no known examples (they were never fully documented).
  • UTILITIES:
  • For R CMD check, a few people have reported problems with junctions on Windows (although they were tested on Windows 7, XP and Server 2008 machines and it is unknown under what circumstances the problems occur). Setting the environment variable R_WIN_NO_JUNCTIONS to a non-empty value (e.g. in ‘~/.R/check.Renviron’) will force copies to be used instead.
  • INSTALLATION:
  • R CMD INSTALL with _R_CHECK_INSTALL_DEPENDS_ set to a true value (as done by R CMD check --as-cran) now restricts the packages available when lazy-loading as well as when test-loading (since packages such as ETLUtils and agsemisc had top-level calls to library() for undeclared packages). 
This check is now also available on Windows.
  • C-LEVEL FACILITIES:
  • C entry points mkChar and mkCharCE now check that the length of the string they are passed does not exceed 2^31-1 bytes: they used to overflow with unpredictable consequences.
  • C entry points R_GetCurrentSrcref and R_GetSrcFilename have been added to the API to allow debuggers access to the source references on the stack.
  • BUG FIXES:
  • lsfit() lost the names from the residuals.
  • More cases in which merge() could create a data frame with duplicate column names now give warnings. Cases where names specified in by match multiple columns are errors.
  • Nonsense uses such as seq(1:50, by = 5) (from package plotrix) and seq.int(1:50, by = 5) are now errors.
  • The residuals in the 5-number summary printed by summary() on an "lm" object are now explicitly labelled as weighted residuals when non-constant weights are present. (Wish of PR#14840.)
  • tracemem() reported that all objects were copied by .C() or .Fortran() whereas only some object types were ever copied. 
It also reported and marked as copies some transformations such as rexp(n, x): it no longer does so.
  • The plot() method for class "stepfun" only used the optional xval argument to compute xlim and not the points at which to plot (as documented). (PR#14864)
  • Names containing characters which need to be escaped were not deparsed properly. (PR#14846)
  • Trying to update (recommended) packages in ‘R_HOME/library’ without write access is now dealt with more gracefully. Further, such package updates may be skipped (with a warning), when a newer installed version is already going to be used from .libPaths(). (PR#14866)
  • hclust() is now fast again (as up to end of 2003), with a different fix for the "median"/"centroid" problem. (PR#4195).
  • get_all_vars() failed when the data came entirely from vectors in the global environment. (PR#14847)
  • R CMD check with _R_CHECK_NO_RECOMMENDED_ set to a true value (as done by the --as-cran option) could issue false errors if there was an indirect dependency on a recommended package.
  • formatC() uses the C entry point str_signif which could write beyond the length allocated for the output string.
  • Missing default argument added to implicit S4 generic for backsolve(). (PR#14883)
  • Some bugs have been fixed in handling load actions that could fail to export assigned items or generate spurious warnings in CMD check on loading.
  • For tiff(type = "windows"), the numbering of per-page files except the last was off by one.
  • On Windows, loading package stats (which is done for a default session) would switch line endings on ‘stdout’ and ‘stderr’ from CRLF to LF. This affected Rterm and R CMD BATCH.
  • On Windows, the compatibility function x11() had not kept up with changes to windows(), and issued warnings about bad parameters. (PR#14880)
  • On Windows, the Sys.glob() function did not handle UNC paths as it was designed to try to do. (PR#14884)
  • In package parallel, clusterApply() and similar failed to handle a (pretty pointless) length-1 argument. (PR#14898)
  • Quartz Cocoa display reacted asynchronously to dev.flush() which means that the redraw could be performed after the plot has been already modified by subsequent code. The redraw is now done synchronously in dev.flush() to allow animations without sleep cycles.
  • Source locations reported in traceback() were incorrect when byte-compiled code was on the stack.
  • plogis(x, lower = FALSE, log.p = TRUE) no longer underflows early for large x (e.g. 800).
  • ?Arithmetic's “1 ^ y and y ^ 0 are 1, always” now also applies for integer vectors y.
  • X11-based pixmap devices like png(type = "Xlib") were trying to set the cursor style, which triggered some warnings and hangs.
  • Code executed by the built-in HTTP server no longer allows other HTTP clients to re-enter R until the current worker evaluation finishes, to prevent cascades.
  • The plot() and Axis() methods for class "table" now respect graphical parameters such as cex.axis. (Reported by Martin Becker.)
  • Under some circumstances package.skeleton() would give out progress reports that could not be translated and so were displayed by question marks. Now they are always in English. (This was seen for CJK locales on Windows, but may have occurred elsewhere.)
  • The evaluator now keeps track of source references outside of functions, e.g. when source() executes a script.
  • The replacement method for window() now works correctly for multiple time series of class "mts". (PR#14925)
  • is.unsorted() gave incorrect results on non-atomic objects such as data frames. (Reported by Matthew Dowle.)
  • The value returned by tools::psnice() for invalid pid values was not always NA as documented.
  • Closing an X11() window while locator() was active could abort the R process.
  • getMethod(f, sig) produced an incorrect error message in some cases when f was not a string).
  • Using a string as a “call” in an error condition with options(showErrorCalls=TRUE) could cause a segfault. (PR#14931)
  • The string "infinity" allowed by C99 was not accepted as a numerical string value by e.g. scan() and as.character(). (PR#14933)
  • In legend(), setting some entries of lwd to NA was inconsistent (depending on the graphics device) in whether it would suppress those lines; now it consistently does so. (PR#14926)
  • by() failed for a zero-row data frame. (Reported by Weiqiang Qian)
  • Yates correction in chisq.test() could be bigger than the terms it corrected, previously leading to an infinite test statistic in some corner cases which are now reported as NaN.
  • xgettext() and related functions sometimes returned items that were not strings for translation. (PR#14935)
  • plot(, which=5) now correctly labels the factor level combinations for the special case where all h[i,i] are the same. (PR#14837)

New in R for Mac 2.15.0 (Apr 2, 2012)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • The behaviour of unlink(recursive = TRUE) for a symbolic link to a directory has changed: it now removes the link rather than the directory contents (just as rm -r does).
  • On Windows it no longer follows reparse points (including junctions and symbolic links).
  • NEW FEATURES:
  • Environment variable RD2DVI_INPUTENC has been renamed to RD2PDF_INPUTENC.
  • .Deprecated() becomes a bit more flexible, getting an old argument.
  • Even data-only packages without R code need a namespace and so may need to be installed under R 2.14.0 or later.
  • assignInNamespace() has further restrictions on use apart from at top-level, as its help page has warned. Expect it to be disabled from programmatic use in the future.
  • system() and system2() when capturing output report a non-zero status in the new "status" attribute.
  • kronecker() now has an S4 generic in package methods on which packages can set methods. It will be invoked by X %x% Y if either X or Y is an S4 object.
  • pdf() accepts forms like file = "|lpr" in the same way as postscript().
  • pdf() accepts file = NULL. This means that the device does NOT create a PDF file (but it can still be queried, e.g., for font metric info).
  • format() (and hence print()) on "bibentry" objects now uses options("width") to set the output width.
  • legend() gains a text.font argument. (Suggested by Tim Paine, PR#14719.)
  • nchar() and nzchar() no longer accept factors (as integer vectors). (Wish of PR#6899.)
  • summary() behaves slightly differently (or more precisely, its print() method does). For numeric inputs, the number of NAs is printed as an integer and not a real. For dates and datetimes, the number of NAs is included in the printed output (the latter being the wish of PR#14720).
  • The "data.frame" method is more consistent with the default method: in particular it now applies zapsmall() to numeric/complex summaries.
  • The number of items retained with options(warn = 0) can be set by options(nwarnings=).
  • There is a new function assignInMyNamespace() which uses the namespace of the function it is called from.
  • attach() allows the default name for an attached file to be overridden.
  • bxp(), the work horse of boxplot(), now uses a more sensible default xlim in the case where at is specified differently from 1:n, see the discussion on R-devel, .
  • New function paste0(), an efficient version of paste(*, sep=""), to be used in many places for more concise (and slightly more efficient) code.
  • Function setClass() in package methods now returns, invisibly, a generator function for the new class, slightly preferred to calling new(), as explained on the setClass help page.
  • The "dendrogram" method of str() now takes its default for last.str from option str.dendrogram.last.
  • New simple fitted() method for "kmeans" objects.
  • The traceback() function can now be called with an integer argument, to display a current stack trace. (Wish of PR#14770.)
  • setGeneric() calls can be simplified when creating a new generic function by supplying the default method as the def argument. See ?setGeneric.
  • serialize() has a new option xdr = FALSE which will use the native byte-order for binary serializations. In scenarios where only little-endian machines are involved (these days, close to universal) and (un)serialization takes an appreciable amount of time this may speed up noticeably transferring data between systems.
  • The internal (un)serialization code is faster for long vectors, particularly with XDR on some platforms. (Based on a suggested patch by Michael Spiegel.)
  • For consistency, circles with zero radius are omitted by points() and grid.circle(). Previously this was device-dependent, but they were usually invisible.
  • NROW(x) and NCOL(x) now work whenever dim(x) looks appropriate, e.g., also for more generalized matrices.
  • PCRE has been updated to version 8.30.
  • The internal R_Srcref variable is now updated before the browser stops on entering a function. (Suggestion of PR#14818.)
  • There are 'bare-bones' functions .colSums(), .rowSums(), .colMeans() and .rowMeans() for use in programming where ultimate speed is required.
  • The formerly internal function .package_dependencies() from package tools for calculating (recursive) (reverse) dependencies on package databases has been renamed to package_dependencies() and is now exported.
  • There is a new function optimHess() to compute the (approximate) Hessian for an optim() solution if hessian = TRUE was forgotten.
  • .filled.contour() is a 'bare-bones' function to add a filled-contour rectangular plot to an already prepared plot region.
  • The stepping in debugging and single-step browsing modes has changed slightly: now left braces at the start of the body are stepped over for if statements as well as for for and while statements. (Wish of PR#14814.)
  • library() no longer warns about a conflict with a function from package:base if the function has the same code as the base one but with a different environment. (An example is Matrix::det().)
  • When deparsing very large language objects, as.character() now inserts newlines after each line of approximately 500 bytes, rather than truncating to the first line.
  • New function rWishart() generates Wishart-distributed random matrices.
  • Packages may now specify actions to be taken when the package is loaded (setLoadActions()).
  • options(max.print = Inf) and similar now give an error (instead of warnings later).
  • The "difftime" replacement method of units tries harder to preserve other attributes of the argument. (Wish of PR#14839.)
  • poly(raw = TRUE) no longer requires more unique points than the degree. (Requested by John Fox.)
  • PACKAGE parallel:
  • There is a new function mcmapply(), a parallel version of mapply(), and a wrapper mcMap(), a parallel version of Map().
  • A default cluster can be registered by the new function setDefaultCluster(): this will be used by default in functions such as parLapply().
  • clusterMap() has a new argument .scheduling to allow the use of load-balancing.
  • There are new load-balancing functions parLapplyLB() and parSapplyLB().
  • makePSOCKCluster() has a new option useXDR = FALSE which can be used to avoid byte-shuffling for serialization when all the nodes are known to be little-endian (or all big-endian).
  • PACKAGE INSTALLATION:
  • Non-ASCII vignettes without a declared encoding are no longer accepted.
  • C/C++ code in packages is now compiled with -NDEBUG to mitigate against the C/C++ function assert being called in production use. Developers can turn this off during package development with PKG_CPPFLAGS = -UNDEBUG.
  • R CMD INSTALL has a new option --dsym which on Mac OS X (Darwin) dumps the symbols alongside the .so file: this is helpful when debugging with valgrind (and especially when installing packages into R.framework). [This can also be enabled by setting the undocumented environment variable PKG_MAKE_DSYM, since R 2.12.0.]
  • R CMD INSTALL will test loading under all installed sub-architectures even for packages without compiled code, unless the flag --no-multiarch is used. (Pure R packages can do things which are architecture-dependent: in the case which prompted this, looking for an icon in a Windows R executable.)
  • There is a new option install.packages(type = "both") which tries source packages if binary packages are not available, on those platforms where the latter is the default.
  • The meaning of install.packages(dependencies = TRUE) has changed: it now means to install the essential dependencies of the named packages plus the Suggests, but only the essential dependencies of dependencies. To get the previous behaviour, specify dependencies as a character vector.
  • R CMD INSTALL --merge-multiarch is now supported on OS X and other Unix-alikes using multiple sub-architectures.
  • R CMD INSTALL --libs-only now by default does a test load on Unix-alikes as well as on Windows: suppress with --no-test-load.
  • UTILITIES:
  • R CMD check now gives a warning rather than a note if it finds inefficiently compressed datasets. With bzip2 and xz compression having been available since R 2.10.0, it only exceptionally makes sense to not use them.
  • The environment variable _R_CHECK_COMPACT_DATA2_ is no longer consulted: the check is always done if _R_CHECK_COMPACT_DATA_ has a true value (its default).
  • Where multiple sub-architectures are to be tested, R CMD check now runs the examples and tests for all the sub-architectures even if one fails.
  • R CMD check can optionally report timings on various parts of the check: this is controlled by environment variable _R_CHECK_TIMINGS_ documented in 'Writing R Extensions'. Timings (in the style of R CMD BATCH) are given at the foot of the output files from running each test and the R code in each vignette.
  • There are new options for more rigorous testing by R CMD check selected by environment variables - see the 'Writing R Extensions' manual.
  • R CMD check now warns (rather than notes) on undeclared use of other packages in examples and tests: increasingly people are using the metadata in the DESCRIPTION file to compute information about packages, for example reverse dependencies.
  • The defaults for some of the options in R CMD check (described in the 'R Internals' manual) have changed: checks for unsafe and .Internal() calls and for partial matching of arguments in R function calls are now done by default.
  • R CMD check has more comprehensive facilities for checking compiled code and so gives fewer reports on entry points linked into .so/.dll files from libraries (including C++ and Fortran runtimes).
  • Checking compiled code is now done on FreeBSD (as well as the existing supported platforms of Linux, Mac OS X, Solaris and Windows).
  • R CMD build has more options for --compact-vignettes: see R CMD build --help.
  • R CMD build has a new option --md5 to add an MD5 file (as done by CRAN): this is used by R CMD INSTALL to check the integrity of the distribution.
  • If this option is not specified, any existing (and probably stale) MD5 file is removed.
  • DEPRECATED AND DEFUNCT:
  • R CMD Rd2dvi is now defunct: use R CMD Rd2pdf.
  • Options such --max-nsize, --max-vsize and the function mem.limits() are now defunct. (Options --min-nsize and --min-vsize remain available.)
  • Use of library.dynam() without specifying all the first three arguments is now disallowed.
  • Use of an argument chname in library.dynam() including the extension .so or .dll (which was never allowed according to the help page) is defunct. This also applies to library.dynam.unload() and to useDynLib directives in NAMESPACE files.
  • The internal functions .readRDS() and .saveRDS() are now defunct.
  • The off-line help() types "postscript" and "ps" are defunct.
  • Sys.putenv(), replaced and deprecated in R 2.5.0, is finally removed.
  • Some functions/objects which have been defunct for five or more years have been removed completely. These include .Alias(), La.chol(), La.chol2inv(), La.eigen(), Machine(), Platform(), Version, codes(), delay(), format.char(), getenv(), httpclient(), loadURL(), machine(), parse.dcf(), printNoClass(), provide(), read.table.url(), restart(), scan.url(), symbol.C(), symbol.For() and unix().
  • The ENCODING argument to .C() is deprecated. It was intended to smooth the transition to multi-byte character strings, but can be replaced by the use of iconv() in the rare cases where it is still needed.
  • INSTALLATION:
  • Building with a positive value of --with-valgrind-instrumentation now also instruments logical, complex and raw vectors.
  • There is experimental support for _link-time optimization_ with gcc 4.5.0 or later on platforms which support it.
  • C-LEVEL FACILITIES:
  • Passing R objects other than atomic vectors, functions, lists and environments to .C() is now deprecated and will give a warning. Most cases (especially NULL) are actually coding errors. NULL will be disallowed in future.
  • .C() now passes a pairlist as a SEXP to the compiled code. This is as was documented, but pairlists were in reality handled differently as a legacy from the early days of R.
  • call_R and call_S are deprecated. They still exist in the headers and as entry points, but are no longer documented and should not be used for new code.
  • BUG FIXES:
  • str(x, width) now obeys its width argument also for function headers and other objects x where deparse() is applied.
  • The convention for x %/% 0L for integer-mode x has been changed from 0L to NA_integer_. (PR#14754)
  • The exportMethods directive in a NAMESPACE file now exports S4 generics as necessary, as the extensions manual said it does. The manual has also been updated to be a little more informative on this point.
  • It is now required that there is an S4 generic (imported or created in the package) when methods are to be exported.
  • Reference methods cannot safely use non-exported entries in the namespace. We now do not do so, and warn in the documentation.
  • The namespace import code was warning when identical S4 generic functions were imported more than once, but should not (reported by Brian Ripley, then Martin Morgan).
  • merge() is no longer allowed (in some ways) to create a data frame with duplicate column names (which confused PR#14786).
  • Fixes for rendering raster images on X11 and Windows devices when the x-axis or y-axis scale is reversed.
  • getAnywhere() found S3 methods as seen from the utils namespace and not from the environment from which it was called.
  • selectMethod(f, sig) would not return inherited group methods when caching was off (as it is by default).
  • dev.copy2pdf(out.type = "cairo") gave an error. (PR#14827)
  • Virtual classes (e.g., class unions) had a NULL prototype even if that was not a legal subclass. See ?setClassUnion.
  • The C prototypes for zdotc and zdotu in R_ext/BLAS.h have been changed to the more modern style rather than that used by f2c. (Patch by Berwin Turlach.)
  • isGeneric() produced an error for primitives that can not have methods.
  • .C() or .Fortran() had a lack-of-protection error if the registration information resulted in an argument being coerced to another type.
  • boxplot(x=x, at=at) with non finite elements in x and non integer at could not generate a warning but failed.
  • heatmap(x, symm=TRUE, RowSideColors=*) no longer draws the colors in reversed order.
  • predict() was incorrect in the multivariate case, for p >= 2.
  • print(x, max=m) is now consistent when x is a "Date"; also the "reached ... max.print .." messages are now consistently using single brackets.
  • Closed the tag in pages generated by Rd2HTML(). (PR#14841.)
  • Axis tick marks could go out of range when a log scale was used. (PR#14833.)
  • Signature objects in methods were not allocated as S4 objects (caused a problem with trace() reported by Martin Morgan).

New in R for Mac 2.14.2 (Mar 1, 2012)

  • NEW FEATURES:
  • The internal untar() (as used by default by R CMD INSTALL) now knows about some pax headers which bsdtar (e.g., the default tar for Mac OS >= 10.6) can incorrectly include in tar files, and will skip them with a warning.
  • PCRE has been upgraded to version 8.21: as well as bug fixes and greater Perl compatibility, this adds a JIT pattern compiler, about which PCRE's news says 'large performance benefits can be had in many situations'. This is supported on most but not all R platforms.
  • Function compactPDF() in package tools now takes the default for argument gs_quality from environment variable GS_QUALITY: there is a new value "none", the ultimate default, which prevents GhostScript being used in preference to qpdf just because environment variable R_GSCMD is set. If R_GSCMD is unset or set to "", the function will try to find a suitable GhostScript executable.
  • The included version of zlib has been updated to 1.2.6.
  • For consistency with the logLik() method, nobs() for "nls" files now excludes observations with zero weight. (Reported by Berwin Turlach.)
  • UTILITIES:
  • R CMD check now reports by default on licenses not according to the description in 'Writing R Extensions'.
  • R CMD check has a new option --as-cran to turn on most of the customizations that CRAN uses for its incoming checks.
  • PACKAGE INSTALLATION:
  • R CMD INSTALL will now no longer install certain file types from inst/doc: these are almost certainly mistakes and for some packages are wasting a lot of space. These are Makefile, files generated by running LaTeX, and unless the package uses a vignettes directory, PostScript and image bitmap files.
  • Note that only PDF vignettes have ever been supported: some of these files come from DVI/PS output from the Sweave defaults prior to R 2.13.0.
  • BUG FIXES:
  • R configured with --disable-openmp would mistakenly set HAVE_OPENMP (internal) and SUPPORT_OPENMP (in Rconfig.h) even though no OpenMP flags were populated.
  • The getS3method() implementation had an old computation to find an S4 default method.
  • readLines() could overflow a buffer if the last line of the file was not terminated. (PR#14766)
  • R CMD check could miss undocumented S4 objects in packages which used S4 classes but did not Depends: methods in their DESCRIPTION file.
  • The HTML Help Search page had malformed links. (PR#14769)
  • A couple of instances of lack of protection of SEXPs have been squashed. (PR#14772, PR#14773)
  • image(x, useRaster=TRUE) misbehaved on single-column x. (PR#14774)
  • Negative values for options("max.print") or the max argument to print.default() caused crashes. Now the former are ignored and the latter trigger an error. (PR#14779)
  • The text of a function body containing more than 4096 bytes was not properly saved by the parser when entered at the console.
  • Forgetting the #endif tag in an Rd file could cause the parser to go into a loop. (Reported by Hans-Jorg Bibiko.)
  • str(*, ....., strict.width="cut") now also obeys list.len = n. (Reported by S"oren Vogel.)
  • Printing of arrays did not have enough protection (C level), e.g., in the context of capture.output(). (Reported by Herv'e Pag`es and Martin Morgan.)
  • pdf(file = NULL) would produce a spurious file named NA. (PR#14808)
  • list2env() did not check the type of its envir argument. (PR#14807)
  • svg() could segfault if called with a non-existent file path. (PR#14790)
  • make install can install to a path containing + characters. (PR#14798)
  • The edit() function did not respect the options("keep.source") setting. (Reported by Cleridy Lennert.)
  • predict.lm(*, type="terms", terms=*, se.fit=TRUE) did not work. (PR#14817)
  • There is a partial workaround for errors in the TRE regular-expressions engine with named classes and repeat counts of at least 2 in a MBCS locale (PR#14408): these are avoided when TRE is in 8-bit mode (e.g. for useBytes = TRUE and when all the data are ASCII).
  • The C function R_ReplDLLdo1() did not call top-level handlers.
  • The Quartz device was unable to detect window sessions on Mac OS X 10.7 (Lion) and higher and thus it was not used as the default device on the console. Since Lion any application can use window sessions, so Quartz will now be the default device if the user's window session is active and R is not run via ssh which is at least close to the behavior in prior OS X versions.
  • mclapply() would fail in code assembling the translated error message if some (but not all) cores encountered an error.
  • format.POSIXlt(x) raised an arithmetic exception when x was an invalid object of class "POSIXlt" and parts were empty.
  • installed.packages() has some more protection against package installs going on in parallel.
  • .Primitive() could be mis-used to call .Internal() entry points.

New in R for Mac 2.12.2 (Feb 27, 2011)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • Complex arithmetic (notably z^n for complex z and integer n) gave incorrect results since R 2.10.0 on platforms without C99 complex support. This and some lesser issues in trignometric functions have been corrected.
  • Such platforms were rare (we know of Cygwin and FreeBSD). However, because of new compiler optimizations in the way complex arguments are handled, the same code was selected on x86_64 Linux with gcc 4.5.x at the default -O2 optimization (but not at -O).
  • There is a workaround for crashes seen with several packages on systems using zlib 1.2.5: see the INSTALLATION section.
  • NEW FEATURES:
  • PCRE has been updated to 8.12 (two bug-fix releases since 8.10).
  • rep(), seq(), seq.int() and seq_len() report more often when the first element is taken of an argument of incorrect length.
  • The Cocoa back-end for the quartz() graphics device on Mac OS X provides a way to disable event loop processing temporarily (useful, e.g., for forked instances of R).
  • kernel()'s default for m was not appropriate if coef was a set of coefficients. (Reported by Pierre Chausse.)
  • bug.report() has been updated for the current R bug tracker, which does not accept emailed submissions.
  • R CMD check now checks for the correct use of $(LAPACK_LIBS) (as well as $(BLAS_LIBS)), since several CRAN recent submissions have ignored ‘Writing R Extensions’.
  • INSTALLATION:
  • The zlib sources in the distribution are now built with all symbols remapped: this is intended to avoid problems seen with packages such as XML and rggobi which link to zlib.so.1 on systems using zlib 1.2.5.
  • The default for FFLAGS and FCFLAGS with gfortran on x86_64 Linux has been changed back to -g -O2: however, setting -g -O may still be needed for gfortran 4.3.x.
  • PACKAGE INSTALLATION:
  • A LazyDataCompression field in the DESCRIPTION file will be used to set the value for the --data-compress option of R CMD INSTALL.
  • Files R/sysdata.rda of more than 1Mb are now stored in the lazyload daabase using xz compression: this for example halves the installed size of package Imap.
  • R CMD INSTALL now ensures that directories installed from inst have search permission for everyone.
  • It no longer installs files inst/doc/Rplots.ps and inst/doc/Rplots.pdf. These are almost certainly left-overs from Sweave runs, and are often large.
  • DEPRECATED & DEFUNCT:
  • The ‘experimental’ alternative specification of a name space via .Export() etc is now deprecated.
  • zip.file.extract() is now deprecated.
  • Zip-ing data sets in packages (and hence R CMD INSTALL --use-zip-data and the ZipData: yes field in a DESCRIPTION file) is deprecated: using efficiently compressed .rda images and lazy-loading of data has superseded it.
  • BUG FIXES:
  • identical() could in rare cases generate a warning about non-pairlist attributes on CHARSXPs. As these are used for internal purposes, the attribute check should be skipped. (Reported by Niels Richard Hansen).
  • If the filename extension (usually .Rnw) was not included in a call to Sweave(), source references would not work properly and the keep.source option failed. (PR#14459)
  • format.data.frame() now keeps zero character column names.
  • pretty(x) no longer raises an error when x contains solely non-finite values. (PR#14468)
  • The plot.TukeyHSD() function now uses a line width of 0.5 for its reference lines rather than lwd = 0 (which caused problems for some PDF and PostScript viewers).
  • The big.mark argument to prettyNum(), format(), etc. was inserted reversed if it was more than one character long.
  • R CMD check failed to check the filenames under man for Windows' reserved names.
  • The "Date" and "POSIXt" methods for seq() could overshoot when to was supplied and by was specified in months or years.
  • The internal method of untar() now restores hard links as file copies rather than symbolic links (which did not work for cross-directory links).
  • unzip() did not handle zip files which contained filepaths with two or more leading directories which were not in the zipfile and did not already exist. (It is unclear if such zipfiles are valid and the third-party C code used did not support them, but PR#14462 created one.)
  • combn(n, m) now behaves more regularly for the border case m = 0. (PR#14473)
  • The rendering of numbers in plotmath expressions (e.g. expression(10^2)) used the current settings for conversion to strings rather than setting the defaults, and so could be affected by what has been done before. (PR#14477)
  • The methods of napredict() and naresid() for na.action = na.exclude fits did not work correctly in the very rare event that every case had been omitted in the fit. (Reported by Simon Wood.)
  • weighted.residuals(drop0=TRUE) returned a vector when the residuals were a matrix (e.g. those of class "mlm"). (Reported by Bill Dunlap.)
  • Package HTML index files /html/00Index.html were generated with a stylesheet reference that was not correct for static browsing in libraries.
  • ccf(na.action = na.pass) was not implemented.
  • The parser accepted some incorrect numeric constants, e.g. 20x2. (Reported by Olaf Mersmann.)
  • format(*, zero.print) did not always replace the full zero parts.
  • Fixes for subsetting or subassignment of "raster" objects when not both i and j are specified.
  • R CMD INSTALL was not always respecting the ZipData: yes field of a DESCRIPTION file (although this is frequently incorrectly specified for packages with no data or which specify lazy-loading of data).
  • R CMD INSTALL --use-zip-data was incorrectly implemented as --use-zipdata since R 2.9.0.
  • source(file, echo=TRUE) could fail if the file contained #line directives. It now recovers more gracefully, but may still display the wrong line if the directive gives incorrect information.
  • atan(1i) returned NaN+Infi (rather than 0+Infi) on platforms without C99 complex support.
  • library() failed to cache S4 metadata (unlike loadNamespace()) causing failures in S4-using packages without a namespace (e.g. those using reference classes).
  • The function qlogis(lp, log.p=TRUE) no longer prematurely overflows to Inf when exp(lp) is close to 1.
  • Updating S4 methods for a group generic function requires resetting the methods tables for the members of the group (patch contributed by Martin Morgan).
  • In some circumstances (including for package XML), R CMD INSTALL installed version-control directories from source packages.
  • Added PROTECT calls to some constructed expressions used in C level eval calls.
  • utils:::create.post() (used by bug.report() and help.request()) failed to quote arguments to the mailer, and so often failed.
  • bug.report() was naive about how to extract maintainer email addresses from package descriptions, so would often try mailing to incorrect addresses.
  • debugger() could fail to read the environment of a call to a function with a ... argument. (Reported by Charlie Roosen.)
  • prettyNum(c(1i, NA), drop0=TRUE) or str(NA_complex_) now work correctly.

New in R for Mac 2.12.1 (Dec 17, 2010)

  • NEW FEATURES:
  • The DVI/PDF reference manual now includes the help pages for all the standard packages: splines, stats4 and tcltk were previously omitted (intentionally).
  • has been added to the default set of repositories known to setRepositories().
  • xz-utils has been updated to version 5.0.0.
  • reshape() now makes use of sep when forming names during reshaping to wide format. (PR#14435)
  • legend() allows the length of lines to be set by the end user _via_ the new argument seg.len.
  • New reference class utility methods copy(), field(), getRefClass() and getClass() have been added.
  • When a character value is used for the EXPR argument in switch(), a warning is given if more than one unnamed alternative value is given. This will become an error in R 2.13.0.
  • StructTS(type = "BSM") now allows series with just two seasons. (Reported by Birgit Erni.)
  • INSTALLATION:
  • The PDF reference manual is now built as PDF version 1.5 with object compression, which on platforms for which this is not the default (notably MiKTeX) halves its size.
  • Variable FCLIBS can be set during configuration, for any additional library flags needed when linking a shared object with the Fortran 9x compiler. (Needed with Solaris Studio 12.2.)
  • BUG FIXES:
  • seq.int() no longer sometimes evaluates arguments twice. (PR#14388)
  • The data.frame method of format() failed if a column name was longer than 256 bytes (the maximum length allowed for an R name).
  • predict(, type ="terms", ...) failed if both terms and interval were specified. (Reported by Bill Dunlap.)
  • Also, if se.fit = TRUE the standard errors were reported for all terms, not just those selected by a non-null terms.
  • The TRE regular expressions engine could terminate R rather than give an error when given certain invalid regular expressions. (PR#14398)
  • cmdscale(eig = TRUE) was documented to return n-1 eigenvalues but in fact only returned k. It now returns all n eigenvalues.
  • cmdscale(add = TRUE) failed to centre the return configuration and sometimes lost the labels on the points. Its return value was described wrongly (it is always a list and contains component ac).
  • promptClass() in package methods now works for reference classes and gives a suitably specialized skeleton of documentation.
  • Also, callSuper() now works via the methods() invocation as well as for initially specified methods.
  • download.file() could leave the destination file open if the URL was not able to be opened. (PR#14414)
  • Assignment of an environment to functions or as an attribute to other objects now works for S4 subclasses of "environment".
  • Use of [[

New in R for Mac 2.12.0 (Oct 19, 2010)

  • NEW FEATURES:
  • Reading a packages's CITATION file now defaults to ASCII rather than Latin-1: a package with a non-ASCII CITATION file should declare an encoding in its DESCRIPTION file and use that encoding for the CITATION file.
  • difftime() now defaults to the "tzone" attribute of "POSIXlt" objects rather than to the current timezone as set by the default for the tz argument. (Wish of PR#14182.)
  • pretty() is now generic, with new methods for "Date" and "POSIXt" classes (based on code contributed by Felix Andrews).
  • unique() and match() are now faster on character vectors where all elements are in the global CHARSXP cache and have unmarked encoding (ASCII). Thanks to Matthew Dowle for suggesting improvements to the way the hash code is generated in unique.c.
  • The enquote() utility, in use internally, is exported now.
  • .C() and .Fortran() now map non-zero return values (other than NA_LOGICAL) for logical vectors to TRUE: it has been an implicit assumption that they are treated as true.
  • The print() methods for "glm" and "lm" objects now insert linebreaks in long calls in the same way that the print() methods for "summary.[g]lm" objects have long done. This does change the layout of the examples for a number of packages, e.g. MASS. (PR#14250)
  • constrOptim() can now be used with method "SANN". (PR#14245)
  • It gains an argument hessian to be passed to optim(), which allows all the ... arguments to be intended for f() and grad(). (PR#14071)
  • curve() now allows expr to be an object of mode "expression" as well as "call" and "function".
  • The "POSIX[cl]t" methods for Axis() have been replaced by a single method for "POSIXt".
  • There are no longer separate plot() methods for "POSIX[cl]t" and "Date": the default method has been able to handle those classes for a long time. This _inter alia_ allows a single date-time object to be supplied, the wish of PR#14016.
  • The methods had a different default ("") for xlab.
  • Classes "POSIXct", "POSIXlt" and "difftime" have generators .POSIXct(), .POSIXlt() and .difftime(). Package authors are advised to make use of them (they are available from R 2.11.0) to proof against planned future changes to the classes.
  • The ordering of the classes has been changed, so "POSIXt" is now the second class. See the document ‘Updating packages for changes in R 2.12.x’ on for the consequences for a handful of CRAN packages.
  • The "POSIXct" method of as.Date() allows a timezone to be specified (but still defaults to UTC).
  • New list2env() utility function as an inverse of as.list() and for fast multi-assign() to existing environment. as.environment() is now generic and uses list2env() as list method.
  • There are several small changes to output which ‘zap’ small numbers, e.g. in printing quantiles of residuals in summaries from "lm" and "glm" fits, and in test statisics in print.anova().
  • Special names such as "dim", "names", etc, are now allowed as slot names of S4 classes, with "class" the only remaining exception.
  • File .Renviron can have architecture-specific versions such as .Renviron.i386 on systems with sub-architectures.
  • installed.packages() has a new argument subarch to filter on sub-architecture.
  • The summary() method for packageStatus() now has a separate print() method.
  • The default summary() method returns an object inheriting from class "summaryDefault" which has a separate print() method that calls zapsmall() for numeric/complex values.
  • The startup message now includes the platform and if used, sub-architecture: this is useful where different (sub-)architectures run on the same OS.
  • The getGraphicsEvent() mechanism now allows multiple windows to return graphics events, through the new functions setGraphicsEventHandlers(), setGraphicsEventEnv(), and getGraphicsEventEnv(). (Currently implemented in the windows() and X11() devices.)
  • tools::texi2dvi() gains an index argument, mainly for use by R CMD Rd2pdf.
  • It avoids the use of texindy by texinfo's texi2dvi >= 1.157, since that does not emulate 'makeindex' well enough to avoid problems with special characters (such as (, {, !) in indices.
  • The ability of readLines() and scan() to re-encode inputs to marked UTF-8 strings on Windows since R 2.7.0 is extended to non-UTF-8 locales on other OSes.
  • scan() gains a fileEncoding argument to match read.table().
  • points() and lines() gain "table" methods to match plot(). (Wish of PR#10472.)
  • Sys.chmod() allows argument mode to be a vector, recycled along paths.
  • There are |, & and xor() methods for classes "octmode" and "hexmode", which work bitwise.
  • Environment variables R_DVIPSCMD, R_LATEXCMD, R_MAKEINDEXCMD, R_PDFLATEXCMD are no longer used nor set in an R session. (With the move to tools::texi2dvi(), the conventional environment variables LATEX, MAKEINDEX and PDFLATEX will be used. options("dvipscmd") defaults to the value of DVIPS, then to "dvips".)
  • New function isatty() to see if terminal connections are redirected.
  • summaryRprof() returns the sampling interval in component sample.interval and only returns in by.self data for functions with non-zero self times.
  • print(x) and str(x) now indicate if an empty list x is named.
  • install.packages() and remove.packages() with lib unspecified and multiple libraries in .libPaths() inform the user of the library location used with a message rather than a warning.
  • There is limited support for multiple compressed streams on a file: all of [bgx]zfile() allow streams to be appended to an existing file, but bzfile() reads only the first stream.
  • Function person() in package utils now uses a given/family scheme in preference to first/middle/last, is vectorized to handle an arbitrary number of persons, and gains a role argument to specify person roles using a controlled vocabulary (the MARC relator terms).
  • Package utils adds a new "bibentry" class for representing and manipulating bibliographic information in enhanced BibTeX style, unifying and enhancing the previously existing mechanisms.
  • A bibstyle() function has been added to the tools package with default JSS style for rendering "bibentry" objects, and a mechanism for registering other rendering styles.
  • Several aspects of the display of text help are now customizable using the new Rd2txt_options() function. options("help_text_width") is no longer used.
  • Added \href tag to the Rd format, to allow hyperlinks to URLs without displaying the full URL.
  • Added \newcommand and \renewcommand tags to the Rd format, to allow user-defined macros.
  • New toRd() generic in the tools package to convert objects to fragments of Rd code, and added "fragment" argument to Rd2txt(), Rd2HTML(), and Rd2latex() to support it.
  • Directory R_HOME/share/texmf now follows the TDS conventions, so can be set as a texmf tree (‘root directory’ in MiKTeX parlance).
  • S3 generic functions now use correct S4 inheritance when dispatching on an S4 object. See ?Methods, section on “Methods for S3 Generic Functions” for recommendations and details.
  • format.pval() gains a ... argument to pass arguments such as nsmall to format(). (Wish of PR#9574)
  • legend() supports title.adj. (Wish of PR#13415)
  • Added support for subsetting "raster" objects, plus assigning to a subset, conversion to a matrix (of colour strings), and comparisons (== and !=).
  • Added a new parseLatex() function (and related functions deparseLatex() and latexToUtf8()) to support conversion of bibliographic entries for display in R.
  • Text rendering of \itemize in help uses a Unicode bullet in UTF-8 and most single-byte Windows locales.
  • Added support for polygons with holes to the graphics engine. This is implemented for the pdf(), postscript(), x11(type="cairo"), windows(), and quartz() devices (and associated raster formats), but not for x11(type="Xlib") or xfig() or pictex(). The user-level interface is the polypath() function in graphics and grid.path() in grid.
  • File NEWS is now generated at installation with a slightly different format: it will be in UTF-8 on platforms using UTF-8, and otherwise in ASCII. There is also a PDF version, NEWS.pdf, installed at the top-level of the R distribution.
  • kmeans(x, 1) now works. Further, kmeans now returns between and total sum of squares.
  • arrayInd() and which() gain an argument useNames. For arrayInd, the default is now false, for speed reasons.
  • As is done for closures, the default print method for the formula class now displays the associated environment if it is not the global environment.
  • A new facility has been added for inserting code into a package without re-installing it, to facilitate testing changes which can be selectively added and backed out. See ?insertSource.
  • New function readRenviron to (re-)read files in the format of ~/.Renviron and Renviron.site.
  • require() will now return FALSE (and not fail) if loading the package or one of its dependencies fails.
  • aperm() now allows argument perm to be a character vector when the array has named dimnames (as the results of table() calls do). Similarly, array() allows MARGIN to be a character vector. (Based on suggestions of Michael Lachmann.)
  • Package utils now exports and documents functions aspell_package_Rd_files() and aspell_package_vignettes() for spell checking package Rd files and vignettes using Aspell, Ispell or Hunspell.
  • Package news can now be given in Rd format, and news() prefers these inst/NEWS.Rd files to old-style plain text NEWS or inst/NEWS files.
  • New simple function packageVersion().
  • The PCRE library has been updated to version 8.10.
  • The standard Unix-alike terminal interface declares its name to readline as 'R', so that can be used for conditional sections in ~/.inputrc files.
  • ‘Writing R Extensions’ now stresses that the standard sections in .Rd files (other than \alias, \keyword and \note) are intended to be unique, and the conversion tools now drop duplicates with a warning.
  • The .Rd conversion tools also warn about an unrecognized type in a \docType section.
  • ecdf() objects now have a quantile() method.
  • format() methods for date-time objects now attempt to make use of a "tzone" attribute with "%Z" and "%z" formats, but it is not always possible. (Wish of PR#14358.)
  • tools::texi2dvi(file, clean = TRUE) now works in more cases (e.g. where emulation is used and when file is not in the current directory).
  • New function droplevels() to remove unused factor levels.
  • system(command, intern = TRUE) now gives an error on a Unix-alike (as well as on Windows) if command cannot be run. It reports a non-success exit status from running command as a warning.
  • On a Unix-alike an attempt is made to return the actual exit status of the command in system(intern = FALSE): previously this had been system-dependent but on POSIX-compliant systems the value return was 256 times the status.
  • system() has a new argument ignore.stdout which can be used to (portably) ignore standard output.
  • system(intern = TRUE) and pipe() connections are guaranteed to be avaliable on all builds of R.
  • Sys.which() has been altered to return "" if the command is not found (even on Solaris).
  • A facility for defining reference-based S4 classes (in the OOP style of Java, C++, etc.) has been added experimentally to package methods; see ?ReferenceClasses.
  • The predict method for "loess" fits gains an na.action argument which defaults to na.pass rather than the previous default of na.omit.
  • Predictions from "loess" fits are now named from the row names of newdata.
  • Parsing errors detected during Sweave() processing will now be reported referencing their original location in the source file.
  • New adjustcolor() utility, e.g., for simple translucent color schemes.
  • qr() now has a trivial lm method with a simple (fast) validity check.
  • An experimental new programming model has been added to package methods for reference (OOP-style) classes and methods. See ?ReferenceClasses.
  • bzip2 has been updated to version 1.0.6 (bug-fix release). --with-system-bzlib now requires at least version 1.0.6.
  • R now provides jss.cls and jss.bst (the class and bib style file for the Journal of Statistical Software) as well as RJournal.bib and Rnews.bib, and R CMD ensures that the .bst and .bib files are found by BibTeX.
  • Functions using the TAR environment variable no longer quote the value when making system calls. This allows values such as tar --force-local, but does require additional quotes in, e.g., TAR = "'/path with spaces/mytar'".
  • DEPRECATED & DEFUNCT:
  • Supplying the parser with a character string containing both octal/hex and Unicode escapes is now an error.
  • File extension .C for C++ code files in packages is now defunct.
  • R CMD check no longer supports configuration files containing Perl configuration variables: use the environment variables documented in ‘R Internals’ instead.
  • The save argument of require() now defaults to FALSE and save = TRUE is now deprecated. (This facility is very rarely actually used, and was superseded by the Depends field of the DESCRIPTION file long ago.)
  • R CMD check --no-latex is deprecated in favour of --no-manual.
  • R CMD Sd2Rd is formally deprecated and will be removed in R 2.13.0.
  • PACKAGE INSTALLATION:
  • install.packages() has a new argument libs_only to optionally pass --libs-only to R CMD INSTALL and works analogously for Windows binary installs (to add support for 64- or 32-bit Windows).
  • When sub-architectures are in use, the installed architectures are recorded in the Archs field of the DESCRIPTION file. There is a new default filter, "subarch", in available.packages() to make use of this.
  • Code is compiled in a copy of the src directory when a package is installed for more than one sub-architecture: this avoid problems with cleaning the sources between building sub-architectures.
  • R CMD INSTALL --libs-only no longer overrides the setting of locking, so a previous version of the package will be restored unless --no-lock is specified.
  • UTILITIES:
  • R CMD Rprof|build|check are now based on R rather than Perl scripts. The only remaining Perl scripts are the deprecated R CMD Sd2Rd and install-info.pl (used only if install-info is not found) as well as some maintainer-mode-only scripts.
  • *NB:* because these have been completely rewritten, users should not expect undocumented details of previous implementations to have been duplicated.
  • R CMD no longer manipulates the environment variables PERL5LIB and PERLLIB.
  • R CMD check has a new argument --extra-arch to confine tests to those needed to check an additional sub-architecture.
  • Its check for “Subdirectory 'inst' contains no files” is more thorough: it looks for files, and warns if there are only empty directories.
  • Environment variables such as R_LIBS and those used for customization can be set for the duration of checking _via_ a file ~/.R/check.Renviron (in the format used by .Renviron, and with sub-architecture specific versions such as ~/.R/check.Renviron.i386 taking precedence).
  • There are new options --multiarch to check the package under all of the installed sub-architectures and --no-multiarch to confine checking to the sub-architecture under which check is invoked. If neither option is supplied, a test is done of installed sub-architectures and all those which can be run on the current OS are used.
  • Unless multiple sub-architectures are selected, the install done by check for testing purposes is only of the current sub-architecture (_via_ R CMD INSTALL --no-multiarch).
  • It will skip the check for non-ascii characters in code or data if the environment variables _R_CHECK_ASCII_CODE_ or _R_CHECK_ASCII_DATA_ are respectively set to FALSE. (Suggestion of Vince Carey.)
  • R CMD build no longer creates an INDEX file (R CMD INSTALL does so), and --force removes (rather than overwrites) an existing INDEX file.
  • It supports a file ~/.R/build.Renviron analogously to check.
  • It now runs build-time \Sexpr expressions in help files.
  • R CMD Rd2dvi makes use of tools::texi2dvi() to process the package manual. It is now implemented entirely in R (rather than partially as a shell script).
  • R CMD Rprof now uses utils::summaryRprof() rather than Perl. It has new arguments to select one of the tables and to limit the number of entries printed.
  • R CMD Sweave now runs R with --vanilla so the environment setting of R_LIBS will always be used.
  • C-LEVEL FACILITIES:
  • lang5() and lang6() (in addition to pre-existing lang[1-4]()) convenience functions for easier construction of eval() calls. If you have your own definition, do wrap it inside #ifndef lang5 .... #endif to keep it working with old and new R.
  • Header R.h now includes only the C headers it itself needs, hence no longer includes errno.h. (This helps avoid problems when it is included from C++ source files.)
  • Headers Rinternals.h and R_ext/Print.h include the C++ versions of stdio.h and stdarg.h respectively if included from a C++ source file.
  • INSTALLATION:
  • A C99 compiler is now required, and more C99 language features will be used in the R sources.
  • Tcl/Tk >= 8.4 is now required (increased from 8.3).
  • System functions access, chdir and getcwd are now essential to configure R. (In practice they have been required for some time.)
  • make check compares the output of the examples from several of the base packages to reference output rather than the previous output (if any). Expect some differences due to differences in floating-point computations between platforms.
  • File NEWS is no longer in the sources, but generated as part of the installation. The primary source for changes is now doc/NEWS.Rd.
  • The popen system call is now required to build R. This ensures the availability of system(intern = TRUE), pipe() connections and printing from postscript().
  • The pkg-config file libR.pc now also works when R is installed using a sub-architecture.
  • R has always required a BLAS that conforms to IE60559 arithmetic, but after discovery of more real-world problems caused by a BLAS that did not, this is tested more thoroughly in this version.
  • BUG FIXES:
  • Calls to selectMethod() by default no longer cache inherited methods. This could previously corrupt methods used by as().
  • The densities of non-central chi-squared are now more accurate in some cases in the extreme tails, e.g. dchisq(2000, 2, 1000), as a series expansion was truncated too early. (PR#14105)
  • pt() is more accurate in the left tail for ncp large, e.g. pt(-1000, 3, 200). (PR#14069)
  • The default C function (R_binary) for binary ops now sets the S4 bit in the result if either argument is an S4 object. (PR#13209)
  • source(echo=TRUE) failed to echo comments that followed the last statement in a file.
  • S4 classes that contained one of "matrix", "array" or "ts" and also another class now accept superclass objects in new(). Also fixes failure to call validObject() for these classes.
  • Conditional inheritance defined by argument test in methods::setIs() will no longer be used in S4 method selection (caching these methods could give incorrect results). See ?setIs.
  • The signature of an implicit generic is now used by setGeneric() when that does not use a definition nor explicitly set a signature.
  • A bug in callNextMethod() for some examples with "..." in the arguments has been fixed. See file src/library/methods/tests/nextWithDots.R in the sources.
  • match(x, table) (and hence %in%) now treat "POSIXlt" consistently with, e.g., "POSIXct".
  • Built-in code dealing with environments (get(), assign(), parent.env(), is.environment() and others) now behave consistently to recognize S4 subclasses; is.name() also recognizes subclasses.
  • The abs.tol control parameter to nlminb() now defaults to 0.0 to avoid false declarations of convergence in objective functions that may go negative.
  • The standard Unix-alike termination dialog to ask whether to save the workspace takes a EOF response as n to avoid problems with a damaged terminal connection. (PR#14332)
  • Added warn.unused argument to hist.default() to allow suppression of spurious warnings about graphical parameters used with plot=FALSE. (PR#14341)
  • predict.lm(), summary.lm(), and indeed lm() itself had issues with residual DF in zero-weighted cases (the latter two only in connection with empty models). (Thanks to Bill Dunlap for spotting the predict() case.)
  • aperm() treated resize = NA as resize = TRUE.
  • constrOptim() now has an improved convergence criterion, notably for cases where the minimum was (very close to) zero; further, other tweaks inspired from code proposals by Ravi Varadhan.
  • Rendering of S3 and S4 methods in man pages has been corrected and made consistent across output formats.
  • Simple markup is now allowed in \title sections in .Rd files.
  • The behaviour of as.logical() on factors (to use the levels) was lost in R 2.6.0 and has been restored.
  • prompt() did not backquote some default arguments in the \usage section. (Reported by Claudia Beleites.)
  • writeBin() disallows attempts to write 2GB or more in a single call. (PR#14362)
  • new() and getClass() will now work if Class is a subclass of "classRepresentation" and should also be faster in typical calls.
  • The summary() method for data frames makes a better job of names containing characters invalid in the current locale.
  • [[ sub-assignment for factors could create an invalid factor (reported by Bill Dunlap).
  • Negate(f) would not evaluate argument f until first use of returned function (reported by Olaf Mersmann).
  • quietly=FALSE is now also an optional argument of library(), and consequently, quietly is now propagated also for loading dependent packages, e.g., in require(*, quietly=TRUE).
  • If the loop variable in a for loop was deleted, it would be recreated as a global variable. (Reported by Radford Neal; the fix includes his optimizations as well.)
  • Task callbacks could report the wrong expression when the task involved parsing new code. (PR#14368)
  • getNamespaceVersion() failed; this was an accidental change in 2.11.0. (PR#14374)
  • identical() returned FALSE for external pointer objects even when the pointer addresses were the same.
  • L$a@x[]

New in R for Mac 2.11.1 (May 31, 2010)

  • NEW FEATURES:
  • R CMD INSTALL checks if dependent packages are available early on in the installation of source packages, thereby giving clearer error messages.
  • R CMD INSTALL --build now names the file in the format used for Mac OS X binary files on that platform.
  • BIC() in package stats4 now also works with multiple fitted models, analogously to AIC().
  • DEPRECATED & DEFUNCT:
  • Use of file extension .C for C++ code in packages is now deprecated: it has caused problems for some 'make's on case-insensitive file systems (although it currently works with the recommended toolkits).
  • INSTALLATION:
  • Command 'gnutar' is preferred to 'tar' when configure sets TAR. This is needed on Mac OS 10.6, where the default tar, bsdtar 2.6.2, has been reported to produce archives with illegal extensions to tar (according to the POSIX standard).
  • BUG FIXES:
  • The C function mkCharLenCE now no longer reads past 'len' bytes (unlikely to be a problem except in user code). (PR#14246)
  • On systems without any default LD_LIBRARY_PATH (not even /usr/local/lib), [DY]LIB_LIBRARY_PATH is now set without a trailing colon. (PR#13637)
  • More efficient utf8ToInt() on long multi-byte strings with many multi-byte characters. (PR#14262)
  • aggregate.ts() gave platform-depedent results due to rounding error for ndeltat != 1.
  • package.skeleton() sometimes failed to fix filenames for .R or .Rd files to start with an alphanumeric. (PR#14253) It also failed when only an S4 class without any methods was defined. (PR#14280)
  • splinefun(*, method = "monoH.FC") was not quite monotone in rare cases. (PR#14215)
  • Rhttpd no longer crashes due to SIGPIPE when the client closes the connection prematurely. (PR#14266)
  • format.POSIXlt() could cause a stack overflow and crash when used on very long vectors. (PR#14267)
  • Rd2latex() incorrectly escaped special characters in \usage sections.
  • mcnemar.test() could alter the levels (dropping unused levels) if passed 'x' and 'y' as factors (reported by Greg Snow).
  • Rd2pdf sometimes needed a further pdflatex pass to get hyperlinked pages correct.
  • interaction() produced malformed results when levels were duplicated, causing segfaults in split().
  • cut(d, breaks = ) now also works for "Date" or "POSIXt" argument d. (PR#14288)
  • memDecompress() could decompress incompletely rare xz-compressed input due to incorrect documentation of xz utils. (Report and patch from Olaf Mersmann.)
  • The S4 initialize() methods for "matrix", "array", and "ts" have been fixed to call validObject(). (PR#14284)
  • R CMD INSTALL now behaves the same way with or without --no-multiarch on platforms with only one installed architecture. (It used to clean the src directory without --no-multiarch.)
  • [> 1 > b. (PR#14291)
  • pnorm(x, log.p = TRUE) could return NaN not -Inf for x near (minus for lower.tail=TRUE) the largest representable number.
  • Compressed data files *.(txt|tab|csv).(gz|bz2|xz) were not recognized for the list of data topics and hence for packages using LazyData. (PR#14273)
  • textConnection() did an unnecessary translation on strings in a foreign encoding (e.g. UTF-8 strings on Windows) and so was slower than it could have been on very long input strings. (PR#14286) tools::Rd2txt() did not render poorly written Rd files consistently with other renderers.
  • na.action() did not extract the 'na.action' component as documented.

New in R for Mac 2.11.0 (Apr 23, 2010)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • Packages must have been installed under R >= 2.10.0, as the current help system is the only one now supported.
  • A port to 64-bit Windows is now available as well as binary package repositiories: see the 'R Administration and Installation Manual'.
  • Argument matching for primitive functions is now done in the same way as for interpreted functions except for the deliberate exceptions call switch .C .Fortran .Call .External all of which use positional matching for their first argument, and also some internal-use-only primitives.
  • The default device for command-line R at the console on Mac OS X is now quartz() and not X11().
  • NEW FEATURES:
  • The 'open' modes for connections are now interpreted more consistently. open = "r" is now equivalent to open = "rt" for all connections. The default open = "" now means "rt" for all connections except the compressed file connections gzfile(), bzfile() and xzfile() for which it means "rb".
  • R CMD INSTALL now uses the internal untar() in package utils: this ensures that all platforms can install bzip2- and xz-compressed tarballs. In case this causes problems (as it has on some Windows file systems when run from Cygwin tools) it can be overridden by the environment variable R_INSTALL_TAR: setting this to a modern external tar program will speed up unpacking of large (tens of Mb or more) tarballs.
  • help(try.all.packages = TRUE) is much faster (although the time taken by the OS to find all the packages the first time it is used can dominate the time).
  • R CMD check has a new option '--timings' to record per-example timings in file .Rcheck/-Ex.timings.
  • The TRE library has been updated to version 0.8.0 (minor bugfixes).
  • grep[l], [g]sub and [g]regexpr now work in bytes in an 8-bit locales if there is no marked UTF-8 input string: this will be somewhat faster, and for [g]sub() give the result in the native encoding rather than in UTF-8 (which returns to the behaviour prior to R 2.10.0).
  • A new argument 'skipCalls' has been added to browser() so that it can report the original context when called by other debugging functions.
  • More validity checking of UTF-8 and MBCS strings is done by agrep() and the regular-expression matching functions.
  • The undocumented restriction on gregexpr() to length(text) > 0 has been removed.
  • Package tcltk now sends strings to Tcl in UTF-8: this means that strings with a marked UTF-8 encoding are supported in non-UTF-8 locales.
  • The graphics engine now supports rendering of raster (bitmap) images, though not all graphics devices can provide (full) support. Packages providing graphics devices (e.g., Cairo, RSvgDevice, cairoDevice) will need to be reinstalled.
  • There is also support in the graphics engine for capturing raster images from graphics devices (again not supported on all graphics devices).
  • R CMD check now also checks if the package and namespace can be unloaded: this provides a check of the .Last.lib() and .onUnload() hook functions (unless --install=fake).
  • prop.table(x) now accepts a one-dimensional table for x.
  • A new function vapply() has been added, based on a suggestion from Bill Dunlap. It requires that a template for the function value be specified, and uses it to determine the output type and to check for consistency in the function values.
  • The main HTML help page now links to a reformatted copy of this NEWS file. (Suggested by Henrik Bengtsson.) Package index files link to the package DESCRIPTION and NEWS files and a list of demos when using dynamic help.
  • The [ method for class "AsIs" allows the next method to change the underlying class. (Wish of Jens Oehlschlägel.)
  • write.csv[2] no longer allow 'append' to be changed: as ever, direct calls to write.table() give more flexibility as well as more room for error.
  • The index page for HTML help for a package now collapses multiple signatures for S4 methods into a single entry.
  • The use of '.required' by require() and detach() has been replaced by '.Depends' which is set from the 'Depends' field of a package (even in packages with name spaces). By default detach() prevents such dependencies from being detached: this can be overridden by the argument 'force'.
  • bquote() has been extended to work on function definitions (wish of PR#14031).
  • detach() when applied to an object other than a package returns the environment that has been detached, to parallel attach().
  • readline() in non-interactive use returns "" and does not attempt to read from the 'terminal'.
  • New function file_ext() in package 'tools'.
  • xtfrm() is now primitive and internally generic, as this allows S4 methods to be set on it without name-space scoping issues.
  • There are now "AsIs" and "difftime" methods, and the default method uses unclass(x) if is.numeric(x) is true (which will be faster but relies on is.numeric() having been set correctly for the class).
  • is.numeric(x) is now false for a "difftime" object (multiplication and division make no sense for such objects).
  • The default method of weighted.mean(x, w) coerces 'w' to be numeric (aka double); previously only integer weights were coerced. Zero weights are handled specially so an infinite value with zero weight does not force an NaN result.
  • There is now a "difftime" method.
  • bug.report() now has 'package' and 'lib.loc' arguments to generate bug reports about packages. When this is used, it looks for a BugReports field in the package DESCRIPTION file, which will be assumed to be a URL at which to submit the report, and otherwise generates an email to the package maintainer. (Suggested by Barry Rowlingson.)
  • quantile() now has a method for the date-time class "POSIXt", and types 1 and 3 (which never interpolate) work for Dates and ordered factors.
  • length() now returns the length of the corresponding abstract timedate-vector rather than always 9 (the length of the underlying list structure). (Wish of PR#14073 and PR#10507.)
  • The readline completion backend no longer sorts possible completions alphabetically (e.g., function argument names) if R was built with readline >= 6.
  • select.list() gains a 'graphics' argument to allow Windows/Mac users to choose the text interface. This changes the behaviour of new.packages(ask=TRUE) to be like update.packages(ask=TRUE) on those platforms in using a text menu: use ask="graphics" for a graphical menu.
  • New function chooseBioCmirror() to set the "BioC_mirror" option.
  • The R grammar prevents using the argument 'name' in signatures of S4 methods for '$' and '$

New in R for Mac 2.10.0 (Nov 13, 2009)

  • Package help is now converted from Rd by the R-based converters that were first introduced in 2.9.0. This means:
  • Packages that were installed by R-devel after 2009-08-09 should not be used with earlier versions of R, and most aspects of package help (including the runnable examples) will be missing if they are so used.
  • Text, HTML and latex help and examples for packages installed under the new system are converted on-demand from stored parsed Rd files. (Conversions stored in packages installed under R < 2.10.0 are used if no parsed Rd files are found. It is recommended that such packages be re-installed.)
  • HTML help is now generated dynamically using an HTTP server running in the R process and listening on the loopback interface.
  • Those worried about security implications of such a server can disable it by setting the environment variable R_DISABLE_HTTPD to a non-empty value. This disables help.start() and HTML help (so text help is shown instead).
  • The Java/Javascript search engine has been replaced by an HTML interface to help.search(). help.start() no longer has an argument 'searchEngine' as it is no longer needed.
  • The HTML help can now locate cross-references of the form link[pkg]{foo} and link[pkg:foo]{bar} where 'foo' is an alias in the package, rather than the documented (basename of a) filename (since the documentation has been much ignored).
  • NEW FEATURES:
  • polygon(), pdf() and postscript() now have a parameter 'fillOddEven' (default FALSE), which controls the mode used for polygon fills of self-intersecting shapes.
  • New debugonce() function; further, getOption("deparse.max.lines") is now observed when debugging, from a code suggestion by John Brzustowski. (PR#13647/8)
  • plot() methods for "stepfun" and hence "ecdf" no longer plot points by default for n >= 1000.
  • [g]sub(*, perl=TRUE) now also supports 'E' in order to *end* U and L case changes, thanks to a patch from Bill Dunlap.
  • factor(), `levels

New in R for Mac 2.9.2 (Aug 25, 2009)

  • NEW FEATURES:
  • install.packages(NULL) now lists packages only once even if they occur in more than one repository (as the latest compatible version of those available will always be downloaded).
  • approxfun() and approx() now accept a 'rule' of length two, for easy specification of different interpolation rules on left and right.
  • They no longer segfault for invalid zero-length specification of 'yleft, 'yright', or 'f'.
  • seq_along(x) is now equivalent to seq_len(length(x)) even where length() has an S3/S4 method; previously it (intentionally) always used the default method for length().
  • PCRE has been updated to version 7.9 (for bug fixes).
  • agrep() uses 64-bit ints where available on 32-bit platforms and so may do a better job with complex matches. (E.g. PR#13789, which failed only on 32-bit systems.)
  • DEPRECATED & DEFUNCT:
  • R CMD Rd2txt is deprecated, and will be removed in 2.10.0. (It is just a wrapper for R CMD Rdconv -t txt.)
  • tools::Rd_parse() is deprecated and will be removed in 2.10.0 (which will use only Rd version 2).
  • BUG FIXES:
  • parse_Rd() still did not handle source reference encodings properly.
  • The C utility function PrintValue no longer attempts to print attributes for CHARSXPs as those attributes are used internally for the CHARSXP cache. This fixes a segfault when calling it on a CHARSXP from C code.
  • PDF graphics output was producing two instances of anything drawn with the symbol font face. (Report from Baptiste Auguie.)
  • length(x) |Chi|) from a Poisson/binomial GLM anova as a p-value column in order to format it appropriately (and as a consequence it gave no significance stars).
  • A missing PROTECT caused rare segfaults during calls to load(). (PR#13880, fix found by Bill Dunlap.)
  • gsub() in a non-UTF-8 locale with a marked UTF-8 input could in rare circumstances overrun a buffer and so segfault.
  • R CMD Rdconv --version was not working correctly.
  • Missing PROTECTs in nlm() caused "random" errors. (PR#13381 by Adam D.I. Kramer, analysis and suggested fix by Bill Dunlap.)
  • Some extreme cases of pbeta(log.p = TRUE) are more accurate (finite values < -700 rather than -Inf). (PR#13786)
  • pbeta() now reports on more cases where the asymptotic expansions lose accuracy (the underlying TOMS708 C code was ignoring some of these, including the PR#13786 example).
  • new.env(hash = TRUE, size = NA) now works the way it has been documented to for a long time.
  • tcltk::tk_choose.files(multi = TRUE) produces better-formatted output with filenames containing spaces. (PR#13875)
  • R CMD check --use-valgrind did not run valgrind on the package tests.
  • The tclvalue() and the print() and as.xxx methods for class "tclObj" crashed R with an invalid object -- seen with an object saved from an earlier session.
  • R CMD BATCH garbled options -d (useful for valgrind, although --debugger=valgrind always worked)
  • INSTALL with LazyData and Encoding declared in DESCRIPTION might have left options("encoding") set for the rest of the package installation.

New in R for Mac 2.9.1 (Jun 28, 2009)

  • NEW FEATURES:
  • New function anyDuplicated(x) returns 0 (= FALSE) or the index of the first duplicated entry of x.
  • matplot(), matlines() and matpoints() now also obey a 'lend' argument, determining line end styles. (Wish of PR#13619).
  • bw.SJ(), bw.bcv() and bw.ucv() now gain an optional 'tol' argument allowing more accurate estimates.
  • new.packages() no longer regards packages with the same name as a member of an installed bundle as 'new' (this is now consistent with the dependency checks in install.packages()).
  • It no longer reports on partially installed bundles (since members can be updated individually if a bundle is unbundled).
  • old.packages() and hence updates.packages() will look for updates to members of package bundles before updates to the whole bundle: this allow bundles to be split and installations updated.
  • nlminb() gives better non-convergence messages in some cases.
  • S3 method dispatch will support S4 class inheritance for S3 methods, for primitives and via UseMethod(), if the argument S3methods=TRUE is given to setClass(). S4 method dispatch will use S3 per-object inheritance if S3Class() is set on the object. See ?Methods and the paper referenced there.
  • R CMD INSTALL is more tolerant of (malformed) packages with a 'man' directory but no validly named .Rd files.
  • R CMD check now reports where options are used that cause some of the checks to be skipped. RSiteSearch has been updated to be consistent with the new layout of the search site itself, which now includes separate options for vignettes, views, and r-sig-mixed-models, as well as changed names for r-help. (Contributed by Jonathan Baron.)
  • That R CMD check makes use of a /tests/Examples/-Ex.Rout.save file as a reference result is now documented in 'Writing R Extensions'.
  • DEPRECATED & DEFUNCT:
  • print.atomic() (defunct since 1.9.0) has been removed since it caused confusion for an S4 class union "atomic".
  • png(type="cairo1") is deprecated -- it was only needed for platforms with 1.0

New in R for Mac 2.9.0 (May 4, 2009)

  • SIGNIFICANT USER-VISIBLE CHANGES:
  • expand.grid() by default no longer coerces strings into factors.
  • NEW FEATURES:
  • Package 'Matrix' is now a recommended package contained in the basic R distribution. It provides S4 classes and methods for dense and sparse matrices, often by using the numerical libraries Lapack and from the SuiteSparse collection CHOLMOD, CSparse, and SPQR among others.
  • pdf() and postscript() gain a 'useKerning' argument to place strings using kerning (which had previously been ignored in display but not in strwidth), based in part on an idea and code from Ei-ji Nakama. The default is TRUE.
  • Kerning involving spaces is now ignored (it was previously only used in the computation of string widths).
  • seq.default() and seq.int() ensure that the result is within the interval [from, to] even when the last value would previously have been slightly out of range because of the allowance for rounding error in computing the number of elements.
  • boxplot() gains a simple 'matrix' method, enabling boxplot(mat) instead of boxplot(data.frame(mat)).
  • zip.file.extract() gains an optional 'dir' argument (but use unzip() instead).
  • source() with 'encoding' specified (and not as "unknown") marks the encoding of character strings in Latin-1 and UTF-8 locales.
  • parse(text=z) now marks the encoding of character strings in Latin-1 and UTF-8 locales if 'z' is of known encoding (that is all elements are either ASCII or marked as Latin-1 or UTF-8).
  • sprintf() does stricter error checking on input formats to avoid passing invalid formats to the OS (which have a tendency to crash under such inputs).
  • expand.grid() gains a 'stringsAsFactor' argument to ask for automatic conversion of character vectors to factors (which happened for many years but was not previously documented, and is no longer the default).
  • bxp() now coputes the 'ylim' including the outliers only if 'outline = TRUE'. (Wish of PR#13196)
  • barplot() gains a 'args.legend' argument. (Wish of PR#13265).
  • RweaveLatexSetup() now accepts all (and not just some) options passed through from Sweave()
  • cumsum(x) and cumprod(x) for double precision x now use a long double accumulator where available and so more closely match sum() and prod() in potentially being more accurate.
  • plot() methods for "stepfun" (and hence "ecdf") gain an 'col' argument, allowing to set all three colors simultaneously.
  • Iterating over a factor in a for loop now coerces to a character vector (rather than using the integer codes).
  • data.frame() now recycles columns of list arguments, not just vectors and factors.
  • plot.ts(plot.type="multiple") now makes use of *.lab and *.axis graphical parameters (wish of PR#13134 and 13135).
  • Classes can be exported from a name space using the NAMESPACE file directive 'exportClassPattern' which has the same syntax as 'exportPattern'.
  • strftime() now converts its first argument with as.POSIXlt() and so is no longer an alias for format.POSIXLt.
  • body | correctly in non-code environments (such as samp), and # and _ even in latex conversion (but $ still needs to be escaped in version 1.0).
  • Whitespace between first and second arguments is now accepted for item and section, e.g. item{foo} {some value}. Previously arguments after whitespace were silently ignored, and a warning is given for version 1.0 files.
  • The Rd files created by prompt() and friends are declared to be version 1.1.
  • alias now supports the escaping of { as well as of %, and this is recommended.
  • parse_Rd(), an experimental parser for Rd files, and Rd2txt(), Rd2HTML(), Rd2latex() and Rd2ex(), even more experimental converters, have been added to package 'tools'.
  • R CMD check runs the package's Rd files through parse_Rd() for a stricter syntax check. This can be suppressed by setting _R_CHECK_RD_PARSE_ to FALSE.
  • Added markup verb, which displays like code, but parses as verbatim text. Currently only supported by parse_Rd() and Rd2HTML().
  • INSTALLATION:
  • The shell used by the 'R' script and other shell scripts intended to be run directly can be specified at installation time by setting the (precious) configure variable R_SHELL.
  • libtool has been updated to 2.2.6a.
  • --with-ICU is now the default: this means that ICU will be used for collation on Mac OS >= 10.4.
  • make install-tests can be used to install the test files, to allowed an installed version of R to be tested -- see the R-admin manual. This is also supported by the function testInstalledPackages() in package 'tools'.
  • 'make install' using a parallel make should now work.
  • 'make check' now always re-makes and re-runs the package examples, which are now collated in the locale's order (and not ASCII order).
  • configure will now set the default optimization level for gfortran on x86_64 Linux to -O as -O2 has caused problems with gfortran 4.3.x.
  • PACKAGE INSTALLATION:
  • install.packages() is able to infer that repos=NULL was intended from the extension on the file name specified as 'pkgs'.
  • On Mac OS X it now supports local binary packages with .tar.gz extension. Nonetheless .tgz remains the preferred extension and is expected in repositories.
  • It now checks >= version dependencies for dependent packages, and so will install a newer version of a dependency if needed and available on the repositories.
  • The library being installed into is considered when looking for installed packages if it is not already part of .libPaths() (as INSTALL already does).
  • It has a new argument 'Ncpus' to support parallel installs of source packages.
  • HTML links will be resolved first to the standard packages: this avoids other installed packages diverting help on e.g. qr() and plot() to themselves. The HTML files are only "touched" if they have changed.
  • A check is done that the R files can be parsed: this both prevents a broken package without lazy-loading from being installed and gives better diagnostics.
  • install.packages() gains a 'configure.vars' argument, and both this and 'configure.args' get their defaults from options().
  • There is a unified R script for INSTALL on both Unix-alike and Windows that takes option names used by either in the past.
  • It adds --no-multiarch to disable building other than the main sub-architecture, and allows multiple instances of --configure-args and --configure-vars (which will be concatenated).
  • New option --install-tests will install any package-specific tests.
  • Times in the Packaged: and Built: fields are now recorded in UTC, and in most cases in ISO 8601 format.
  • C-LEVEL FACILITIES:
  • A helper function, asCharacterFactor, converts from factors to character vectors.
  • BUG FIXES:
  • The postscript() output for setting text is faster and smaller.
  • Subsetting a data frame with duplicate column names without selecting columns (e.g. z[i,]) no longer makes the column names unique. This was never documented, but some packages have assumed it.
  • data.frame() no longer ignores row names on objects if the first name is empty. (PR#13230: this has been the behaviour for a long time, but apparently undocumented.)
  • deparse(control="S_compatible") now never uses backticks.
  • X-spline drawing is improved for cases where the control points are located well off the edges of the device.
  • The symptom of this problem is the error "reached MAXNUMPTS".
  • exists() with mode= "any" will no longer run an active binding's function.
  • format(c(1 + 2i, NA)) no longer has extraneous space in " NA".
  • mood.test() could fail in 2.8.x on large samples because of integer overflow.
  • heatmap() without a dendrogram could fail. (PR#13512)
  • Checks for missing values will no longer occasionally result in an infinite loop or stack overflow error, depending on the compiler. Active bindings are now always considered to be non-missing.
  • Rd conversion was not accepting p (as in pkg} or (when using Perl 5.10.x) k (as in kbd) in any preamble text in a value{} section, since those are nowadays interpreted by Perl. (PR#13575)
  • if(as.raw(1)) TRUE now works as expected. (PR#13630) Also, c(as.raw(12), TRUE) or c(raw(3), pi) do.
  • duplicated(, incomparables = NA) now gives the intended error message.
  • name handling of as.data.frame() has been sanitized somewhat
  • Evaluating an assignment expression with a string on the left hand side no longer destructively changes the string to a symbol in the expression.

New in R for Mac 2.8.1 (Feb 3, 2009)

  • NEW FEATURES:
  • sum() now has a method for "difftime" objects (via the Summary group). max(), min() and range() applied to "difftime" object(s) now return a result in the common units of the objects, if there is one.
  • installed.packages() is now tolerant of malformed DESCRIPTION files in installed packages (it ignores them, with a warning).
  • qt() now works for 0 < df < 1.
  • For consistency with matrix() and array(), dimnames(x) 0, and is more accurate in some cases (PR#13309).
  • installed.packages(lib.loc = D, priority="NA") now also works when D contains a single package. (PR#13332)
  • legend(...., merge=TRUE) now warns and has no effect in the case where no line segments are drawn. (PR#13340)
  • transform.data.frame() works better when two or more columns are added.
  • Deparsing argument lists with non-syntactic names (e.g. that for transform()) now uses backticks rather than double quotes to produce syntactically valid output.
  • matrix() failed to check for 0-length 'dimnames': it now treats them as NULL (as array did). (PR#13361)
  • 0^NA is now NA, not Inf, consistent with x^NA, x != 1.
  • anova.mlm() did not work if T had only one row (including e.g. the case M = ~1).
  • axis.POSIXct() mislabelled for some time ranges of a few hours (reported by Martin Becker).
  • mantelhaen.test() with 'exact=FALSE' was not respecting 'alternative'. It now does one-sided tests similarly to prop.test().
  • anova.mlm() had trouble with some designs where near-zero rows of the tranformation matrix were not removed (caught by Nils Skutara).
  • Rd conversion was handling expressions like 'item{foo}{see eqn{x}}' (with one argument to eqn immediately followed by a right brace) incorrectly, sometimes giving a spurious warning about 'missing text'.
  • R CMD INSTALL used the C locale to install the DESCRIPTION file, and so escaped non-ASCII characters in packages with a declared encoding of "latin1" or "UTF-8". (However, the installed DESCRIPTION file was rarely used since the dumped metadata are available.)
  • xspline() now respects inline par settings.
  • It and grid.xspline() now handle the special case of only two control points, and splines with control points that are located well outside the device (e.g., a zoomed view of a larger curve). (Both cases were giving the error "reached MAXNUMPTS").
  • In setClass("C", contains="list"); x

New in R for Mac 2.8.0 (Oct 23, 2008)

  • Significant user-visible changes:
  • var(), cov(), cor(), sd() etc now by default (when 'use' is not specified) return NA in many cases where they signalled an error before.
  • New features:
  • abbreviate() gains an optional argument 'strict' allowing cheap and fast strict abbrevation.
  • The "lm" methods of add1(), anova() and drop1() warn if they are mis-used on an essentially exact fit.
  • as.array() is now generic, gains a '...' argument.
  • New function as.hexmode() for converting integers in hex format. format.hexmode() and as.character.hexmode() gain an 'upper.case' argument.
  • bitmap() and dev2bitmap() gain support for anti-aliasing. The default type has been changed to 'png16m', which supports anti-aliasing.
  • Box.test() gains a 'fitdf' argument to adjust the degrees of freedom if applied to residuals.
  • browseURL() has a new argument 'encodeIfNeeded' to use URLencode() in cases where it seems likely that would be helpful. (Unfortunately, those are hard to guess.)
  • by() gains a 'simplify' argument, passed to tapply().
  • capabilities() gains a new argument "tiff" to report if tiff() is operational.
  • chol2inv() now treats as a [1 x 1]-matrix.
  • cov() and cor() have the option 'use = "everything"' as default, and so does var() with its default 'na.rm = FALSE'. This returns NA instead of signalling an error for NA observations. Another new option is 'use = "na.or.complete"' which is the default for var(*, na.rm=FALSE). var(double(0), na.rm= L) now returns NA instead of signalling an error, for both L = TRUE or FALSE, as one consequence of these changes.
  • data.matrix() now tries harder to convert non-numeric columns, via as.numeric() or as(, "numeric").
  • dev.interactive() is able to recognize the standard screen devices if getOption("device") is a function (as well as by name).
  • dev.new() gains a '...' argument which can be used to pass named arguments which will be used if appropriate to the device selected.
  • dimnames(x) method (as incorrectly documented earlier).
  • library() no longer warns about the masking objects that are identical(.,.) to those they mask.
  • lockBinding(), unlockBinding(), lockEnvironment() and makeActiveBinding() now all return invisibly (they always return NULL).
  • mood.test() now behaves better in the presence of ties.
  • na.action() now works on fits of classes "lm", "glm", ....
  • optim(.., method="SANN", .., trace=TRUE) is now customizable via the 'REPORT' control argument, thanks to code proposals by Thomas Petzoldt.
  • The 'factory-fresh' defaults for options("device") have been changed to refer to the devices as functions in the grDevices namespace and not as names. This makes it more likely that the incorrect (since R 2.5.0) assumption in packages that get(getOption("device"))() will work will catch users of those packages.
  • pch=16 now has no border (for consistency with 15, 17, 18) and hence is now different from pch=19.
  • pdf() has new arguments 'useDingbats' (set this to FALSE for use with broken viewers) and 'colormodel'. It now only references the ZapfDingbats font if it is used (for small opaque circles).
  • The default PDF version is now 1.4, since viewers that do not accept that are now rare.
  • Different viewers were rendering consecutive text() calls on a pdf() device in different ways where translucency was involved. The PDF generated has been changed to force each call to be rendered separately (which is the way xpdf or ghostscript was rendering, but Acrobat was forming a transparency group), which is consistent with other graphics devices supporting semi-transparency.
  • plot.dendrogram() has new arguments (xlim, ylim) which allows zooming into a hiearchical clustering dendrogram.
  • plot.histogram() gains an 'ann' argument. (Wish from Ben Bolker.)
  • plot() now warns when it omits points with leverage one from a plot.
  • Plotmath now recognizes 'aleph' and 'nabla' (the Adobe Symbol 'gradient' glyph) as symbol names.
  • polyroot() no longer has a maximum degree.
  • The alpha/alphamax argument of the 'nls' and 'mle' profile() methods is used to compute confidence limits for univariate t-statistics rather than a confidence region for all the parameters (and not just those being profiled).
  • quantile.default() allows 'probs' to stray just beyond [0, 1], to allow for computed values.
  • New functions rawConnection() and rawConnectionValue() allow raw vectors to be treated as connections.
  • read.dcf() now consistently gives an error for malformed DCF.
  • read.fwf() no longer passes its default for 'as.is' to read.table(): this allows the latter's default to be used.
  • readBin(), writeBin(), readChar() and writeChar() now open a connection which was not already open in an appropriate binary mode rather than the default mode.
  • readLines(), cat() and sink() now open a connection which was not already open in an appropriate text mode rather than the default mode.
  • readCitationFile() (and hence citation) now reads a package's CITATION file in the package's declared encoding (if there is one).
  • The behaviour of readLines() for incomplete final lines on binary-mode connections has been changed to be like blocking rather than non-blocking text-mode connections.
  • A new reorder.character() method has been added. This allows use of 'reorder(x, ...)' as a shorthand for 'reorder(factor(x), ...)' when 'x' is a character vector.
  • round() now computes in long doubles where possible so the results are more likely to be correct to representation error.
  • rug() now uses axis()'s new arguments from 2.7.2, hence no longer draws an axis line.
  • save() (optionally, but by default) checks for the existence of objects before opening the file/connections (wish of PR#12543).
  • segments(), arrows() and rect() allow zero-length coordinates. (Wish of PR#11192)
  • set.seed(kind=NULL) now takes 'kind' from a saved seed if the workspace has been restored or .Random.seed has been set in some other way. Previously it took the 'currently used' value, which was "default" unless random numbers had been used in the current session. Similarly for the values reported by RNGkind(). (Related to PR#12567.)
  • set.seed() gains a 'normal.kind' argument.
  • setEPS() and setPS() gain '...' to allow other arguments to be passed to ps.options(), including overriding 'width' and 'height'.
  • setTimeLimit() function to set limits on the CPU and/or elapsed time for each top-level computation, and setSessionLimit() to set limits for the rest of the session.
  • splinefun() has a new method = "monoH.FC" for monotone Hermite spline interpolation.
  • sprintf() optionally supports the %a/%A notation of C99 (if the platform does, including under Windows).
  • str()'s default method gains a 'formatNum' function argument which is used for formatting numeric vectors. Note that this is very slightly not backward compatible, and that its default may change before release.
  • The summary() method for class "ecdf" now uses a print() method rather than printing directly.
  • summary.manova() uses a stabler computation of the test statistics, and gains a 'tol' argument to allow highly correlated responses to be explored (with probable loss of accuracy). Similar changes have been made to anova.mlm() and anova.mlmlist().
  • Sweave() now writes concordance information inside a Sconcordance LaTeX macro, which allows it to be inserted into PDF output.
  • system.time() now uses lazy evaluation rather than eval/substitute, which results in more natural scoping. (PR#11169)

New in R for Mac 2.7.2 (Sep 11, 2008)

  • sprintf() returns elements of the result in UTF-8 when the format or any character input has a corresponding element declared as UTF-8. Similarly for paste(), elements of the result are in UTF-8 when any input to that element is declared as UTF-8.
  • axis() has new arguments 'col.ticks' and 'lwd.ticks' to allow the colour and line width of ticks to be set separately from that of the line (e.g. to set one or the other to transparent or zero width).
  • legend() has a new argument 'box.col' to set the colour of the enclosing box.
  • legend() gains a 'xpd' argument to make it easier to place a legend in the margins or outer margins.
  • stripchart() now passes '...' to title() (as well as to plot.default() and axis()). (Wish of PR#12202)
  • help.search() has new argument 'searchEngine' to go directly to the search form: this is needed by users of Firefox 3 to workaround a bug in interpreting the search results pages.
  • Plotmath computed the glyph metrics for the wrong character (and perhaps for a non-existent one) if this was a single-byte character with the top bit set. An example wassymbol("300").
  • sink() and cat() could divert output to a non-writable connection.
  • phyper(x, 0,0,0) no longer hangs for huge x and gives 1 for x >= 0.
  • plnorm(x, ..., log.p=TRUE) is now correct for x = 0 (instead of barely negative).
  • assign() now warns if given a character vector of length > 1, rather than silently taking the first element.
  • rcond() now gives 0 instead of an error.
  • There was a memory leak in C function ucstoutf8 used by some graphics devices.
  • Plots of profile.mle() objects (package 'stats4') were misbehaving when the 'which' argument had been used in their
  • calculation.
  • dnbinom(x, size, mu=*, ..) is now more accurate for very large 'size'. The same applies to pnbinom() and rnbinom().
  • axis() was ignoring par() mgp[3] if mgp was set in-line.
  • Closing an X11 View() or dataentry window via its frame's
  • close control now works better on some window managers.
  • Calling lapply() was not handling method dispatch correctly for is.numeric(), is.matrix(), is.array(), log() and the Math2 group. This affected data.matrix() which incorrectly regarded "Date" and "POSIXct" objects as numeric, and has been adjusted to do so as exceptions.
  • package.skeleton() was not looking for non-function objects in its 'environment' argument.
  • nls() was only finding its 'weights' argument in the case when all the variables in the formula were of the same length and hence that model.frame() could be used.
  • It was silently ignoring 'subset' and 'na.action' except in that case. Now they are ignored only if 'data' is a list and variables taken from 'data' are not all of the same length, in which case a warning is given.
  • The 'mle' confint() method now takes 'level' into account when setting 'alpha' for the profile.
  • within() was not handling correctly expressions that produced NULL columns.
  • dev.print() and dev.copy2{eps,pdf}() now ensure that the current device is restored as the active device even if an error occurs.
  • as.Date() could fail to convert character strings representing days on which midnight did not exist in the current timezone (as happened in parts of Africa on 1960-01-01).
  • The automatic placement of legend() with 'title' and a reversed 'x' axis was incorrect.
  • The use of multiple packages in 'LinkingTo' works again, and now works when the dependent packages are in the library to be installed to (but not in the library path seen by R --vanilla).
  • bxp() (and hence boxplot) now respects in-line graphical parameters 'xaxp'/'yaxp' as appropriate.
  • barplot(log = "y") failed if there were NAs in the 'height' argument.
  • pbeta() is more accurate in some cases with extreme values of 'ncp'. (PR#11277).
  • edit.data.frame() no longer fails if called on a 0-column data frame and no column is created.
  • pchisq(x, df=0) was always one even for x < 0; similarly for pgamma(x, alpha=0).
  • add1() and drop1() now return a P-value of NaN in cases with df=0 for test="Chisq" (they gave NaN until pchisq was altered in R 2.6.2).
  • The default methods of drop1() and add1() now re-evaluate in the object's formula environment, rather than simply in the parent (informal bug report by Werner Stahel).
  • The undocumented limit of 8191 bytes on comments (from # to the end of the line) in R code has been removed.
  • qgamma() warns if used with shape < 1e-10, when it may be unreliable.
  • Installing a source package was not using the package's declared encoding (if any) as a default encoding for the help.search() database in Meta/hsearch.rds. This could cause packages with a default encoding to have some of their entries rejected by help.search() in a multi-byte locale (such as a UTF-8 locale).
  • duplicated() and unique() now handle 'incomparables' better, and avoid occasional segfaults (PR#12551).
  • data.frame(row.names=NULL) once again behaves differently from the default (as documented).
  • plot(isoreg(x,y)) now plots the points correctly, also when 'x' is not sorted.

New in R for Mac 2.6.2 (Apr 4, 2008)

  • colnames(DF) is now also fast for large dataframes DF with automatic row.names. Note that the correct usage is names(DF). (PR#10470)
  • tools::texi2dvi() works around the failure of 'texi2dvi --quiet' to be quiet in texinfo 4.11.
  • On Linux, parallel 32/64-bit installations are supported using multilib.
  • Fix: A compilation problem on one system where glob was not found has been corrected. (PR#10468)
  • Fix: The "profile.nls" method of plot() was losing the x axis labels.
  • Fix: array() computed the total number of entries in the array before coercing the dimensions to integer.
  • Fix: persp() misreported errors in the y parameter.
  • Fix: source("clipboard", echo=TRUE) and file("clipboard", open="rt") gave spurious errors. (Reported by Fernando Saldanha.)
  • Fix: attributes= 1.4 (2.6.1 accidentally required >= 1.5).
  • Fix: The default method for range() was omitting 'na.rm' for non-numeric objects such as those of class "Date". (PR#10508)
  • Fix: cut(x, breaks=) misbehaved on a constant vector of negative values.
  • Fix: bxp(), the plotting engine of boxplot(), no longer plots staple ticks multiple times. (PR#10499)
  • Fix: The automatic detection of the domain for message translation was not working correctly for messages in message(), warning() and stop() in packages other than 'base'.
  • Fix: The profile.nls() function misbehaved when encountering non-convergence of the "port" algorithm.
  • Fix: Under certain rare circumstances in R 2.6.x, log(), round() and trunc() could alter their arguments in the caller. This involved passing of empty '...' arguments, and was spotted when using apply(x, 2, log).
  • Fix: par() no longer warns unnecessarily when asked to set new=FALSE on an unused graphics device.
  • Fix: plot.formula() was not passing on '...' when used with a one-sided formula. plot.formula() was not accepting expressions for annotations passed to title(). (PR#10525)
  • Fix: pchisq(x, df=0, ncp=L) now returns the correct limit exp(-L/2) for x=0 and is no longer returning NaN for x > 0, L < 80.
  • Fix: Non-ASCII characters were only working correctly in Hershey fonts if these were specified by the 'vfont' argument to text() and not if specified as a font family.
  • Fix: There were several errors in Hershey$allowed, but the help page listed the allowed combinations correctly.
  • Fix: text() no longer attempts to use 'vfont' with an expression for 'labels' (it was documented not to work).
  • Fix: fisher.test(simulate.p.value = TRUE) gave incorrect answers in some extremely degenerate problems. (PR#10558)
  • Fix: src/extra/pcre has been updated to PCRE 7.5 (bugfix release).
  • Fix: capture.output() completes an incomplete final line of output when file = NULL. (PR#10534)
  • Fix: capture.output() now returns invisibly if output is written to a file/connection.
  • Fix: format.AsIs() did not remove the "AsIs" class and so could go into an infinite loop.
  • Fix: summary.mlm() lost the names of the coefficients when there was only one.
  • Fix: Rdconv was not marking examples files with an encoding if this was known from the package's DESCRIPTION file.
  • Fix: readChar() from a raw vector was reading a number of bytes, not characters.
  • Fix: slotNames() was erroneously treating classes that extend "character" as strings.
  • Fix: R no longer ignores SIGPIPE signals even in processes launched by system(). Instead PR#1959 is handled by a simple error handler which will give an error message in circumstances where none was given before.
  • Fix: The AIC() S4 generic in package stats4 no longer disables dispatch of S3 methods for AIC().
  • Fix: The conflicts check in library() excluded all S4 generics, even where they were unrelated to the function masked. It is now more selective (although still too generous to S4 generics).
  • Fix: proc.time() was missing a protect and could misbehave if provoked by gctorture(). (PR#10600)
  • Fix: The cut() and hist() methods for dates and datetimes are now more accurate for intervals of "months" and "years"
  • Fix: url()/download.file() could segfault if the HTTP interaction involved a redirect to an address starting with '/' on the same server.
  • Fix: Memory allocations used in format() and in an internal utility function could be off by one byte. (PR#10635)
  • Fix: isoreg(x, y) no longer segfaults when y has NAs.
  • Fix: split(x, g) always returns a list as documented. (It used to return NULL for a zero-length 'x'.)
  • Fix: tapply(x, g, ...) misbehaved if the args were of zero length.
  • Fix: hist.POSIXt(*, xaxt = "n") no longer suppresses the y-axis.
  • Fix: strptime() crashed under certain locales on Mac OS X.
  • Fix: gregexpr() no longer segfaults when "" is given as the search pattern. Thanks to Herve Pages for the bug report.
  • Fix: matplot(x, *) with default 'pch' did not plot columns from column number 37 on (because the default pch was NA for those).
  • Fix: print.htest() lost output when used within sink(file, split=TRUE).
  • Fix: Setting par(col.main=) also set par("col") to the same colour.
  • Fix: Anonymous fifos were broken (again).