[R] R 3.3.0 is released

Peter Dalgaard pd.mes at cbs.dk
Tue May 3 10:37:56 CEST 2016

The build system rolled up R-3.3.0.tar.gz (codename "Supposedly Educational") 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 md5sums for the freshly created files, in case you wish
to check that they are uncorrupted:

MD5 (AUTHORS) = eb97a5cd38acb1cfc6408988bffef765
MD5 (COPYING) = eb723b61539feef013de476e68b5c50a
MD5 (COPYING.LIB) = a6f89e2100d9b6cdffcea4f398e37343
MD5 (FAQ) = 76774c732435b189f155a8b2841c1221
MD5 (INSTALL) = 3964b9119adeaab9ceb633773fc94aac
MD5 (NEWS) = 37f3315e19326b206a062faade8751d9
MD5 (NEWS.0) = bfcd7c147251b5474d96848c6f57e5a8
MD5 (NEWS.1) = eb78c4d053ec9c32b815cf0c2ebea801
MD5 (NEWS.2) = 8e2f4d1d5228663ae598a09bf1e2bc6b
MD5 (R-latest.tar.gz) = 5a7506c8813432d1621c9725e86baf7a
MD5 (README) = aece1dfbd18c1760128c3787f5456af6
MD5 (RESOURCES) = 529223fd3ffef95731d0a87353108435
MD5 (THANKS) = f80d02e7ba9729a927e1c9cf7b435b32
MD5 (VERSION-INFO.dcf) = a3b0ab07e2e8209fb81fbe97a114a1a2
MD5 (R-3/R-3.3.0.tar.gz) = 5a7506c8813432d1621c9725e86baf7a

