R 3.5.0 is released

Peter Dalgaard pd.mes at cbs.dk
Mon Apr 23 09:30:00 CEST 2018

The build system rolled up R-3.5.0.tar.gz (codename "Joy in Playing") this morning.

The list below details the changes in this release.

You can get the source code from


or wait for it to be mirrored at a CRAN site nearer to you.

Binaries for various platforms will appear in due course.

For the R Core Team,

Peter Dalgaard

These are the checksums (md5 and SHA-256) for the freshly created files, in case you wish
to check that they are uncorrupted:

MD5 (AUTHORS) = b9c44f9f78cab3184ad9898bebc854b4
MD5 (COPYING) = eb723b61539feef013de476e68b5c50a
MD5 (COPYING.LIB) = a6f89e2100d9b6cdffcea4f398e37343
MD5 (FAQ) = 3bba37aa1dd06de3f781200a8081302f
MD5 (INSTALL) = 7893f754308ca31f1ccf62055090ad7b
MD5 (NEWS) = d7834f5943183d483f7e50a529cc9019
MD5 (NEWS.0) = bfcd7c147251b5474d96848c6f57e5a8
MD5 (NEWS.1) = eb78c4d053ec9c32b815cf0c2ebea801
MD5 (NEWS.2) = 591dcf615162127f904e4e461f330ce9
MD5 (R-latest.tar.gz) = c0455dbfa76ca807e4dfa93d49dcc817
MD5 (README) = f468f281c919665e276a1b691decbbe6
MD5 (RESOURCES) = 529223fd3ffef95731d0a87353108435
MD5 (THANKS) = 08158353102084599797db8c9ccf8e2a
MD5 (VERSION-INFO.dcf) = 5c265f4f7b2a5f7388063024cac0ee4b
MD5 (R-3/R-3.5.0.tar.gz) = c0455dbfa76ca807e4dfa93d49dcc817

2cde824a7b18958e5f06b391c801c8288be0f84fa8934b7ddefef23c67e60c09  AUTHORS
e6d6a009505e345fe949e1310334fcb0747f28dae2856759de102ab66b722cb4  COPYING
6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3  COPYING.LIB
98df47801c33cc4f4a4de98447cb2bd40e09c0920195f540a981ceed874714f2  FAQ
f87461be6cbaecc4dce44ac58e5bd52364b0491ccdadaf846cb9b452e9550f31  INSTALL
8b4e0508ccd96acd4cfe289370fe005f24f78a19e25e344394a92b3e47b60c3e  NEWS
4e21b62f515b749f80997063fceab626d7258c7d650e81a662ba8e0640f12f62  NEWS.0
12b30c724117b1b2b11484673906a6dcd48a361f69fc420b36194f9218692d01  NEWS.1
ca04f78ffe54afa326fe3ed40e7e1411aca0000ed2fa5ead97ddf51c6aa5b7bc  NEWS.2
fd1725535e21797d3d9fea8963d99be0ba4c3aecadcf081b43e261458b416870  R-latest.tar.gz
2fdd3e90f23f32692d4b3a0c0452f2c219a10882033d1774f8cadf25886c3ddc  README
408737572ecc6e1135fdb2cf7a9dbb1a6cb27967c757f1771b8c39d1fd2f1ab9  RESOURCES
2d2e85e85574c4430951f6b070c08cd5aff1602abfd1bb162bed6d89c436b11f  THANKS
a11bf153b2ebe6acc902cf2edf22060f65f6ef827cfb5c9ab9c8e9c577c5b568  VERSION-INFO.dcf
fd1725535e21797d3d9fea8963d99be0ba4c3aecadcf081b43e261458b416870  R-3/R-3.5.0.tar.gz