This is the relevant part of the NEWS file



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


    * 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

      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

    * 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

    * Subscripting of matrix/array objects of type "expression" is now

    * 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

    * 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

    * [ 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

      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 <URL:

    * 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

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

    * rank() gains a ties.method = "last" option, for convenience (and

    * 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

    * 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

    * Profiling now records calls of the form foo::bar and some similar
      cases directly rather than as calls to <Anonymous>.  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

    * 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

    * 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

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


    * R CMD check has a new option --ignore-vignettes for use with
      non-Sweave vignettes whose VignetteBuilder package is not

    * 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


    * 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

    * [<- with an S4 value into a list currently embeds the S4 object
      into its own list such that the end result is roughly equivalent
      to using [[<-.  That behavior is deprecated.  In the future, the
      S4 value will be coerced to a list with as.list().

    * Package tools' functions package.dependencies(), pkgDepends(),
      etc are deprecated now, mostly in favor of package_dependencies()
      which is both more flexible and efficient.


    * Support for very old versions of valgrind (e.g., 3.3.0) has been

    * The included libtool script (generated by configure) has been
      updated to version 2.4.6 (from 2.2.6a).

    * libcurl version 7.28.0 or later with support for the https
      protocol is required for installation (except on Windows).

    * BSD networking is now required (except on Windows) and so
      capabilities("http/ftp") is always true.

    * configure uses pkg-config for PNG, TIFF and JPEG where this is
      available.  This should work better with multiple installs and
      with those using static libraries.

    * The minimum supported version of OS X is 10.6 ('Snow Leopard'):
      even that has been unsupported by Apple since 2012.

    * The configure default on OS X is --disable-R-framework: enable
      this if you intend to install under /Library/Frameworks and use
      with R.app.

    * The minimum preferred version of PCRE has since R 3.0.0 been 8.32
      (released in Nov 2012).  Versions 8.10 to 8.31 are now deprecated
      (with warnings from configure), but will still be accepted until
      R 3.4.0.

    * configure looks for C functions __cospi, __sinpi and __tanpi and
      uses these if cospi _etc_ are not found.  (OS X is the main

    * (Windows) R is now built using gcc 4.9.3.  This build will
      require recompilation of at least those packages that include C++
      code, and possibly others.  A build of R-devel using the older
      toolchain will be temporarily available for comparison purposes.

      During the transition, the environment variable R_COMPILED_BY has
      been defined to indicate which toolchain was used to compile R
      (and hence, which should be used to compile code in packages).
      The COMPILED_BY variable described below will be a permanent
      replacement for this.

    * (Windows) A make and R CMD config variable named COMPILED_BY has
      been added.  This indicates which toolchain was used to compile R
      (and hence, which should be used to compile code in packages).


    * The make macro AWK which used to be made available to files such
      as src/Makefile is no longer set.


    * The API call logspace_sum introduced in R 3.2.0 is now remapped
      as an entry point to Rf_logspace_sum, and its first argument has
      gained a const qualifier.  (PR#16470)

      Code using it will need to be reinstalled.

      Similarly, entry point log1pexp also defined in Rmath.h is
      remapped there to Rf_log1pexp

    * R_GE_version has been increased to 11.

    * New API call R_orderVector1, a faster one-argument version of

    * When R headers such as R.h and Rmath.h are called from C++ code
      in packages they include the C++ versions of system headers such
      as <cmath> rather than the legacy headers such as <math.h>.
      (Headers Rinternals.h and Rinterface.h already did, and inclusion
      of system headers can still be circumvented by defining
      NO_C_HEADERS, including as from this version for those two

      The manual has long said that R headers should *not* be included
      within an extern "C" block, and almost all the packages affected
      by this change were doing so.

    * Including header S.h from C++ code would fail on some platforms,
      and so gives a compilation error on all.

    * The deprecated header Rdefines.h is now compatible with defining

    * The connections API now includes a function R_GetConnection()
      which allows packages implementing connections to convert R
      connection objects to Rconnection handles used in the API. Code
      which previously used the low-level R-internal getConnection()
      entry point should switch to the official API.


    * C-level asChar(x) is fixed for when x is not a vector, and it
      returns "TRUE"/"FALSE" instead of "T"/"F" for logical vectors.

    * The first arguments of .colSums() etc (with an initial dot) are
      now named x rather than X (matching colSums()): thus error
      messages are corrected.

    * A coef() method for class "maov" has been added to allow vcov()
      to work with multivariate results. (PR#16380)

    * method = "libcurl" connections signal errors rather than
      retrieving HTTP error pages (where the ISP reports the error).

    * xpdrows.data.frame() was not checking for unique row names; in
      particular, this affected assignment to non-existing rows via
      numerical indexing. (PR#16570)

    * tail.matrix() did not work for zero rows matrices, and could
      produce row "labels" such as "[1e+05,]".

    * Data frames with a column named "stringsAsFactors" now format and
      print correctly.  (PR#16580)

    * cor() is now guaranteed to return a value with absolute value
      less than or equal to 1. (PR#16638)

    * Array subsetting now keeps names(dim(.)).

    * Blocking socket connection selection recovers more gracefully on
      signal interrupts.

    * The data.frame method of rbind() construction row.names works
      better in borderline integer cases, but may change the names
      assigned.  (PR#16666)

    * (X11 only) getGraphicsEvent() miscoded buttons and missed mouse
      motion events.  (PR#16700)

    * methods(round) now also lists round.POSIXt.

    * tar() now works with the default files = NULL.  (PR#16716)

    * Jumps to outer contexts, for example in error recovery, now make
      intermediate jumps to contexts where on.exit() actions are
      established instead of trying to run all on.exit() actions before
      jumping to the final target. This unwinds the stack gradually,
      releases resources held on the stack, and significantly reduces
      the chance of a segfault when running out of C stack space. Error
      handlers established using withCallingHandlers() and
      options("error") specifications are ignored when handling a C
      stack overflow error as attempting one of these would trigger a
      cascade of C stack overflow errors.  (These changes resolve

    * The spacing could be wrong when printing a complex array.
      (Report and patch by Lukas Stadler.)

    * pretty(d, n, min.n, *) for date-time objects d works again in
      border cases with large min.n, returns a labels attribute also
      for small-range dates and in such cases its returned length is
      closer to the desired n.  (PR#16761) Additionally, it finally
      does cover the range of d, as it always claimed.

    * tsp(x) <- NULL did not handle correctly objects inheriting from
      both "ts" and "mts".  (PR#16769)

    * install.packages() could give false errors when
      options("pkgType") was "binary".  (Reported by Jose Claudio

    * A bug fix in R 3.0.2 fixed problems with locator() in X11, but
      introduced problems in Windows.  Now both should be fixed.

    * download.file() with method = "wininet" incorrectly warned of
      download file length difference when reported length was unknown.

    * diag(NULL, 1) crashed because of missed type checking.

More information about the R-announce mailing list