This is the relevant part of the NEWS file



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


    * 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://

    * 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 <- rlnorm(99)
         isTRUE(median(x) == quantile(x)["50%"])

      New function isFALSE() defined analogously to isTRUE().

    * The default symbol table size has been increased from 4119 to
      49157; this may improve the performance of symbol resolution when
      many packages are loaded.  (Suggested by Jim Hester.)

    * line() gets a new option iter = 1.

    * Reading from connections in text mode is buffered, significantly
      improving the performance of readLines(), as well as scan() and
      read.table(), at least when specifying colClasses.

    * order() is smarter about picking a default sort method when its
      arguments are objects.

    * available.packages() has two new arguments which control if the
      values from the per-session repository cache are used (default
      true, as before) and if so how old cached values can be to be
      used (default one hour).

      These arguments can be passed from install.packages(),
      update.packages() and functions calling that: to enable this
      available.packages(), packageStatus() and download.file() gain a
      ... argument.

    * packageStatus()'s upgrade() method no longer ignores its ...
      argument but passes it to install.packages().

    * installed.packages() gains a ... argument to allow arguments
      (including noCache) to be passed from new.packages(),
      old.packages(), update.packages() and packageStatus().

    * factor(x, levels, labels) now allows duplicated labels (not
      duplicated levels!).  Hence you can map different values of x to
      the same level directly.

    * Attempting to use names<-() on an S4 derivative of a basic type
      no longer emits a warning.

    * The list method of within() gains an option keepAttrs = FALSE for
      some speed-up.

    * system() and system2() now allow the specification of a maximum
      elapsed time ('timeout').

    * debug() supports debugging of methods on any object of S4 class
      "genericFunction", including group generics.

    * Attempting to increase the length of a variable containing NULL
      using length()<- still has no effect on the target variable, but
      now triggers a warning.

    * type.convert() becomes a generic function, with additional
      methods that operate recursively over list and data.frame
      objects. Courtesy of Arni Magnusson (PR#17269).

    * lower.tri(x) and upper.tri(x) only needing dim(x) now work via
      new functions .row() and .col(), so no longer call as.matrix() by
      default in order to work efficiently for all kind of matrix-like

    * print() methods for "xgettext" and "xngettext" now use
      encodeString() which keeps, e.g. "\n", visible.  (Wish of

    * package.skeleton() gains an optional encoding argument.

    * approx(), spline(), splinefun() and approxfun() also work for
      long vectors.

    * deparse() and dump() are more useful for S4 objects, dput() now
      using the same internal C code instead of its previous imperfect
      workaround R code.  S4 objects now typically deparse perfectly,
      i.e., can be recreated identically from deparsed code.

      dput(), deparse() and dump() now print the names() information
      only once, using the more readable (tag = value) syntax, notably
      for list()s, i.e., including data frames.

      These functions gain a new control option "niceNames" (see
      .deparseOpts()), which when set (as by default) also uses the
      (tag = value) syntax for atomic vectors.  On the other hand,
      without deparse options "showAttributes" and "niceNames", names
      are no longer shown also for lists.  as.character(list( c (one =
      1))) now includes the name, as as.character(list(list(one = 1)))
      has always done.

      m:n now also deparses nicely when m > n.

      The "quoteExpressions" option, also part of "all", no longer
      quote()s formulas as that may not re-parse identically.

    * If the option setWidthOnResize is set and TRUE, R run in a
      terminal using a recent readline library will set the width
      option when the terminal is resized.  Suggested by Ralf Goertz.

    * If multiple on.exit() expressions are set using add = TRUE then
      all expressions will now be run even if one signals an error.

    * mclapply() gets an option affinity.list which allows more
      efficient execution with heterogeneous processors, thanks to
      Helena Kotthaus.

    * The character methods for as.Date() and as.POSIXlt() are more
      flexible _via_ new arguments tryFormats and optional: see their
      help pages.

    * on.exit() gains an optional argument after with default TRUE.
      Using after = FALSE with add = TRUE adds an exit expression
      before any existing ones. This way the expressions are run in a
      first-in last-out fashion. (From Lionel Henry.)

    * On Windows, file.rename() internally retries the operation in
      case of error to attempt to recover from possible anti-virus

    * Command line completion on :: now also includes lazy-loaded data.

    * If the TZ environment variable is set when date-time functions
      are first used, it is recorded as the session default and so will
      be used rather than the default deduced from the OS if TZ is
      subsequently unset.

    * There is now a [ method for class "DLLInfoList".

    * glm() and glm.fit get the same singular.ok = TRUE argument that
      lm() has had forever.  As a consequence, in glm(*, method =
      <your_own>), user specified methods need to accept a singular.ok
      argument as well.

    * aspell() gains a filter for Markdown (.md and .Rmd) files.

    * intToUtf8(multiple = FALSE) gains an argument to allow surrogate
      pairs to be interpreted.

    * The maximum number of DLLs that can be loaded into R e.g. _via_
      dyn.load() has been increased up to 614 when the OS limit on the
      number of open files allows.

    * Sys.timezone() on a Unix-alike caches the value at first use in a
      session: _inter alia_ this means that setting TZ later in the
      session affects only the _current_ time zone and not the _system_

      Sys.timezone() is now used to find the system timezone to pass to
      the code used when R is configured with --with-internal-tzcode.

    * When tar() is used with an external command which is detected to
      be GNU tar or libarchive tar (aka bsdtar), a different
      command-line is generated to circumvent line-length limits in the

    * system(*, intern = FALSE), system2() (when not capturing output),
      file.edit() and file.show() now issue a warning when the external
      command cannot be executed.

    * The "default" ("lm" etc) methods of vcov() have gained new
      optional argument complete = TRUE which makes the vcov() methods
      more consistent with the coef() methods in the case of singular
      designs.  The former (back-compatible) behavior is given by
      vcov(*, complete = FALSE).

    * coef() methods (for lm etc) also gain a complete = TRUE optional
      argument for consistency with vcov().
      For "aov", both coef() and vcov() methods remain back-compatibly
      consistent, using the _other_ default, complete = FALSE.

    * attach(*, pos = 1) is now an error instead of a warning.

    * New function getDefaultCluster() in package parallel to get the
      default cluster set via setDefaultCluster().

    * str(x) for atomic objects x now treats both cases of is.vector(x)
      similarly, and hence much less often prints "atomic".  This is a
      slight non-back-compatible change producing typically both more
      informative and shorter output.

    * write.dcf() gets optional argument useBytes.

    * New, partly experimental packageDate() which tries to get a valid
      "Date" object from a package DESCRIPTION file, thanks to
      suggestions in PR#17324.

    * tools::resaveRdaFiles() gains a version argument, for use when
      packages should remain compatible with earlier versions of R.

    * ar.yw(x) and hence by default ar(x) now work when x has NAs,
      mostly thanks to a patch by Pavel Krivitsky in PR#17366.  The
      ar.yw.default()'s AIC computations have become more efficient by
      using determinant().

    * New warnErrList() utility (from package nlme, improved).

    * By default the (arbitrary) signs of the loadings from princomp()
      are chosen so the first element is non-negative.

    * If --default-packages is not used, then Rscript now checks the
      environment variable R_SCRIPT_DEFAULT_PACKAGES. If this is set,
      then it takes precedence over R_DEFAULT_PACKAGES. If default
      packages are not specified on the command line or by one of these
      environment variables, then Rscript now uses the same default
      packages as R. For now, the previous behavior of not including
      methods can be restored by setting the environment variable
      R_SCRIPT_LEGACY to yes.

    * When a package is found more than once, the warning from
      find.package(*, verbose=TRUE) lists all library locations.

    * POSIXt objects can now also be rounded or truncated to month or

    * stopifnot() can be used alternatively via new argument exprs
      which is nicer and useful when testing several expressions in one

    * The environment variable R_MAX_VSIZE can now be used to specify
      the maximal vector heap size. On macOS, unless specified by this
      environment variable, the maximal vector heap size is set to the
      maximum of 16GB and the available physical memory. This is to
      avoid having the R process killed when macOS over-commits memory.

    * sum(x) and sum(x1,x2,..,x<N>) with many or long logical or
      integer vectors no longer overflows (and returns NA with a
      warning), but returns double numbers in such cases.

    * Single components of "POSIXlt" objects can now be extracted and
      replaced via [ indexing with 2 indices.

    * S3 method lookup now searches the namespace registry after the
      top level environment of the calling environment.

    * Arithmetic sequences created by 1:n, seq_along, and the like now
      use compact internal representations via the ALTREP framework.
      Coercing integer and numeric vectors to character also now uses
      the ALTREP framework to defer the actual conversion until first

    * Finalizers are now run with interrupts suspended.

    * merge() gains new option no.dups and by default suffixes the
      second of two duplicated column names, thanks to a proposal by
      Scott Ritchie (and Gabe Becker).

    * scale.default(x, center, scale) now also allows center or scale
      to be "numeric-alike", i.e., such that as.numeric(.) coerces them
      correctly.  This also eliminates a wrong error message in such

    * par*apply and par*applyLB gain an optional argument chunk.size
      which allows to specify the granularity of scheduling.

    * Some as.data.frame() methods, notably the matrix one, are now
      more careful in not accepting duplicated or NA row names, and by
      default produce unique non-NA row names.  This is based on new
      function .rowNamesDF(x, make.names = *) <- rNms where the logical
      argument make.names allows to specify _how_ invalid row names
      rNms are handled.  .rowNamesDF() is a "workaround" compatible

    * R has new serialization format (version 3) which supports custom
      serialization of ALTREP framework objects.  These objects can
      still be serialized in format 2, but less efficiently.
      Serialization format 3 also records the current native encoding
      of unflagged strings and converts them when de-serialized in R
      running under different native encoding.  Format 3 comes with new
      serialization magic numbers (RDA3, RDB3, RDX3).  Format 3 can be
      selected by version = 3 in save(), serialize() and saveRDS(), but
      format 2 remains the default for all serialization and saving of
      the workspace.  Serialized data in format 3 cannot be read by
      versions of R prior to version 3.5.0.

    * The "Date" and "date-time" classes "POSIXlt" and "POSIXct" now
      have a working `length<-` method, as wished in PR#17387.

    * optim(*, control = list(warn.1d.NelderMead = FALSE)) allows to
      turn off the warning when applying the default "Nelder-Mead"
      method to 1-dimensional problems.

    * matplot(.., panel.first = .) etc now work, as log becomes
      explicit argument and ... is passed to plot() unevaluated, as
      suggested by Sebastian Meyer in PR#17386.

    * Interrupts can be suspended while evaluating an expression using
      suspendInterrupts.  Subexpression can be evaluated with
      interrupts enabled using allowInterrupts.  These functions can be
      used to make sure cleanup handlers cannot be interrupted.

    * R 3.5.0 includes a framework that allows packages to provide
      alternate representations of basic R objects (ALTREP).  The
      framework is still experimental and may undergo changes in future
      R releases as more experience is gained. For now, documentation
      is provided in <URL:


    * install.packages() for source packages now has the possibility to
      set a 'timeout' (elapsed-time limit).  For serial installs this
      uses the timeout argument of system2(): for parallel installs it
      requires the timeout utility command from GNU coreutils.

    * It is now possible to set 'timeouts' (elapsed-time limits) for
      most parts of R CMD check _via_ environment variables documented
      in the 'R Internals' manual.

    * The 'BioC extra' repository which was dropped from Bioconductor
      3.6 and later has been removed from setRepositories().  This
      changes the mapping for 6-8 used by setRepositories(ind=).

    * R CMD check now also applies the settings of environment
      the re-building of vignettes.

    * R CMD check with environment variable _R_CHECK_DEPENDS_ONLY_ set
      to a true value makes test-suite-management packages available
      and (for the time being) works around a common omission of
      rmarkdown from the VignetteBuilder field.


    * Support for a system Java on macOS has been removed - install a
      fairly recent Oracle Java (see 'R Installation and
      Administration' SSC.3.2).

    * configure works harder to set additional flags in SAFE_FFLAGS
      only where necessary, and to use flags which have little or no
      effect on performance.

      In rare circumstances it may be necessary to override the setting
      of SAFE_FFLAGS.

    * C99 functions expm1, hypot, log1p and nearbyint are now required.

    * configure sets a -std flag for the C++ compiler for all supported
      C++ standards (e.g., -std=gnu++11 for the C++11 compiler).
      Previously this was not done in a few cases where the default
      standard passed the tests made (e.g. clang 6.0.0 for C++11).


    * 'Writing R Extensions' documents macros MAYBE_REFERENCED,
      MAYBE_SHARED and MARK_NOT_MUTABLE that should be used by package
      C code instead NAMED or SET_NAMED.

    * The object header layout has been changed to support merging the
      ALTREP branch. This requires re-installing packages that use
      compiled code.

    * 'Writing R Extensions' now documents the R_tryCatch,
      R_tryCatchError, and R_UnwindProtect functions.

    * NAMEDMAX has been raised to 3 to allow protection of intermediate
      results from (usually ill-advised) assignments in arguments to
      BUILTIN functions. Package C code using SET_NAMED may need to be


    * Sys.timezone(location = FALSE) is defunct, and is ignored (with a

    * methods:::bind_activation() is defunct now; it typically has been
      unneeded for years.

      The undocumented 'hidden' objects .__H__.cbind and .__H__.rbind
      in package base are deprecated (in favour of cbind and rbind).

    * The declaration of pythag() in Rmath.h has been removed - the
      entry point has not been provided since R 2.14.0.


    * printCoefmat() now also works without column names.

    * The S4 methods on Ops() for the "structure" class no longer cause
      infinite recursion when the structure is not an S4 object.

    * nlm(f, ..) for the case where f() has a "hessian" attribute now
      computes LL' = H + uI correctly.  (PR#17249).

    * An S4 method that "rematches" to its generic and overrides the
      default value of a generic formal argument to NULL no longer
      drops the argument from its formals.

    * Rscript can now accept more than one argument given on the #!
      line of a script. Previously, one could only pass a single
      argument on the #! line in Linux.

    * Connections are now written correctly with encoding "UTF-16LE".

    * Evaluation of ..0 now signals an error.  When ..1 is used and ...
      is empty, the error message is more appropriate.

    * (Windows mainly.)  Unicode code points which require surrogate
      pairs in UTF-16 are now handled.  All systems should properly
      handle surrogate pairs, even those systems that do not need to
      make use of them.  (PR#16098)

    * stopifnot(e, e2, ...) now evaluates the expressions sequentially
      and in case of an error or warning shows the relevant expression
      instead of the full stopifnot(..)  call.

    * path.expand() on Windows now accepts paths specified as
      UTF-8-encoded character strings even if not representable in the
      current locale.  (PR#17120)

    * line(x, y) now correctly computes the medians of the left and
      right group's x-values and in all cases reproduces straight

    * Extending S4 classes with slots corresponding to special
      attributes like dim and dimnames now works.

    * Fix for legend() when fill has multiple values the first of which
      is NA (all colours used to default to par(fg)).  (PR#17288)

    * installed.packages() did not remove the cached value for a
      library tree that had been emptied (but would not use the old
      value, just waste time checking it).

    * The documentation for installed.packages(noCache = TRUE)
      incorrectly claimed it would refresh the cache.

    * aggregate(<data.frame>) no longer uses spurious names in some
      cases.  (PR#17283)

    * object.size() now also works for long vectors.

    * packageDescription() tries harder to solve re-encoding issues,
      notably seen in some Windows locales.  This fixes the citation()
      issue in PR#17291.

    * poly(<matrix>, 3) now works, thanks to prompting by Marc

    * readLines() no longer segfaults on very large files with embedded
      '\0' (aka 'nul') characters.  (PR#17311)

    * ns() (package splines) now also works for a single observation.
      interpSpline() gives a more friendly error message when the
      number of points is less than four.

    * dist(x, method = "canberra") now uses the correct definition; the
      result may only differ when x contains values of differing signs,
      e.g. not for 0-1 data.

    * methods:::cbind() and methods:::rbind() avoid deep recursion,
      thanks to Suharto Anggono via PR#17300.

    * Arithmetic with zero-column data frames now works more
      consistently; issue raised by Bill Dunlap.

      Arithmetic with data frames gives a data frame for ^ (which
      previously gave a numeric matrix).

    * pretty(x, n) for large n or large diff(range(x)) now works better
      (though it was never meant for large n); internally it uses the
      same rounding fuzz (1e-10) as seq.default() - as it did up to
      2010-02-03 when both were 1e-7.

    * Internal C-level R_check_class_and_super() and hence
      R_check_class_etc() now also consider non-direct super classes
      and hence return a match in more cases.  This e.g., fixes
      behaviour of derived classes in package Matrix.

    * Reverted unintended change in behavior of return calls in on.exit
      expressions introduced by stack unwinding changes in R 3.3.0.

    * Attributes on symbols are now detected and prevented; attempt to
      add an attribute to a symbol results in an error.

    * fisher.test(*, workspace = <n>) now may also increase the
      internal stack size which allows larger problem to be solved,
      fixing PR#1662.

    * The methods package no longer directly copies slots (attributes)
      into a prototype that is of an "abnormal" (reference) type, like
      a symbol.

    * The methods package no longer attempts to call length<-() on NULL
      (during the bootstrap process).

    * The methods package correctly shows methods when there are
      multiple methods with the same signature for the same generic
      (still not fully supported, but at least the user can see them).

    * sys.on.exit() is now always evaluated in the right frame. (From
      Lionel Henry.)

    * seq.POSIXt(*, by = "<n> DSTdays") now should work correctly in
      all cases and is faster.  (PR#17342)

    * .C() when returning a logical vector now always maps values other
      than FALSE and NA to TRUE (as documented).

    * Subassignment with zero length vectors now coerces as documented
      Further, x <- numeric(); x[1] <- character() now signals an error
      'replacement has length zero' (or a translation of that) instead
      of doing nothing.

    * (Package parallel.)  mclapply(), pvec() and mcparallel() (when
      mccollect() is used to collect results) no longer leave zombie
      processes behind.

    * R CMD INSTALL <pkg> now produces the intended error message when,
      e.g., the LazyData field is invalid.

    * as.matrix(dd) now works when the data frame dd contains a column
      which is a data frame or matrix, including a 0-column matrix/d.f.

    * mclapply(X, mc.cores) now follows its documentation and calls
      lapply() in case mc.cores = 1 also in the case mc.preschedule is
      false.  (PR#17373)

    * aggregate(<data.frame>, drop=FALSE) no longer calls the function
      on <empty> parts but sets corresponding results to NA.  (Thanks
      to Suharto Anggono's patches in PR#17280).

    * The duplicated() method for data frames is now based on the list
      method (instead of string coercion).  Consequently unique() is
      better distinguishing data frame rows, fixing PR#17369 and
      PR#17381.  The methods for matrices and arrays are changed

    * Calling names() on an S4 object derived from "environment"
      behaves (by default) like calling names() on an ordinary

    * read.table() with a non-default separator now supports quotes
      following a non-whitespace character, matching the behavior of

    * parLapplyLB and parSapplyLB have been fixed to do load balancing
      (dynamic scheduling).  This also means that results of
      computations depending on random number generators will now
      really be non-reproducible, as documented.

    * Indexing a list using dollar and empty string (l$"") returns

    * Using \usage{ data(<name>, package="<pkg>") } no longer produces
      R CMD check warnings.

    * match.arg() more carefully chooses the environment for
      constructing default choices, fixing PR#17401 as proposed by
      Duncan Murdoch.

    * Deparsing of consecutive ! calls is now consistent with deparsing
      unary - and + calls and creates code that can be reparsed
      exactly; thanks to a patch by Lionel Henry in PR#17397.  (As a
      side effect, this uses fewer parentheses in some other deparsing
      involving ! calls.)

Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com

More information about the R-announce mailing list