The ‘CHANGES IN R 3.6.2’ article from the 2019-2 issue.
CHANGES IN R 3.6.2
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
configure
: this is safer with LTO builds and allows the detection
to be overridden – see file config.site
.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
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
.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
.Windows
DEPRECATED AND DEFUNCT
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 , reported by Jonathan Rougier.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(<call>)
now gives correct error message.ls.str()
no longer wrongly shows "<missing>"
in rare
cases.pchisq(<LRG>, <LRG>, 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 .format(object.size(.), digits=NULL)
now works, fixing 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 .
Additionally, it now also works when some variables are data frames,
fixing , reported by Patrick Breheny.barplot()
could get spacings wrong if there were exactly two bars
. 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 .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 in
large cases, thanks to a report and proposal by Taeke Harkema in .CHANGES IN R 3.6.1
INSTALLATION on a UNIX-ALIKE
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
.Fortran()
is formally
deprecated and gives a non-portability warning. (It has long been
strongly discouraged in ‘Writing R Extensions’.)BUG FIXES
menuInstallPkgs()
works
again, thanks to Len Weil’s and Duncan Murdoch’s .R CMD check
on data()
fixing thanks to Duncan Murdoch.quasi(*, variance = list(..))
now works more efficiently, and
should work in all cases fixing . Further, quasi(var = mu(1-mu))
and quasi(var = "mu ^ 3")
now work, and
quasi(variance = "log(mu)")
now gives a correct error message.boxplot(y ~ f, horizontal=TRUE)
now produces correct x- and
y-labels.rbind.data.frame()
allows to keep <NA>
levels from factor
columns () 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.R CMD check
, fixing thanks to Xavier Robin.function
s with
a user defined print.function
, thanks to Bill Dunlap’s report.writeClipboard(.., format = <n>)
now does correctly
pass format
to the underlying C code, thanks to a bug report (with
patch) by Jenny Bryan.as.data.frame()
treats 1D arrays the same as vectors, .smoothEnds(x, *)
working with NA
s (towards
runmed()
working in that case, in the next version of R).vcov(glm(<quasi>), dispersion = *)
works correctly again, fixing
thanks to Pavel Krivitsky.R CMD INSTALL
of binary packages on Windows now works also with
per-directory locking.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
.readline
is active), only expand tilde (~
)
file names starting with a tilde, instead of almost all tildes.*.Rd
) files, item [..]
is no longer treated
specially when rendered in LaTeX and hence pdf, but rather shows the
brackets in all cases.CHANGES IN R 3.6.0
SIGNIFICANT USER-VISIBLE CHANGES
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).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 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 .
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 .
trimws()
gets new optional whitespace
argument, allowing more
extensive definitions of “space”, such as including Unicode spaces
(as wished in ).
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 ual.
outer(x,y, FUN = "*")
is more efficient using tcrossprod(u,v)
instead of u %*% t(v)
.
vcov(<mlm>)
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 .
Fitting multiple linear models via lm()
does work with matrix
offsets, as suggested in .
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 .
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", <fun>)
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 . 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 .
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.arg
s.
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 . 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 .
pmax()
and pmin(x)
now also work for long vectors, thanks to
Suharto Anggono’s .
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 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
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
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, .vignetteDepends()
has been deprecated (it called
a function deprecated since Feb 2016), being partly replaced by
newly exported vignetteInfo()
.f77_f2c
script has been removed: it no longer sufficed to
compile the .f
files in R.make
macros such as CXX1X
has
been removed: use the CXX11
forms instead.F77_VISIBILITY
is deprecated in favour of
F_VISIBILITY
.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 .setGeneric("foo")
in a package no longer fails when the
enclosing environment of the implicit generic foo()
is
.GlobalEnv
.untar(file("<some>.tar.gz"), *)
now gives a better error message,
suggesting to use gzfile()
instead.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 Karlprint.*()
, thanks to Lionel Henry’s patches in :
show()
rather than print()
, as with auto-printing.[[<n>]]
) of recursive data
structures are now printed correctly in complex cases.print()
are now properly forwarded to
methods when printing lists, pairlists or attributes containing
S3 objects.srcref
attributes if present.install.packages()
with a length zero pkgs
argument now
is a no-op ().unlist(x)
now returns a correct factor
when x
is a nested list
with factor leaves, fixing and .help(family)
gives more details about the aic
component, thanks to Ben Bolker’s prompting.attributes
and ‘attributes<-‘
now gives
x
as name of the first and main argument which the implementation
has been requiring, fixing . For consistency, the first argument
name is also changed from obj
to x
for ‘mostattributes<-‘
.strwidth()
now uses par("font")
as default font face ().plot(<table>, log="x")
no longer warns about log
.print()
method for "htest"
objects now formats the test
statistic and parameter directly and hence no longer rounds to units
before the decimal point. Consequently, printing of t.test()
results with a small number of digits now shows non-large df
’s to
the full precision ().kruskal.test()
and fligner.test()
no longer erroneously insist
on numeric g
group arguments ().print.aov()
missed column names in the multivariate case due to
misspelling (reported by Chris Andrews).axis()
now creates valid at
locations also for small subnormal
number ranges in log scale plots.format.POSIXlt()
now also recycles the zone
and gmtoff
list
components to full length when needed, and its internal C code
detects have_zone
in more cases. In some cases, this changes its
output to become compatible with format.POSIXct()
.detectCores()
in package parallel now detects
processors in all processor groups, not just the group R is running
in (impacts particularly systems with more than 64 logical
processors). Reported by Arunkumar Srinivasan.socketSelect()
would hang with more than 64 sockets,
and hence parallel::clusterApplyLB()
would hang with more than 64
workers. Reported by Arunkumar Srinivasan.as(1L, "double")
now does coerce ().lm.influence()
, influence.measures()
, rstudent()
etc now work
(more) correctly for multivariate models ("mlm"
), thanks to
(anonymous) stackoverflow remarks.sample.int(2.9, *, replace=TRUE)
again behaves as documented and
as in R < 3.0.0, namely identically to sample.int(2, ..)
.convertColor()
for chromatic adaptation; thanks to Brodie
Gaslam .Sexpr[stage=install]{..}
to create an Rd
section no longer
gives a warning in R CMD check
; problem originally posted by Gábor
Csárdi, then reported as with a partial patch by Duncan Murdoch.split.default()
no longer relies on [[<-()
, so it behaves as
expected when splitting an object by a factor with the empty string
as one of its levels. Thanks to Brad Friedman for the report..Rd
files are now more reliable,
thanks to a patch from Duncan Murdoch.numeric
method for all.equal()
, a numeric scale
argument is now checked to be positive and allowed to be of length
> 1. (The latter worked originally and with a warning in recent
years).OutDec
option setting
when not equal to the default. Reported by Michael Sannella.y
is numeric and f
a factor
, plot(y ~ f)
nicely uses
"y" and "f" as y- and x-labels. The more direct boxplot(y ~ f)
now does too. The new argument ann = FALSE
may be used to suppress
these.formatC(*, zero.print = "< 0.001")
no longer give an
error and are further improved via new optional argument
replace.zero
. Reported by David Hugh-Jones.methods::formalArgs("<fn>")
now finds the same function as
formals("<fn>")
, fixing Emil Bode’s .seq()
now avoids integer overflow, thanks to
the report and "cumsum" patch of Suharto Anggono’s .sub()
no longer loses encodings for non-ASCII replacements ().formula(model.frame(frml, ..))
now returns frml
in all cases,
thanks to Bill Dunlap. The previous behavior is available as
DF2formula(<model.frame>)
.ar.ols()
also returns scalar var.pred
in univariate case ().normalizePath()
now treats NA
path as non-existent and
normalizes it to NA
. file.access()
treats NA
file name as
non-existent. file.edit()
and connection functions such as
file()
now treat NA
file names as errors.regularize.values()
auxiliary of approx()
,
splinefun()
etc now warns again when there are ties and the caller
did not specify ties
. Further, it no longer duplicates x
and y
unnecessarily when x
is already sorted ().strtoi("", base)
now gives NA
on all platforms, following its
documentation. Reported by Michael Chirico.setClassUnion()
, if environment variable
_R_METHODS_SHOW_CHECKSUBCLASSES
is set to true, the internal
.checkSubclasses()
utility prints debugging info to see where it
is used.max.col(m)
with an m
of zero columns now returns integer NA
(instead of 1
).axTicks()
no longer returns small “almost zero” numbers (in
exponential format) instead of zero, fixing Ilario Gelmetti’s .isSymmetric(matrix(0, dimnames=list("A","b")))
is FALSE
again,
as always documented.cairo_pdf
graphics device (and other Cairo-based devices) now
clip correctly to the right and bottom border.
There was an off-by-one-pixel bug, reported by Lee Kelvin.as.roman(3) <= 2:4
and all other comparisons now work, as do group
"Summary"
function calls such as max(as.roman(sample(20)))
and
as.roman(NA)
. (Partly reported by Bill Dunlap in .)reformulate("x", response = "sin(y)")
no longer produces extra
back quotes, , and gains new optional argument env
.stdin
with re-encoding
(R –encoding=enc < input
) the code on a Unix-alike now ensures
that each converted input line is terminated with a newline even if
re-encoding fails.as.matrix.data.frame()
now produces better strings from logicals,
thanks to from Gabe Becker.rowSums()
, rowMeans()
, colSums()
and colMeans()
is restricted to "x"
.match(x, tab)
now works for long character vectors x
, thanks
to by Andreas Kersting.selectMethod()
is robust to ANY-truncation of method signatures
(thanks to Herve Pages for the report).CHANGES IN R 3.5.3
INSTALLATION on a UNIX-ALIKE
PACKAGE INSTALLATION
F_VISIBILITY
as an alternative to F77_VISIBILITY
. This
will become the preferred form in R 3.6.0.BUG FIXES
writeLines(readLines(fnam), fnam)
now works as expected, thanks to
Peter Meissner’s .setClassUnion()
no longer warns, but uses message()
for now,
when encountering “non local” subclasses of class members.stopifnot(exprs = T)
no longer fails.CHANGES IN R 3.5.2
PACKAGE INSTALLATION
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
tests/p-r-random-tests.R
no
longer fail occasionally as they now randomly sample from
“certified” random seeds.BUG FIXES
"glm"
method of drop1()
miscalculated the score test
(test="Rao"
) when the model contained an offset.lm(y ~ 0)
now have a
correctly dimensioned empty coefficient matrix; reported by Brett
Presnell.vcov(<empty mlm>)
and hence confint()
now work (via a
consistency change in summary.lm()
).confint(<multiple lm()>)
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 .pthread
library where required (rather than relying on OpenMP to provide it:
configuring with –disable-openmp
was failing on some Linux
systems).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 .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.R CMD INSTALL
now gets a
warnOption = 1
argument and only sets options(warn = warnOption)
when that increases the warning level ().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.match()
with length one x
and POSIXlt table
gave a
segfault ().makeCluster()
).nextn(n)
now also works for larger n
and no longer loops
infinitely for e.g, n <- 214e7
.cooks.distance()
and rstandard()
now work correctly for multiple
linear models ("mlm"
).polym()
and corresponding lm()
prediction now also work for a
boundary "vector" case fixing , reported by Alexandre Courtiol.terms()
could segfault ().cut(rep(0, 7))
now works, thanks to Joey Reid and Benjamin Tyner
().download.file(*, method = "curl", cacheOK = FALSE)
should work now
on Windows, thanks to Kevin Ushey’s patch in .duplicated(<dataframe with ’f’>)
now works, too, thanks to Andreas
Kersting’s ; ditto for anyDuplicated()
.legend(*, cex = 1:2)
now works less badly.print()
method for POSIXct
and POSIXlt
now correctly obeys
getOption("max.print")
, fixing a long-standing typo, and it also
gets a corresponding optional max
argument.<data frame>[TRUE, <new>] <- list(c1, c2)
now works correctly,
thanks to Suharto Anggono’s and Emil Bode’s patch in .seq.int(*, by=by, length=n)
no longer wrongly “drops fractional
parts” when by
is integer, thanks to Suharto Anggono’s report .file()
connections to non-regular files
(like sockets), as well as fifo()
and pipe()
connections. Fixes
, reported by Chris Culnane.CHANGES IN R 3.5.1
BUG FIXES
file("stdin")
is no longer considered seekable.dput()
and dump()
are no longer truncating when
options(deparse.max.lines = *)
is set.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é Pagès with well documented
examples.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 , based on a patch from Duncan Murdoch.simulate.lm(glm(*, gaussian(link = <non-default>)))
has been
corrected, fixing thanks to Alex Courtiol.unlist(x)
no longer fails in some cases of nested empty lists.
Reported by Steven Nydick.qr.coef(qr(<all 0, w/ colnames>))
now works. Reported by Kun Ren.deparse(x)
, dput(x)
and dump()
now respect c()
’s argument
names recursive
and use.names
, e.g., for
x <- setNames(0, "recursive")
, thanks to Suharto Anggono’s ..Renviron
on Windows with Rgui
is again by default searched for
in user documents directory when invoked via the launcher icon.
Reported by Jeroen Ooms.printCoefmat()
now also works with explicit right=TRUE
.print.noquote()
now also works with explicit quote=FALSE
.pairs(.., horInd=*, verInd=*)
now gets the
correct order, thanks to reports by Chris Andrews and Gerrit
Eichner. Additionally, when horInd
or verInd
contain only a
subset of variables, all the axes are labeled correctly now.agrep("..|..", .., fixed=FALSE)
now matches when it should, thanks
to a reminder by Andreas Kolter.str(ch)
now works for more invalid multibyte strings.CHANGES IN R 3.5.0
SIGNIFICANT USER-VISIBLE CHANGES
.Call
and similar).NEW FEATURES
UTILITIES
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.R CMD check
via environment variables documented in the
‘R Internals’ manual.setRepositories()
. This changes
the mapping for 6–8 used by setRepositories(ind=)
.R CMD check
now also applies the settings of environment variables
_R_CHECK_SUGGESTS_ONLY_
and _R_CHECK_DEPENDS_ONLY_
to 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 from the
VignetteBuilder
field.INSTALLATION on a UNIX-ALIKE
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
.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).C-LEVEL FACILITIES
MAYBE_REFERENCED
,
MAYBE_SHARED
and MARK_NOT_MUTABLE
that should be used by package
C
code instead NAMED
or SET_NAMED
.ALTREP
branch. This requires re-installing packages that use
compiled code.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 revised.DEPRECATED AND DEFUNCT
Sys.timezone(location = FALSE)
is defunct, and is ignored (with a
warning).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
).pythag()
in Rmath.h
has been removed — the
entry point has not been provided since R 2.14.0.BUG FIXES
printCoefmat()
now also works without column names.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 correctly. ().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."UTF-16LE"
.
()...0
now signals an error. When ..1
is used and
...
is empty, the error message is more appropriate.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. ()line(x, y)
now correctly computes the medians of the left and
right group’s x-values and in all cases reproduces straight lines.dim
and dimnames
now works.legend()
when fill
has multiple values the first of
which is NA
(all colours used to default to par(fg)
). ()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).installed.packages(noCache = TRUE)
incorrectly claimed it would refresh the cache.aggregate(<data.frame>)
no longer uses spurious names in some
cases. ()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 .poly(<matrix>, 3)
now works, thanks to prompting by Marc Schwartz.readLines()
no longer segfaults on very large files with embedded
’0’
(aka ‘nul’) characters. ()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 .^
(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.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 .return
calls in
on.exit
expressions introduced by stack unwinding changes in R
3.3.0.fisher.test(*, workspace = <n>)
now may also increase the internal
stack size which allows larger problem to be solved, fixing .length<-()
on
NULL
(during the bootstrap process).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. ().C()
when returning a logical vector now always maps values other
than FALSE and NA to TRUE (as documented).x <- numeric(); x[1] <- character()
now signals an error
‘replacement has length zero’ (or a translation of that) instead of
doing nothing.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. ()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 ).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 and . The methods for
matrices and arrays are changed accordingly.names()
on an S4 object derived from "environment"
behaves (by default) like calling names()
on an ordinary
environment.read.table()
with a non-default separator now supports quotes
following a non-whitespace character, matching the behavior of
scan()
.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.l$""
) returns NULL.usage{ data(<name>, package="<pkg>") }
no longer produces
R CMD check
warnings.match.arg()
more carefully chooses the environment for
constructing default choices
, fixing as proposed by Duncan
Murdoch.!
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 . (As a side effect,
this uses fewer parentheses in some other deparsing involving !
calls.)CHANGES IN R 3.4.4
NEW FEATURES
Sys.timezone()
tries more heuristics on Unix-alikes and so is more
likely to succeed (especially on Linux). For the slowest method, a
warning is given recommending that TZ
is set to avoid the search.parallel::detectCores(logical = FALSE)
is ignored on Linux
systems, since the information is not available with virtualized
OSes.INSTALLATION on a UNIX-ALIKE
configure
will use pkg-config
to find the flags to link to
jpeg
if available (as it should be for the recently-released
jpeg-9c
and libjpeg-turbo
). (This amends the code added in R
3.3.0 as the module name in jpeg-9c
is not what that tested for.)DEPRECATED AND DEFUNCT
Sys.timezone(location = FALSE)
(which was a stop-gap measure for
Windows long ago) is deprecated. It no longer returns the value of
environment variable TZ
(usually a location).make
macros such as CXX1X
is formally
deprecated: use the CXX11
forms instead.BUG FIXES
power.prop.test()
now warns when it cannot solve the problem,
typically because of impossible constraints. ()removeSource()
no longer erroneously removes NULL
in certain
cases, thanks to Dénes Tóth.nls(‘NO [mol/l]‘ ~ f(t))
and nls(y ~ a)
now work. (Partly from )R CMD build
checks for GNU cp
rather than assuming Linux has it.
( says ‘Alpine Linux’ does not.)sum(<large ints>, <stuff>)
is more consistent. ()rf()
and rbeta()
now also work correctly when ncp
is not
scalar, notably when (partly) NA
. ()is.na(NULL)
no longer warns. ()R CMD INSTALL
now correctly sets C++ compiler flags when all
source files are in sub-directories of src
.CHANGES IN R 3.4.3
INSTALLATION on a UNIX-ALIKE
–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.)...
when
the call contains ...
.utf8ToInt()
.range(c(TRUE, NA), finite = TRUE)
and similar no longer return
NA
. (Reported by Lukas Stadler.)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.CHANGES IN R 3.4.2
NEW FEATURES
LC_ALL
category in Sys.setlocale()
invalidates any
cached locale-specific day/month names and the AM/PM indicator for
strptime()
(as setting LC_TIME
has since R 3.1.0).tools::write_PACKAGES(rds_compress=)
has been
changed to "xz"
to match the compression used by CRAN.c()
and unlist()
are now more efficient in constructing the
names(.)
of their return value, thanks to a proposal by Suharto
Anggono. ()UTILITIES
R CMD check
checks for and R CMD build
corrects CRLF line
endings in shell scripts configure
and cleanup
(even on
Windows).INSTALLATION on a UNIX-ALIKE
-fopenmp
and -xopenmp
but only the
latter enables OpenMP so it is now tried first.BUG FIXES
within(List, rm(x1, x2))
works correctly again, including when
List[["x2"]]
is NULL
.regexec(pattern, text, *)
now applies as.character(.)
to its
first two arguments, as documented.write.table()
and related functions, writeLines()
, and perhaps
other functions writing text to connections did not signal errors
when the writes failed, e.g. due to a disk being full. Errors will
now be signalled if detected during the write, warnings if detected
when the connection is closed. ()rt()
assumed the ncp
parameter was a scalar. ()menu(choices)
with more than 10 choices which easily fit into one
getOption("width")
-line no longer erroneously repeats choices. ()length()<-
on a pairlist succeeds.
(https://stat.ethz.ch/pipermail/r-devel/2017-July/074680.html)quote(("n"))
or R functions are correctly
printed again, where R 3.4.1 accidentally duplicated the
backslashes.names()
for very large objects in c()
and
unlist()
now works, thanks to Suharto Anggono’s patch proposals in
.model.matrix(~1, mf)
now gets the row names from mf
also when
they differ from 1:nrow(mf)
, fixing thanks to the suggestion by
Sebastian Meyer.sigma(fm)
now takes the correct denominator degrees of freedom for
a fitted model with NA
coefficients. ()hist(x, "FD")
no longer “dies” with a somewhat cryptic error
message when x
has extreme outliers or IQR()
zero:
nclass.FD(x)
tries harder to find a robust bin width in the latter
case, and hist.default(*, breaks)
now checks and corrects a too
large breaks
number. ()callNextMethod()
works for ...
methods.qr.coef(qd, y)
now has correct names also when qd
is a complex
QR or stems from qr(*, LAPACK=TRUE)
.options(device = *)
to an invalid function no longer
segfaults when plotting is initiated. ()encodeString(<very large string>)
no longer segfaults. ()configure –enable-maintainer-mode
without having installed notangle
(it was required in R
3.4.[01])....
calls the method by name instead of
.Method
(for consistency with default dispatch), and only attempts
to pass non-missing arguments from the generic.readRDS(textConnection(.))
works again. ()(1:n)[-n]
no longer segfaults for n <- 2.2e9
(on a platform with
enough RAM).x <- 1:2; tapply(x, list(x, x), function(x) "")[1,2]
now correctly
returns NA
. ()do_gc
to the C
interface R_gc
. This helps with
reclaiming inaccessible connections.help.search(topic)
and ??topic
matching topics in vignettes with
multiple file name extensions (e.g., *.md.rsp
but not *.Rmd
)
failed with an error when using options(help_type = "html")
.array(character(), 1)
now gives (a 1D array with) NA
as has been
documented for a long time as in the other cases of zero-length
array initialization and also compatibly with
matrix(character(), *)
. As mentioned there, this also fixes .splineDesign(.., derivs = 4)
no longer segfaults.fisher.test(*, hybrid=TRUE)
now (again) will use the hybrid method
when Cochran’s conditions are met, fixing .CHANGES IN R 3.4.1
INSTALLATION on a UNIX-ALIKE
BUG FIXES
getParseData()
gave incorrect column information when code
contained multi-byte characters. ()?stats::cor()
did not work.
()readRDS(url(....))
now works.R CMD Sweave
again returns status = 0
on successful completion..Rbuildignore
were not being ignored properly.
()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.choose.files()
function could return incorrect
results when called with multi = FALSE
. ()aggregate(<data.frame>, drop = FALSE)
now also works in case of
near-equal numbers in by
. ()fourfoldplot()
could encounter integer overflow when calculating
the odds ratio. ()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).CHANGES IN R 3.4.0
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 2.7.2 again. Consequently,
table(1:2, exclude = NULL)
no longer contains a zero count for
<NA>
, but useNA = "always"
continues to do so.
summary.default()
no longer rounds, but its print method does
resulting in less extraneous rounding, notably of numbers in the ten
thousands.
factor(x, exclude = L)
behaves more rationally when x
or L
are
character vectors. Further, exclude = <factor>
now behaves as
documented for long.
Arithmetic, logic (&
, |
) and comparison (aka ‘relational’, e.g.,
<
, ==
) operations with arrays now behave consistently, notably
for arrays of length zero.
Arithmetic between length-1 arrays and longer non-arrays had
silently dropped the array attributes and recycled. This now gives a
warning and will signal an error in the future, as it has always for
logic and comparison operations in these cases (e.g., compare
matrix(1,1) + 2:3
and matrix(1,1) < 2:3
).
The JIT (‘Just In Time’) byte-code compiler is now enabled by
default at its level 3. This means functions will be compiled on
first or second use and top-level loops will be compiled and then
run. (Thanks to Tomas Kalibera for extensive work to make this
possible.)
For now, the compiler will not compile code containing explicit
calls to browser()
: this is to support single stepping from the
browser()
call.
JIT compilation can be disabled for the rest of the session using
compiler::enableJIT(0)
or by setting environment variable
R_ENABLE_JIT
to 0
.
xtabs()
works more consistently with NA
s, also in its result no
longer setting them to 0
. Further, a new logical option addNA
allows to count NA
s where appropriate. Additionally, for the case
sparse = TRUE
, the result’s dimnames
are identical to the
default case’s.
Matrix products now consistently bypass BLAS when the inputs have
NaN
/Inf
values. Performance of the check of inputs has been
improved. Performance when BLAS is used is improved for
matrix/vector and vector/matrix multiplication (DGEMV is now used
instead of DGEMM).
One can now choose from alternative matrix product implementations
via options(matprod = )
. The "internal"
implementation is not
optimized for speed but consistent in precision with other
summations in R (using long double
accumulators where available).
"blas"
calls BLAS directly for best speed, but usually with
undefined behavior for inputs with NaN
/Inf
.
NEW FEATURES
User errors such as integrate(f, 0:1, 2)
are now caught.
Add signature
argument to debug()
, debugonce()
, undebug()
and isdebugged()
for more conveniently debugging S3 and S4
methods. (Based on a patch by Gabe Becker.)
Add utils::debugcall()
and utils::undebugcall()
for debugging
the function that would be called by evaluating the given
expression. When the call is to an S4 generic or standard S3
generic, debugcall()
debugs the method that would be dispatched. A
number of internal utilities were added to support this, most
notably utils::isS3stdGeneric()
. (Based on a patch by Gabe
Becker.)
Add utils::strcapture()
. Given a character vector and a regular
expression containing capture expressions, strcapture()
will
extract the captured tokens into a tabular data structure, typically
a data.frame
.
str()
and strOptions()
get a new option drop.deparse.attr
with
improved but changed default behaviour for expressions. For
expression
objects x
, str(x)
now may remove extraneous white
space and truncate long lines.
str(<looooooooong_string>)
is no longer very slow; inspired by
Mikko Korpela’s proposal in .
str(x)
’s default method is more “accurate” and hence somewhat more
generous in displaying character vectors; this will occasionally
change R outputs (and need changes to some *.Rout(.save)
files).
For a classed integer vector such as x <- xtabs(~ c(1,9,9,9))
,
str(x)
now shows both the class and "int"
, instead of only the
latter.
isSymmetric(m)
is much faster for large asymmetric matrices m
via pre-tests and a new option tol1
(with which strict back
compatibility is possible but not the default).
The result of eigen()
now is of class "eigen"
in the default
case when eigenvectors are computed.
Zero-length date and date-time objects (of classes "POSIX[cl]?t"
)
now print()
“recognizably”.
xy.coords()
and xyz.coords()
get a new setLab
option.
The method
argument of sort.list()
, order()
and sort.int()
gains an "auto"
option (the default) which should behave the same
as before when method
was not supplied.
stopifnot(E, ..)
now reports differences when E
is a call to
all.equal()
and that is not true.
boxplot(<formula>, *)
gain optional arguments drop
, sep
, and
lex.order
to pass to split.default()
which itself gains an
argument lex.order
to pass to interaction()
for more
flexibility.
The plot()
method for ppr()
has enhanced default labels (xmin
and main
).
sample.int()
gains an explicit useHash
option (with a back
compatible default).
identical()
gains an ignore.srcref
option which drops "srcref"
and similar attributes when true (as by default).
diag(x, nrow = n)
now preserves typeof(x)
, also for logical,
integer and raw x
(and as previously for complex and numeric).
smooth.spline()
now allows direct specification of lambda
, gets
a hatvalues()
method and keeps tol
in the result, and optionally
parts of the internal matrix computations.
addNA()
is faster now, e.g. when applied twice. (Part of .)
New option rstandard(<lm>, type = "predicted")
provides the
“PRESS”–related leave-one-out cross-validation errors for linear
models.
After seven years of deprecation, duplicated factor levels now
produce a warning when printed and an error in levels<-
instead of
a warning.
Invalid factors, e.g., with duplicated levels (invalid but
constructable) now give a warning when printed, via new function
.valid.factor()
.
sessionInfo()
has been updated for Apple’s change in OS naming as
from ‘10.12’ (‘macOS Sierra’ vs ‘OS X El Capitan’).
Its toLatex()
method now includes the running
component.
options(interrupt=)
can be used to specify a default action for
user interrupts. For now, if this option is not set and the error
option is set, then an unhandled user interrupt invokes the error
option. (This may be dropped in the future as interrupt
conditions
are not error
conditions.)
In most cases user interrupt handlers will be called with a
"resume"
restart available. Handlers can invoke this restart to
resume computation. At the browser prompt the r
command will
invoke a "resume"
restart if one is available. Some read
operations cannot be resumed properly when interrupted and do not
provide a "resume"
restart.
Radix sort is now chosen by method = "auto"
for sort.int()
for
double vectors (and hence used for sort()
for unclassed double
vectors), excluding ‘long’ vectors.
sort.int(method = "radix")
no longer rounds double vectors.
The default
and data.frame
methods for stack()
preserve the
names of empty elements in the levels of the ind
column of the
return value. Set the new drop
argument to TRUE
for the previous
behavior.
Speedup in simplify2array()
and hence sapply()
and mapply()
(for the case of names and common length > 1), thanks to Suharto
Anggono’s .
table(x, exclude = NULL)
now sets useNA = "ifany"
(instead of
"always"
). Together with the bug fixes for this case, this
recovers more consistent behaviour compatible to older versions
of R. As a consequence, summary()
for a logical vector no longer
reports (zero) counts for NA
when there are no NA
s.
dump.frames()
gets a new option include.GlobalEnv
which allows
to also dump the global environment, thanks to Andreas Kersting’s
proposal in .
system.time()
now uses message()
instead of cat()
when
terminated early, such that suppressMessages()
has an effect;
suggested by Ben Bolker.
citation()
supports inst/CITATION
files from package source
trees, with lib.loc
pointing to the directory containing the
package.
try()
gains a new argument outFile
with a default that can be
modified via options(try.outFile = .)
, useful notably for
Sweave
.
The unexported low-level functions in package parallel for passing
serialized R objects to and from forked children now support long
vectors on 64-bit platforms. This removes some limits on
higher-level functions such as mclapply()
(but returning gigabyte
results from forked processes via serialization should be avoided
if at all possible).
Connections now print()
without error even if invalid, e.g. after
having been destroyed.
apropos()
and find(simple.words = FALSE)
no longer match object
names starting with .
which are known to be internal objects (such
as .__S3MethodsTable__.
).
Convenience function hasName()
has been added; it is intended to
replace the common idiom !is.null(x$name)
without the usually
unintended partial name matching.
strcapture()
no longer fixes column names nor coerces strings to
factors (suggested by Bill Dunlap).
strcapture()
returns NA
for non-matching values in x
(suggested by Bill Dunlap).
source()
gets new optional arguments, notably exprs
; this is
made use of in the new utility function withAutoprint()
.
sys.source()
gets a new toplevel.env
argument. This argument is
useful for frameworks running package tests; contributed by Tomas
Kalibera.
Sys.setFileTime()
and file.copy(copy.date = TRUE)
will set
timestamps with fractions of seconds on platforms/filesystems which
support this.
(Windows only.) file.info()
now returns file timestamps including
fractions of seconds; it has done so on other platforms since R
2.14.0. (NB: some filesystems do not record modification and access
timestamps to sub-second resolution.)
The license check enabled by options(checkPackageLicense = TRUE)
is now done when the package’s namespace is first loaded.
ppr()
and supsmu()
get an optional trace
argument, and
ppr(.., sm.method = ..spline)
is no longer limited to sample size
.
The POSIXct
method for print()
gets optional tz
and usetz
arguments, thanks to a report from Jennifer S. Lyon.
New function check_packages_in_dir_details()
in package tools
for analyzing package-check log files to obtain check details.
Package tools now exports function CRAN_package_db()
for
obtaining information about current packages in the CRAN package
repository, and several functions for obtaining the check status of
these packages.
The (default) Stangle driver Rtangle
allows annotate
to be a
function and gets a new drop.evalFALSE
option.
The default method for quantile(x, prob)
should now be monotone in
prob
, even in border cases, see .
bug.report()
now tries to extract an email address from a
BugReports
field, and if there is none, from a Contacts
field.
The format()
and print()
methods for object.size()
results get
new options standard
and digits
; notably, standard = "IEC"
and
standard = "SI"
allow more standard (but less common)
abbreviations than the default ones, e.g. for kilobytes. (From
contributions by Henrik Bengtsson.)
If a reference class has a validity method, validObject
will be
called automatically from the default initialization method for
reference classes.
tapply()
gets new option default = NA
allowing to change the
previously hardcoded value.
read.dcf()
now consistently interprets any ‘whitespace’ to be
stripped to include newlines.
The maximum number of DLLs that can be loaded into R e.g. via
dyn.load()
can now be increased by setting the environment
variable R_MAX_NUM_DLLS
before starting R.
Assigning to an element of a vector beyond the current length now
over-allocates by a small fraction. The new vector is marked
internally as growable, and the true length of the new vector is
stored in the truelength
field. This makes building up a vector
result by assigning to the next element beyond the current length
more efficient, though pre-allocating is still preferred. The
implementation is subject to change and not intended to be used in
packages at this time.
Loading the parallel package namespace no longer sets or changes
the .Random.seed
, even if R_PARALLEL_PORT
is unset.
NB: This can break reproducibility of output, and did for a CRAN
package.
Methods "wget"
and "curl"
for download.file()
now give an R
error rather than a non-zero return value when the external command
has a non-zero status.
Encoding name "utf8"
is mapped to "UTF-8"
. Many implementations
of iconv
accept "utf8"
, but not GNU libiconv (including the
late 2016 version 1.15).
sessionInfo()
shows the full paths to the library or executable
files providing the BLAS/LAPACK implementations currently in use
(not available on Windows).
The binning algorithm used by bandwidth selectors bw.ucv()
,
bw.bcv()
and bw.SJ()
switches to a version linear in the input
size n
for n > nb/2
. (The calculations are the same, but for
larger n/nb
it is worth doing the binning in advance.)
There is a new option PCRE_study
which controls when
grep(perl = TRUE)
and friends ‘study’ the compiled pattern.
Previously this was done for 11 or more input strings: it now
defaults to 10 or more (but most examples need many more for the
difference from studying to be noticeable).
grep(perl = TRUE)
and friends can now make use of PCRE’s
Just-In-Time mechanism, for PCRE 8.20 on platforms where JIT is
supported. It is used by default whenever the pattern
is studied
(see the previous item). (Based on a patch from Mikko Korpela.)
This is controlled by a new option PCRE_use_JIT
.
Note that in general this makes little difference to the speed, and may take a little longer: its benefits are most evident on strings of thousands of characters. As a side effect it reduces the chances of C stack overflow in the PCRE library on very long strings (millions of characters, but see next item).
Warning: segfaults were seen using PCRE with JIT enabled on 64-bit Sparc builds.
There is a new option PCRE_limit_recursion
for grep(perl = TRUE)
and friends to set a recursion limit taking into account R’s
estimate of the remaining C stack space (or 10000 if that is not
available). This reduces the chance of C stack overflow, but because
it is conservative may report a non-match (with a warning) in
examples that matched before. By default it is enabled if any input
string has 1000 or more bytes. ()
getGraphicsEvent()
now works on X11(type = "cairo")
devices.
Thanks to Frederick Eaton (for reviving an earlier patch).
There is a new argument onIdle
for getGraphicsEvent()
, which
allows an R function to be run whenever there are no pending
graphics events. This is currently only supported on X11 devices.
Thanks to Frederick Eaton.
The deriv()
and similar functions now can compute derivatives of
log1p()
, sinpi()
and similar one-argument functions, thanks to a
contribution by Jerry Lewis.
median()
gains a formal ...
argument, so methods with extra
arguments can be provided.
strwrap()
reduces indent
if it is more than half width
rather
than giving an error. (Suggested by Bill Dunlap.)
When the condition code
in if(.)
or while(.)
is not of length
one, an error instead of a warning may be triggered by setting an
environment variable, see the help page.
Formatting and printing of bibliography entries (bibentry
) is more
flexible and better documented. Apart from setting
options(citation.bibtex.max = 99)
you can also use
print(<citation>, bibtex=TRUE)
(or format(..)
) to get the BibTeX
entries in the case of more than one entry. This also affects
citation()
. Contributions to enable style = "html+bibtex"
are
welcome.
C-LEVEL FACILITIES
Entry points R_MakeExternalPtrFn
and R_ExternalPtrFn
are now
declared in header Rinternals.h
to facilitate creating and
retrieving an R external pointer from a C function pointer without
ISO C warnings about the conversion of function pointers.
There was an exception for the native Solaris C++ compiler to the
dropping (in R 3.3.0) of legacy C++ headers from headers such as
R.h
and Rmath.h
— this has now been removed. That compiler has
strict C++98 compliance hence does not include extensions in its
(non-legacy) C++ headers: some packages will need to request C++11
or replace non-C++98 calls such as lgamma
: see §1.6.4 of ‘Writing
R Extensions’.
Because it is needed by about 70 CRAN packages, headers R.h
and
Rmath.h
still declare
std;
when included on Solaris.
When included from C++, the R headers now use forms such as
std::FILE
directly rather than including the line
std::FILE;
C++ code including these headers might be relying on the latter.
Headers R_ext/BLAS.h
and R_ext/Lapack.h
have many improved
declarations including const
for double-precision complex
routines. Inter alia this avoids warnings when passing ‘string
literal’ arguments from C++11 code.
Headers for Unix-only facilities R_ext/GetX11Image.h
,
R_ext/QuartzDevice.h
and R_ext/eventloop.h
are no longer
installed on Windows.
No-longer-installed headers GraphicsBase.h
, RGraphics.h
,
Rmodules/RX11.h
and Rmodules/Rlapack.h
which had a LGPL license
no longer do so.
HAVE_UINTPTR_T
is now defined where appropriate by Rconfig.h
so
that it can be included before Rinterface.h
when CSTACK_DEFNS
is
defined and a C compiler (not C++) is in use. Rinterface.h
now
includes C header stdint.h
or C++11 header cstdint
where needed.
Package tools has a new function
package_native_routine_registration_skeleton()
to assist adding
native-symbol registration to a package. See its help and §5.4.1 of
‘Writing R Extensions’ for how to use it. (At the time it was added
it successfully automated adding registration to over 90% of CRAN
packages which lacked it. Many of the failures were newly-detected
bugs in the packages, e.g. 50 packages called entry points with
varying numbers of arguments and 65 packages called entry points not
in the package.)
INSTALLATION on a UNIX-ALIKE
readline
headers (and not just the library) are required unless
configuring with –with-readline=no
.configure
now adds a compiler switch for C++11 code, even if the
compiler supports C++11 by default. (This ensures that g++
6.x
uses C++11 mode and not its default mode of C++14 with ‘GNU
extensions’.)
The tests for C++11 compliance are now much more comprehensive. For
gcc < 4.8, the tests from R 3.3.0 are used in order to maintain the
same behaviour on Linux distributions with long-term support.CXX11
, not
CXX1X
. Likewise C++11 flags are specified with CXX11FLAGS
and
the standard (e.g., -std=gnu++11
) is specified with CXX11STD
.configure
now tests for a C++14-compliant compiler by testing some
basic features. This by default tries flags for the compiler
specified by CXX11
, but an alternative compiler, options and
standard can be specified by variables CXX14
, CXX14FLAGS
and
CXX14STD
(e.g., -std=gnu++14
).CXXSTD
to help specify the standard for C++
code, e.g. -std=c++98
. This makes it easier to work with compilers
which default to a later standard: for example, with
CXX=g++6 CXXSTD=-std=c++98
configure
will select commands for
g++
6.x which conform to C++11 and C++14 where specified but
otherwise use C++98.configure
checks that the compiler specified by $CXX $CXXFLAGS
is able to compile C++ code.configure
checks for the required header sys/select.h
(or
sys/time.h
on legacy systems) and system call select
and aborts
if they are not found.utimensat
will be used by
Sys.setFileTime()
and file.copy(copy.date = TRUE)
. This may
result in slightly more accurate file times. (It is available on
Linux and FreeBSD but not macOS.)libcurl
has been reduced to
7.22.0, although at least 7.28.0 is preferred and earlier versions
are little tested. (This is to support Debian 7 ‘Wheezy’ LTS and
Ubuntu ‘Precise’ 12.04 LTS, although the latter is close to
end-of-life.)configure
tests for a C++17-compliant compiler. The tests are
experimental and subject to change in the future.INCLUDED SOFTWARE
tcltk*.chm
help file is no longer included; please
consult the online help at http://www.tcl.tk/man/ instead.PACKAGE INSTALLATION
LinkingTo
other packages has been changed
so their include directories come earlier, before those specified in
CPPFLAGS
. This will only have an effect if non-system include
directories are included with -I
flags in CPPFLAGS
(and so not
the default -I/usr/local/include
which is treated as a system
include directory on most platforms)..C
or .Fortran
need
to be re-installed for this version (unless installed with R-devel
SVN revision r72375 or later).CXX1X
are deprecated in
favour of those using CXX11
, but for the time being are still made
available via file etc/Makeconf
. Packages using them should be
converted to the new forms and made dependent on R (>= 3.4.0)
.UTILITIES
R CMD check –as-cran
with _R_CHECK_CRAN_INCOMING_REMOTE_
false now skips tests that require remote access. The remaining
(local) tests typically run quickly compared to the remote tests.R CMD build
will now give priority to vignettes produced from
files in the vignettes
directory over those in the inst/doc
directory, with a warning that the latter are being ignored.R CMD config
gains a –all
option for printing names and values
of all basic configure variables.
It now knows about all the variables used for the C++98, C++11 and
C++14 standards.R CMD check
now checks that output files in inst/doc
are newer
than the source files in vignettes
.*.r
in the tests
directory are now recognized as tests by
R CMD check
. (Wish of .)R CMD build
and R CMD check
now use the union of R_LIBS
and
.libPaths()
. They may not be equivalent, e.g., when the latter is
determined by R_PROFILE
.R CMD build
now preserves dates when it copies files in preparing
the tarball. (Previously on Windows it changed the dates on all
files; on Unix, it changed some dates when installing vignettes.)R CMD check –no-stop-on-test-error
allows running
the remaining tests (under tests/
) even if one gave an error..Call()
and .External()
calls which alter their
arguments is described in §8 of the ‘R Internals’ manual.R CMD check
now checks any BugReports
field to be non-empty and
a suitable single URL.R CMD check –as-cran
now NOTEs if the package does not register
its native routines or does not declare its intentions on (native)
symbol search. (This will become a WARNING in due course.)DEPRECATED AND DEFUNCT
setInternet2()
is defunct.readline
emulations based on editline
(aka libedit
) is deprecated.NO_C_HEADERS
is defunct and silently
ignored.unix.time()
, a traditional synonym for system.time()
, has been
deprecated.structure(NULL, ..)
is now deprecated as you cannot set attributes
on .Rconfig.h
no longer defines SUPPORT_OPENMP
; instead use
_OPENMP
(as documented for a long time).styles
member of the R_CMethodDef
and R_FortranMethodDef
structures has
been removed. Packages using these will need to be re-installed for
R 3.4.0.BUG FIXES
Getting or setting body()
or formals()
on non-functions for now
signals a warning and may become an error for setting.
match(x, t)
, duplicated(x)
and unique(x)
work as documented
for complex numbers with NA
s or NaN
s, where all those containing
NA
do match, whereas in the case of NaN
’s both real and
imaginary parts must match, compatibly with how print()
and
format()
work for complex numbers.
deparse(<complex>, options = "digits17")
prints more nicely now,
mostly thanks to a suggestion by Richie Cotton.
Rotated symbols in plotmath expressions are now positioned correctly
on x11(type = "Xlib")
. ()
as<-()
avoids an infinite loop when a virtual class is interposed
between a subclass and an actual superclass.
Fix level propagation in unlist()
when the list contains
zero-length lists or factors.
Fix S3 dispatch on S4 objects when the methods package is not attached.
Internal S4 dispatch sets .Generic
in the method frame for
consistency with standardGeneric()
. ()
Fix order(x, decreasing = TRUE)
when x
is an integer vector
containing MAX_INT
. Ported from a fix Matt Dowle made to .
Fix caching by callNextMethod()
, resolves and .
grouping()
puts NAs last, to be consistent with the default
behavior of order()
.
Point mass limit cases: qpois(-2, 0)
now gives NaN
with a
warning and qgeom(1, 1)
is 0
. ()
table()
no longer drops an "NaN"
factor level, and better obeys
exclude = <chr>
, thanks to Suharto Anggono’s patch for . Also, in
the case of exclude = NULL
and NA
s, these are tabulated
correctly (again).
Further, table(1:2, exclude = 1, useNA = "ifany")
no longer
erroneously reports <NA>
counts.
Additionally, all cases of empty exclude
are equivalent, and
useNA
is not overwritten when specified (as it was by
exclude = NULL
).
wilcox.test(x, conf.int=TRUE)
no longer errors out in cases where
the confidence interval is not available, such as for x = 0:2
.
droplevels(f)
now keeps <NA> levels when present.
In integer arithmetic, NULL
is now treated as integer(0)
whereas
it was previously treated as double(0)
.
The radix sort considers NA_real_
and NaN
to be equivalent in
rank (like the other sort algorithms).
When index.return=TRUE
is passed to sort.int()
, the radix sort
treats NA
s like sort.list()
does (like the other sort
algorithms).
When in tabulate(bin, nbin)
length(bin)
is larger than the
maximal integer, the result is now of type double
and hence no
longer silently overflows to wrong values. ()
as.character.factor()
respects S4 inheritance when checking the
type of its argument. ()
The factor
method for print()
no longer sets the class of the
factor to NULL
, which would violate a basic constraint of an S4
object.
formatC(x, flag = f)
allows two new flags, and signals an error
for invalid flags also in the case of character formatting.
Reading from file("stdin")
now also closes the connection and
hence no longer leaks memory when reading from a full pipe, thanks
to Gábor Csárdi, see thread starting at
https://stat.ethz.ch/pipermail/r-devel/2016-November/073360.html.
Failure to create file in tempdir()
for compressed pdf()
graphics device no longer errors (then later segfaults). There is
now a warning instead of error and compression is turned off for the
device. Thanks to Alec Wysoker ().
Asking for methods()
on "|"
returns only S3 methods. See
https://stat.ethz.ch/pipermail/r-devel/2016-December/073476.html.
dev.capture()
using Quartz Cocoa device (macOS) returned invalid
components if the back-end chose to use ARGB instead of RGBA image
format. (Reported by Noam Ross.)
seq("2", "5")
now works too, equivalently to "2":"5"
and
seq.int()
.
seq.int(to = 1, by = 1)
is now correct, other cases are integer
(instead of double
) when seq()
is integer too, and the
"non-finite" error messages are consistent between seq.default()
and seq.int()
, no longer mentioning NaN
etc.
rep(x, times)
and rep.int(x, times)
now work when times
is
larger than the largest value representable in an integer vector. ()
download.file(method = "libcurl")
does not check for URL existence
before attempting downloads; this is more robust to servers that do
not support HEAD or range-based retrieval, but may create empty or
incomplete files for aborted download requests.
Bandwidth selectors bw.ucv()
, bw.bcv()
and bw.SJ()
now avoid
integer overflow for large sample sizes.
str()
no longer shows "list output truncated"
, in cases that
list was not shown at all. Thanks to Neal Fultz ()
Fix for cairo_pdf()
(and svg()
and cairo_ps()
) when replaying
a saved display list that contains a mix of grid and graphics
output. (Report by Yihui Xie.)
The str()
and as.hclust()
methods for "dendrogram"
now also
work for deeply nested dendrograms thanks to non-recursive
implementations by Bradley Broom.
sample()
now uses two uniforms for added precision when the
uniform generator is Knuth-TAOCP
, Knuth-TAOCP-2002
, or a
user-defined generator and the population size is or greater.
If a vignette in the vignettes
directory is listed in
.Rbuildignore
, R CMD build
would not include it in the tarball,
but would include it in the vignette database, leading to a check
warning. ()
tools::latexToUtf8()
infinite looped on certain inputs. ()
terms.formula()
ignored argument names when determining whether
two terms were identical. ()
callNextMethod()
was broken when called from a method that
augments the formal arguments of a primitive generic.
Coercion of an S4 object to a vector during sub-assignment into a
vector failed to dispatch through the as.vector()
generic (often
leading to a segfault).
Fix problems in command completion: Crash () and junk display in Windows, handling special characters in filenames on all systems.
CHANGES IN R 3.3.3
NEW FEATURES
http://
URL to a https://
URL is
encountered:
download.file()
and url()
now report
that they cannot follow this (rather than failing silently).download.file(method = "auto")
(the default)
re-tries with method = "libcurl"
.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
configure
check for the zlib
version is now robust to
versions longer than 5 characters, including 1.2.11
.UTILITIES
_R_CHECK_TESTS_NLINES_
controls how
R CMD check
reports failing tests (see §8 of the ‘R Internals’
manual).DEPRECATED AND DEFUNCT
styles
field of the components of R_CMethodDef
and R_FortranMethodDef
is deprecated.BUG FIXES
vapply(x, *)
now works with long vectors x
. ()isS3method("is.na.data.frame")
and similar are correct now. ()grepRaw(<long>, <short>, fixed = TRUE)
now works, thanks to a
patch by Mikko Korpela. ()Sys.readlink()
works,
resolving ."Cincinnati"
was missing an "n"
in the precip
dataset.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 .Sys.timezone()
now returns non-NA also on platforms such as
Ubuntu 14.04.5 LTS
, thanks to Mikko Korpela’s .format(x)
for an illegal "POSIXlt"
object x
no longer
segfaults.methods(f)
now also works for f
"("
or "{"
.dir.create()
did not check the length of the path
to create, and so could overflow a buffer and crash R. ()pmin()
and pmax()
now work again for ordered
factors and
0-length S3 classed objects, thanks to Suharto Anggono’s and .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.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 and on CRAN.)qbeta()
underflowed too early in some very asymmetric cases. ()R CMD Rd2pdf
had problems with packages with non-ASCII titles in
.Rd
files (usually the titles were omitted).CHANGES IN R 3.3.2
NEW FEATURES
extSoftVersion()
now reports the version (if any) of the
readline
library in use.eigen()
.options(deparse.max.lines=)
to limit the number of lines
recorded in .Traceback
and other deparsing activities.format(<AsIs>)
looks more regular, also for non-character atomic
matrices.abbreviate()
gains an option named = TRUE
.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
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). ()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
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
R CMD check
could be stymied
by src/Makevars
files which contained targets.Rterm
to stop accepting input. (; patch
submitted by Jan Gleixner.)pretty(d, ..)
behaves better for date-time d
().ClassExtends
object
when looking up superclasses in the cache.sample(NA_real_)
now works.merge(df1, df2)
now also works for data frames with column names
"na.last"
, "decreasing"
, or "method"
. ()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
0
s as documented. (Reported by Bill Dunlap.)R CMD SHLIB
failed when a symbol in the resulting
library had the same name as a keyword in the .def
file. ()pmax()
and pmin()
now work with (more ?) classed objects, such
as "Matrix"
from the 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.)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<dist>(), and as documented. ()options(checkPackageLicense = TRUE)
no longer requires
acceptance of the licence for non-default standard packages such as
compiler. (Reported by Mikko Korpela.)split(<very_long>, *)
now works even when the split off parts are
long. ()min()
and max()
now also work correctly when the argument list
starts with character(0)
. ()prod(dim(.)) >= 2^31
) now works
thanks to Michael Schubmehl’s .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(<lm>, which = *)
now correctly labels the contour lines for
the standardized residuals for which = 6
. It also takes the
correct in case of singularities (also for which = 5
). ()xtabs(~ exclude)
no longer fails from wrong scope, thanks to
Suharto Anggono’s .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.)CHANGES IN R 3.3.1
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 NA
s or NaN
s.
(.)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 () and on ‘inaccurate’ platforms such as
32-bit Windows or a configuration with –disable-long-double
; see
comment #15 of .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.Ctrl-C
to terminate a reverse incremental search started by
Ctrl-R
in the readline
-based Unix terminal interface is now
supported when R was compiled against readline
>= 6.0 (Ctrl-G
always worked). ()diff(<difftime>)
now keeps the "units"
attribute, as subtraction
already did, .CHANGES IN R 3.3.0
SIGNIFICANT USER-VISIBLE CHANGES
nchar(x, *)
’s argument keepNA
governing how the result for NA
s
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
.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 .)
(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., , , , ) will need to be reinstalled.
Code for restoring snapshots was contributed by Jeroen Ooms and JJ Allaire.
Some testing code is available at https://github.com/pmur002/R-display-list.
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 ().
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. ()
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. ()
match.arg(arg)
(the one-argument case) is faster; so is
sort.int()
. ()
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 ).
Reference class finalizers run at exit, as well as on garbage collection.
Avoid parallel dependency on stats for port choice and random number seeds. ()
The radix sort algorithm and implementation from (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). ()
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. ()
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 ) 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
zlib
, bzip2
, xz
and PCRE
have been removed, so suitable external (usually system) versions
are required (see the ‘R Installation and Administration’ manual).cairo_bmp()
,
cairo_png()
and cairo_tiff()
have been removed. (These devices
should be used as e.g. bmp(type = "cairo")
.)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).[<-
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.dependencies()
, pkgDepends()
,
etc are deprecated now, mostly in favor of package_dependencies()
which is both more flexible and efficient.INSTALLATION and INCLUDED SOFTWARE
valgrind
(e.g., 3.3.0) has been
removed.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).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.configure
default on OS X is –disable-R-framework
: enable
this if you intend to install under /Library/Frameworks
and use
with R.app
.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
instance.)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.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).PACKAGE INSTALLATION
make
macro AWK
which used to be made available to files such
as src/Makefile
is no longer set.C-LEVEL FACILITIES
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. ()
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
R_orderVector
.
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
headers.)
The manual has long said that R headers should 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
R_NO_REMAP
.
The connections interface now includes a function
R_GetConnection()
which allows packages implementing connections
to convert R connection
objects to Rconnection
handles. Code
which previously used the low-level R-internal getConnection()
entry point should switch.
BUG FIXES
asChar(x)
is fixed for when x
is not a vector, and it
returns "TRUE"
/"FALSE"
instead of "T"
/"F"
for logical
vectors..colSums()
etc (with an initial dot) are
now named x
rather than X
(matching colSums()
): thus error
messages are corrected.coef()
method for class "maov"
has been added to allow
vcov()
to work with multivariate results. ()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. ()tail.matrix()
did not work for zero rows matrices, and could
produce row “labels” such as "[1e+05,]"
."stringsAsFactors"
now format and
print correctly. ()cor()
is now guaranteed to return a value with absolute value less
than or equal to 1. ()names(dim(.))
.data.frame
method of rbind()
construction row.names
works
better in borderline integer cases, but may change the names
assigned. ()getGraphicsEvent()
miscoded buttons and missed mouse
motion events. ()methods(round)
now also lists round.POSIXt
.tar()
now works with the default files = NULL
. ()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 .)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
. () 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"
. ()install.packages()
could give false errors when
options("pkgType")
was "binary"
. (Reported by Jose Claudio
Faria.)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. ()CHANGES IN R 3.2.5
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.CHANGES IN R 3.2.4
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 .)provideDimnames()
gets an optional unique
argument.shQuote()
gains type = "cmd2"
for quoting in cmd.exe
in
Windows. (Response to .)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
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.)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.S.h
is no longer documented: its use should be
replaced by R.h
.BUG FIXES
kmeans(x, centers = <1-row>)
now works. ()Vectorize()
now checks for clashes in argument names. ()file.copy(overwrite = FALSE)
would signal a successful copy when
none had taken place. ()ngettext()
now uses the same default domain as gettext()
. ()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. ()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.[]
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.
()withCallingHandler()
now (again) handles warnings even during S4
generic’s argument evaluation. ()deparse(..., control = "quoteExpressions")
incorrectly quoted
empty expressions. ()format()
ting datetime objects ("POSIX[cl]?t"
) could segfault or
recycle wrongly. ()plot.ts(<matrix>, las = 1)
now does use las
.saveRDS(*, compress = "gzip")
now works as documented. ()Rgui
front end did not always initialize the
console properly, and could cause R to crash. ()dummy.coef.lm()
now works in more cases, thanks to a proposal by
Werner Stahel (). In addition, it now works for multivariate linear
models ("mlm"
, ) thanks to a proposal by Daniel Wollschlaeger.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 .cor.test()
now calculates very small p values more accurately
(affecting the result only in extreme not statistically relevant
cases). ()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.pretty(dt)
no longer returns a length 5 vector with
duplicated entries for Date
objects dt
which span only a few
days.?points
were accidentally
damaged, and did not appear in R 3.2.3. ()available.packages()
sometimes deleted the wrong file when
cleaning up temporary files. ()X11()
device sometimes froze on Red Hat Enterprise Linux 6. It
now waits for MapNotify
events instead of Expose
events, thanks
to Siteshwar Vashisht. ()[dpqr]nbinom(*, size=Inf, mu=.)
now works as limit case, for ‘dpq’
as the Poisson. ()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 NA
s in Date
columns in all
cases. ()CHANGES IN R 3.2.3
NEW FEATURES
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."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.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.Rgui.exe
. (Request of .)loess(..., iterTrace=TRUE)
now provides diagnostics for robustness
iterations, and the print()
method for summary(<loess>)
shows
slightly more.View()
now displays nested data frames in a more friendly way.
(Request with patch in .)INSTALLATION and INCLUDED SOFTWARE
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 .)configure
has a new argument –disable-java
to disable the checks
for Java.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).configure
when detecting OpenMP: see file config.site
.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. ()ToothGrowth
has been
improved/corrected. ()model.tables(type = "means")
and hence TukeyHSD()
now support
"aov"
fits without an intercept term. ()close()
now reports the status of a pipe()
connection opened
with an explicit open
argument. ()Rscript
or R -f
could result in attempting to close the input
file twice, possibly crashing the process. ()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.configure
about the
preprocessor not finding header files. ()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). ()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.which.min()
is now more precise about behavior with
logical arguments. ()"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.dir.create()
did not always warn when it failed to
create a directory. ()grep()
and related functions did not handle
UTF-8 strings properly. ()read.dcf()
sometimes misread lines longer than 8191 characters.
(Reported by Hervé Pagès with a patch.)within(df, ..)
no longer drops columns whose name start with a
"."
.HTTP
server converted entire Content-Type
to
lowercase including parameters which can cause issues for multi-part
form boundaries ().splineDesign(*, outer.ok=TRUE)
(splines) is better now (), and
interpSpline()
now allows sparse=TRUE
for speedup with non-small
sizes.traceback()
did
not report the source line number. (Patch by Kirill Müller.)options("deparse.max.lines")
set. ()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. ()loess(*, weights = *)
stored wrong weights and hence gave slightly
wrong predictions for newdata
. ()aperm(a, *)
now preserves names(dim(a))
.poly(x, ..)
now works when either raw=TRUE
or coef
is
specified. ()data(package=*)
is more careful in determining the path.prettyNum(*, decimal.mark, big.mark)
: fixed bug introduced when
fixing .CHANGES IN R 3.2.2
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 ftp:
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 .)
(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://
URLs 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
).
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
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
libtool
script generated by configure
has been modified to
support FreeBSD >= 10 ().BUG FIXES
na.action
argument was used in model.frame()
, the
original data could be modified. ()getGraphicsEvent()
could cause a crash if a graphics window was
closed while it was in use. ()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 .)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 .download.packages()
failed for type
equal to either "both"
or
"binary"
. (Reported by Dan Tenenbaum.)dendrogram
method of labels()
is much more efficient for
large dendrograms, now using rapply()
. (Comment #15 of )"port"
algorithm of nls()
could give spurious errors.
(Reported by Radford Neal.).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
. ()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, <large>)
now works correctly. ()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()
. (, )getClass("foo")
now also returns a class definition when it is
found in the cache more than once.CHANGES IN R 3.2.1
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 NA
s in x
is determined. For
nzchar()
in general and nchar()
in the R 3.2.x series, the
default remains FALSE
which is fully back compatible. From R
3.3.0, nchar()
’s 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.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 (instead of
sometimes very slightly outside). .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.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).–clean
option to R CMD INSTALL
could fail. ()choose.files()
would occasionally include
characters from the result of an earlier call in the result of a
later one. ()RSiteSearch()
in R 3.2.0 caused it to submit invalid
URLs. ()Rscript
and command line R
silently ignored incomplete
statements at the end of a script; now they are reported as parse
errors. ()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. ()install.packages(type = "both")
and related functions could repeatedly query the user for it. (Part
of ).rowSums()
etc. did not check the length
of their argument, so could segfault. ()quietly
argument of library()
is now correctly propagated
from .getRequiredPackages2()
.-llzma
to be omitted
from the main link.!
,
&
and |
, now give correct error messages when appropriate, e.g.,
for ‘&‘(TRUE)
or ‘!‘()
. ()cummax(x)
now correctly propagates NA
s also when x
is of type
integer
and begins with an NA
.summaryRprof()
could fail when the profile contained only two
records. ()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 ) computes estimated variances based on a
the number of effective observations as in R version 3.0.1 and
earlier. ()slotNames(.)
is now correct for "signature"
objects (mostly used
internally in methods).NA
.CHANGES IN R 3.2.0
NEW FEATURES
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. ()
(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 )
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. ()
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 .)
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 <- getClass(.)
.
ls()
(aka objects()
) and as.list.environment()
gain a new
argument sorted
.
The "source"
attribute (which has not been added to functions by R
since before R version 2.14.0) is no longer treated as special.
Function returnValue()
has been added to give on.exit()
code
access to a function’s return value for debugging purposes.
crossprod(x, y)
allows more matrix coercions when x
or y
are
vectors, now equalling t(x) %*% y
in these cases (also reported by
Radford Neal). Similarly, tcrossprod(x,y)
and %*%
work in more
cases with vector arguments.
Utility function dynGet()
useful for detecting cycles, aka
infinite recursions.
The byte-code compiler and interpreter include new instructions that allow many scalar subsetting and assignment and scalar arithmetic operations to be handled more efficiently. This can result in significant performance improvements in scalar numerical code.
apply(m, 2, identity)
is now the same as the matrix m
when it
has named row names.
A new function debuggingState()
has been added, allowing to
temporarily turn off debugging.
example()
gets a new optional argument run.donttest
and
tools::Rd2ex()
a corresponding commentDonttest
, with a default
such that example(..)
in help examples will run donttest
code
only if used interactively (a change in behaviour).
rbind.data.frame()
gains an optional argument make.row.names
,
for potential speedup.
New function extSoftVersion()
to report on the versions of
third-party software in use in this session. Currently reports
versions of zlib
, bzlib
, the liblzma
from xz
, PCRE, ICU, TRE
and the iconv
implementation.
A similar function grSoftVersion()
in package grDevices reports
on third-party graphics software.
Function tcltk::tclVersion()
reports the Tcl/Tk version.
Calling callGeneric()
without arguments now works with primitive
generics to some extent.
vapply(x, FUN, FUN.VALUE)
is more efficient notably for large
length(FUN.VALUE)
; as extension of .
as.table()
now allows tables with one or more dimensions of length
0 (such as as.table(integer())
).
names(x) <- NULL
now clears the names of call and ...
objects.
library()
will report a warning when an insufficient dependency
version is masking a sufficient one later on the library search
path.
A new plot()
method for class "raster"
has been added.
New check_packages_in_dir_changes()
function in package tools
for conveniently analyzing how changing sources impacts the check
results of their reverse dependencies.
Speed-up from Peter Haverty for ls()
and
methods:::.requirePackage()
speeding up package loading. ()
New get0()
function, combining exists()
and get()
in one call,
for efficiency.
match.call()
gains an envir
argument for specifying the
environment from which to retrieve the ...
in the call, if any;
this environment was wrong (or at least undesirable) when the
definition
argument was a function.
topenv()
has been made .Internal()
for speedup, based on Peter
Haverty’s proposal in .
getOption()
no longer calls options()
in the main case.
Optional use of libcurl
(version 7.28.0 from Oct 2012 or later)
for Internet access:
capabilities("libcurl")
reports if this is available.libcurlVersion()
reports the version in use, and other details
of the "libcurl"
build including which URL schemes it
supports.curlGetHeaders()
retrieves the headers for http://
,
https://
, ftp://
and ftps://
URLs: analysis of these
headers can provide insights into the ‘existence’ of a URL (it
might for example be permanently redirected) and is so used in
R CMD check –as-cran
.download.file()
has a new optional method "libcurl"
which
will handle more URL schemes, follow redirections, and allows
simultaneous downloads of multiple URLs.url()
has a new method "libcurl"
which handles more URL
schemes and follows redirections. The default method is
controlled by a new option url.method
, which applies also to
the opening of URLs via file()
(which happens implicitly in
functions such as read.table
.)file()
or url()
is invoked with a https://
or
ftps://
URL which the current method cannot handle, it
switches to a suitable method if one is available.(Windows.) The DLLs internet.dll
and internet2.dll
have been
merged. In this version it is safe to switch (repeatedly) between
the internal and Windows internet functions within an R session.
The Windows internet functions are still selected by flag
–internet2
or setInternet2()
. This can be overridden for an
url()
connection via its new method
argument.
download.file()
has new method "wininet"
, selected as the
default by –internet2
or setInternet2()
.
parent.env<-
can no longer modify the parent of a locked namespace
or namespace imports environment. Contributed by Karl Millar.
New function isNamespaceLoaded()
for readability and speed.
names(env)
now returns all the object names of an environment
env
, equivalently to ls(env, all.names = TRUE, sorted = FALSE)
and also to the names of the corresponding list,
names(as.list(env, all.names = TRUE))
. Note that although
names()
returns a character vector, the names have no particular
ordering.
The memory manager now grows the heap more aggressively. This reduces the number of garbage collections, in particular while data or code are loaded, at the expense of slightly increasing the memory footprint.
New function trimws()
for removing leading/trailing whitespace.
cbind()
and rbind()
now consider S4 inheritance during S3
dispatch and also obey deparse.level
.
cbind()
and rbind()
will delegate recursively to
methods::cbind2
(methods::rbind2
) when at least one argument is
an S4 object and S3 dispatch fails (due to ambiguity).
(Windows.) download.file(quiet = FALSE)
now uses text rather than
Windows progress bars in non-interactive use.
New function hsearch_db()
in package utils for building and
retrieving the help search database used by help.search()
, along
with functions for inspecting the concepts and keywords in the help
search database.
New function .getNamespaceInfo()
, a no-check version of
getNamespaceInfo()
mostly for internal speedups.
The help search system now takes keyword
entries in Rd files which
are not standard keywords (as given in KEYWORDS
in the R
documentation directory) as concepts. For standard keyword entries
the corresponding descriptions are additionally taken as concepts.
New lengths()
function for getting the lengths of all elements in
a list.
New function toTitleCase()
in package tools, tailored to package
titles.
The matrix methods of cbind()
and rbind()
allow matrices as
inputs which have or more elements. (For cbind()
, wish of .)
The default method of image()
has an explicit check for a numeric
or logical matrix (which was always required).
URLencode()
will not by default encode further URLs which appear
to be already encoded.
BIC(mod)
and BIC(mod, mod2)
now give non-NA numbers for
arima()
fitted models, as nobs(mod)
now gives the number of
“used” observations for such models. This fixes , quite differently
than proposed there.
The print()
methods for "htest"
, "pairwise.htest"
and
"power.htest"
objects now have a digits
argument defaulting to
(a function of) getOption("digits")
, and influencing all printed
numbers coherently. Unavoidably, this changes the display of such
test results in some cases.
Code completion for namespaces now recognizes all loaded namespaces, rather than only the ones that are also attached.
The code completion mechanism can now be replaced by a user-specified completer function, for (temporary) situations where the usual code completion is inappropriate.
unzip()
will now warn if it is able to detect truncation when
unpacking a file of 4GB or more (related to ).
methods()
reports S4 in addition to S3 methods; output is
simplified when the class
argument is used. .S3methods()
and
methods::.S4methods()
report S3 and S4 methods separately.
Higher order functions such as the apply
functions and Reduce()
now force arguments to the functions they apply in order to
eliminate undesirable interactions between lazy evaluation and
variable capture in closures. This resolves .
INSTALLATION and INCLUDED SOFTWARE
donttest
sections of R’s help files can be tested bymake check TEST_DONTTEST=TRUE
.valgrind
headers via
configure
option –with-system-valgrind-headers
: note the
possible future incompatibility of such headers discussed in the ‘R
Installation and Administration’ manual. (Wish of .)liblzma
has been updated to xz-utils
5.0.7 (minor bug fixes from 5.0.5).configure
options –with-system-zlib
, –with-system-bzlib
and
–with-system-pcre
are now the default. For the time being there is
fallback to the versions included in the R sources if no system
versions are found or (unlikely) if they are too old.
Linux users should check that the -devel
or -dev
versions of
packages zlib, bzip2/libbz2 and pcre as well as
xz-devel/liblzma-dev (or similar names) are installed.configure
by default looks for the texi2any
script from
texinfo 5.1 or later, rather than the makeinfo
program.
(makeinfo
is a link to the Perl script texi2any
in texinfo
5.x.)R CMD INSTALL
gains an option –built-timestamp=STAMP
allowing
100% reproducible package building, thanks to Dirk Eddelbuettel.UTILITIES
There is support for testing the dontrun
and donttest
parts of
examples in packages.
tools::testInstalledPackage()
accepts new arguments
commentDontrun = FALSE
and commentDonttest = FALSE
.
R CMD check
gains options –run-dontrun
and –run-donttest
.
The HTML generated by tools::Rd2HTML()
and tools::toHTML()
methods is now ‘XHTML 1.0 Strict’.
The compiler package’s utility function setCompilerOptions()
now
returns the old values invisibly. The initial optimization level can
also be set with the environment variable R_COMPILER_OPTIMIZE
.
R CMD build
adds a NeedsCompilation
field if one is not already
present in the DESCRIPTION
file.
R CMD check
gains option –test-dir
to specify an alternative set
of tests to run.
R CMD check
will now by default continue with testing after many
types of errors, and will output a summary count of errors at the
end if any have occurred.
R CMD check
now checks that the Title
and Description
fields
are correctly terminated.
R CMD check –as-cran
now:
README.md
file can be processed: this needs pandoc
installed.DESCRIPTION
, CITATION
, NEWS.Rd
and README.md
files and
in the help files (provided the build has libcurl
support).DESCRIPTION
file.Title
field does not appear to be in title case
(see ‘Writing R Extensions’: there may be false positives, but
note that technical words should be single-quoted and will then
be accepted).Most of these checks can also be selected by environment variables: see the ‘R Internals’ manual.
C-LEVEL FACILITIES
logspace_sum(logx[], n)
.rbinom_mu
, rnbinom_mu
and rmultinom
are remapped
(by default) to Rf_rbinom_mu
etc. This requires packages using
them to be re-installed..C(DUP = FALSE)
and .Fortran(DUP = FALSE)
are now ignored, so
arguments are duplicated if DUP = TRUE
would do so. As their help
has long said, .Call()
is much preferred.R_allocLD
, like R_alloc
but guaranteed to have
sufficient alignment for long double
pointers.isPairList()
now returns TRUE
for DOTSXP.WINDOWS BUILD CHANGES A number of changes to the Windows build system are in development. The following are currently in place.
make
target rsync-extsoft
has been added to obtain copies
of the external libraries from CRAN.texi2any
from texinfo 5.1 or
later. CRAN binary builds include the manuals, but by default builds
from source will not, and they will be accessed from CRAN. See the
comments in src/gnuwin32/MkRules.dist
for how to specify the
location of texi2any
.PACKAGE INSTALLATION
(Windows) The use of macro ZLIB_LIBS
in file src/Makevars.win
(which has not been documented for a long time) now requires an
external libz.a
to be available (it is part of the ‘goodies’ used
to compile Windows binary packages). It would be simpler to use
-lz
instead.
The default for option pkgType
on platforms using binary packages
is now "both"
, so source packages will be tried if binary versions
are not available or not up to date.
There are options for what install.packages(type = "both")
(possibly called via update.packages()
) will do if compilation
of a source package is desirable: see ?options
(under utils).
If you intend not to accept updates as source packages, you should
use update.packages(type = "binary")
.
DEPRECATED AND DEFUNCT
download.file(method = "lynx")
is defunct.zlib
, bzip2
, xz
and
PCRE is deprecated: these are frozen (bar essential bug-fixes) and
will be removed for R 3.3.0.configure
option –with-valgrind-instrumentation=3
has been
withdrawn, as it did not work with recent valgrind
headers: it is
now treated as level 2
.MethodsList
class in package methods had been deprecated in
R 2.11.0 and is defunct now. Functions using it are defunct if they
had been deprecated in R 2.11.0, and are deprecated now, otherwise.BUG FIXES
log()
.all.equal()
gains methods for environment
s and refClass
es.[<-
and [[<-
gain S4 data.frame
methods to avoid corruption of
S4 class information by the S3 methods.callNextMethod()
should now work within a .local
call when ...
is absent from formals(.local)
.dput(pairlist(x))
generates a call to the pairlist
constructor
instead of the list
constructor.missing()
when arguments are propagated through ...
. ()eigen(m)
now defaults to symmetric = TRUE
even when the dimnames
are asymmetric if the matrix is otherwise symmetric. ()...
through callGeneric()
and
callNextMethod()
. ()callGeneric()
now works after a callNextMethod()
.S4Class
argument to
setOldClass()
. Thus, for example, a data.frame
is valid for a
list
argument in the signature, and a factor
is valid for
vector
arguments.qbeta()
the inversion of pbeta()
is much more sophisticated.
This works better in corner cases some of which failed completely
previously (), or were using too many iterations.kmeans(x, k)
would fail when nrow(x) >= 42949673
. (Comment 6 of
)CHANGES IN R 3.1.3
NEW FEATURES
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.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. ()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 )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).install.packages(type = "both")
and the appropriate type and
repos = NULL
will be inferred.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.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
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
configure
option –with-valgrind-instrumentation=3
is
deprecated and will be removed in R 3.2.0.BUG FIXES
Rscript.exe
was missing a manifest specifying the
modern style for common controls (e.g., the download progress bar).qr.Q()
failed on complex arguments due to pre-3.0(!) typo. ()abs()
failed with named arguments when the argument was complex.
()"noquote"
objects may now be used as columns in data frames. ()0.0e50000
) could give NaN
. ()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. ()Rgui.exe
messed up the
console. ()choose.files()
command returned a blank string when
the user asked for a single file but cancelled the request. ()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.)substr()
and its
replacement version have been avoided.
Inter alia that fix gives the documented behaviour for
substr(x, 1, 2) <- ""
(subsequently reported as ).loadMethod()
fast path, effectively doubling the speed of S4
dispatch.power.t.test()
and power.prop.test()
now make use of the
extendInt
option of uniroot()
and hence work in more extreme
cases. ()tools:::.Rdconv()
didn’t accept –encoding=
due to a typo. ()makeinfo
were documented to
link the missing HTML manuals to CRAN, but did not.save(*, ascii=TRUE)
and load()
now correctly deal with NaN
’s.
()split.Date()
retains fractional representations while avoiding
incomplete class propagation.R_ext/Lapack.h
had not been updated for changes made by LAPACK to
the argument lists of its (largely internal) functions dlaed2
and
dlaed3
. ()RShowDoc("NEWS", "txt")
had not been updated for the layout
changes of R 3.1.0.xtfrm()
method for class "Surv"
has been corrected and its
description expanded.mode(x) <- y
would incorrectly evaluate x
before changing its
mode. ()besselJ(1, 2^64)
and besselY(..)
now signal a warning, returning
NaN
instead of typically segfaulting. (Issue 3 of )href
markup in .Rd
files did not remove the
backslash from %
and so gave an invalid URL. In a related change,
the escape is now required in such URLs.CHANGES IN R 3.1.2
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.[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).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).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.setRepositories()
now defaults
to 3.0
. (It can be set at runtime via environment variable
R_BIOC_VERSION
.)setRepositories()
. It has no binary packages available for
R 3.1.x and those for earlier versions were 32-bit only.INSTALLATION and INCLUDED SOFTWARE
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.-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 .)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
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 NA
s.nlminb()
on Windows was traced to
a compiler bug in gcc 4.6.3; a workaround has been put in place. (
and ).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.
()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. ().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.list(‘ab‘ = 1)
now print correctly.getAnywhere("C_pbinom")
now returns correctly a single object
(rather than unlisting it).confint()
method for nls()
fits failed it these has
specified parameter limits despite using an algorithm other than
"port"
. ()initialize()
method.removeSource()
did not properly handle expressions containing
arguments that were supplied as missing, e.g. x[i,]
. ()as.environment(list())
now works, and as.list()
of such an
environment is now the same as list()
. ()options(list())
now works (trivially). ()merge(<dendrogram>, ..)
now works correctly for two ‘independent’
dendrograms (), and still compatibly via adjust = "auto"
e.g.
for two branches of an existing dendrogram.plot
method for "hclust"
objects gets an optional argument
check
; when that is true (the default) it checks more carefully
for valid input.bin/R
and bin/Rscript
executables failed to run. ()Rscript
no longer passes –args
to R
when there are no extra
(“user”) arguments.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. ()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.
()RShowDoc("NEWS")
now displays the PDF version.plot.histogram()
and hence hist()
now respect the xaxs
, yaxs
and lab
graphics parameters. ()bw.SJ(x)
and other bw.*() no longer segfault when x
contains
non-finite values. ()R CMD Rd2pdf
unintentionally ignored its –os
option.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).CHANGES IN R 3.1.1
NEW FEATURES
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.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.)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.smooth.spline()
is now exported, as .nknots.smspl()
.dbeta(, a,b)
, pbeta()
, qbeta()
and rbeta()
are now defined
also for , , or infinite and (where they typically returned NaN
before).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.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.$
operator on
data frames is now only given when
options("warnPartialMatchDollar")
is TRUE
.package?foo
now try the package foo
whether loaded or not.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
.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.R CMD check
)
in the ‘Writing R Extensions’ manual.src/extra/xz
inconsistently (and apparently in some cases
incorrectly), so it has been simplified. ()BUG FIXES
dbinom(x, n)
, pbinom()
, dpois()
, etc, are slightly less
restrictive in checking if n
is integer-valued. (Wish of .)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 and a
suggestion by Roby Joehanes.)s
(“step into”) command in the debugger would cause R to step
into expressions evaluated there, not just into functions being
debugged. ()strptime()
rejected time-zone offsets of more
than +1200
(+1245
, +1300
and +1400
can occur). ()png(type = "cairo", antialias = "gray")
was not
accepted. ()save(..., envir=)
with named objects could fail. ()Sweave()
mis-parsed Sexpr
expressions that contained
backslashes. ()options(foo = NULL)
was not the previous
value of the option. ()enc2utf8()
and enc2native()
did not always mark the encoding of
the return values when it was known.dnbinom(x, size = <large>, 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”."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")
.dev2bitmap()
and bitmap()
was truncated
to 1000 characters: modern versions of GhostScript on most platforms
have many more devices.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 .)chull()
with non-finite points now give
an error (related to ).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.0x110p-5L
which were incorrectly
qualified by L
were parsed incorrectly since R 3.0.0, with a
slightly garbled warning. ()system()
returned success on some platforms even if the system was
unable to launch a process. ()Rgui
console.) Unbuffered output was sometimes not output
immediately if the prompt was not on the last line of the console.DESCRIPTION
or other text files to be the package encoding, so
non-ASCII characters could be displayed incorrectly.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.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.)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()
."help.try.all.packages"
option was ignored when the shortcut
syntax for help was used, e.g. ?foo
.sort()
and D()
have been
fixed. (Found by Radford Neal.)numericDeriv()
sometimes miscalculated the gradient. (, reported
originally by Radford Neal)CHANGES IN R 3.1.0
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
.)
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 .)
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 .)
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 .)
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 in several cases the time-zone database is
32-bit. For 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 .)
colSums()
and friends now have support for arrays and data-frame
columns with 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. ()
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 .
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 <- a0
and ans[[i]] <- tmp
: some package
code has relied on there being copies.
Also, a number of other changes to reduce copying of objects; all
contributed by or based on suggestions by Michael Lawrence.
The fast
argument of KalmanLike()
, KalmanRun()
and
KalmanForecast()
has been replaced by update
, which instead of
updating mod
in place, optionally returns the updated model in an
attribute "mod"
of the return value.
arima()
and makeARIMA()
get a new optional argument SSinit
,
allowing the choice of a different tate pace initialization which
has been observed to be more reliable close to non-stationarity: see
.
warning()
has a new argument noBreaks.
, to simplify
post-processing of output with options(warn = 1)
.
pushBack()
gains an argument encoding
, to support reading of
UTF-8 characters using scan()
, read.table()
and related
functions in a non-UTF-8 locale.
all.equal.list()
gets a new argument use.names
which by default
labels differing components by names (if they match) rather than by
integer index. Saved R output in packages may need to be updated.
The methods for all.equal()
and attr.all.equal()
now have
argument check.attributes
after ...
so it cannot be partially
nor positionally matched (as it has been, unintentionally).
A side effect is that some previously undetected errors of passing
empty arguments (no object between commas) to all.equal()
are
detected and reported.
There are explicit checks that check.attributes
is logical,
tolerance
is numeric and scale
is NULL
or numeric. This
catches some unintended positional matching.
The message for all.equal.numeric()
reports a
"scaled difference"
only for scale != 1
.
all.equal()
now has a "POSIXt"
method replacing the "POSIXct"
method.
The "Date"
and "POSIXt"
methods of seq()
allows
by = "quarter"
for completeness (by = "3 months"
always worked).
file.path()
removes any trailing separator on Windows, where they
are invalid (although sometimes accepted). This is intended to
enhance the portability of code written by those using POSIX file
systems (where a trailing /
can be used to confine path matching
to directories).
New function agrepl()
which like grepl()
returns a logical
vector.
fifo()
is now supported on Windows. ()
sort.list(method = "radix")
now allows negative integers (wish of
).
Some functionality of print.ts()
is now available in
.preformat.ts()
for more modularity.
mcparallel()
gains an option detach = TRUE
which allows
execution of code independently of the current session. It is based
on a new estranged = TRUE
argument to mcfork()
which forks child
processes such that they become independent of the parent process.
The pdf()
device omits circles and text at extremely small sizes,
since some viewers were failing on such files.
The rightmost break for the "months"
, "quarters"
and "years"
cases of hist.POSIXlt()
has been increased by a day. (Inter alia,
fixes .)
The handling of DF[i,] <- a
where i
is of length 0 is improved.
(Inter alia, fixes .)
hclust()
gains a new method "ward.D2"
which implements Ward’s
method correctly. The previous "ward"
method is "ward.D"
now,
with the old name still working. Thanks to research and proposals by
Pierre Legendre.
The sunspot.month
dataset has been amended and updated from the
official source, whereas the sunspots
and sunspot.year
datasets
will remain immutable. The documentation and source links have been
updated correspondingly.
The summary()
method for "lm"
fits warns if the fit is
essentially perfect, as most of the summary may be computed
inaccurately (and with platform-dependent values).
Programmers who use summary()
in order to extract just a component
which will be reliable (e.g., $cov.unscaled
) should wrap their
calls in suppressWarnings()
.
INSTALLATION and INCLUDED SOFTWARE
The included version of LAPACK has been updated to 3.5.0.
There is some support for parallel testing of an installation, by
setting TEST_MC_CORES
to an integer greater than one to indicate
the maximum number of cores to be used in parallel. (It is worth
specifying at least 8 cores if available.) Most of these require a
make
program (such as GNU make
and dmake
) which supports the
$MAKE -j nproc
syntax.
Except on Windows: the tests of standard package examples in
make check
are done in parallel. This also applies to running
tools::testInstalledPackages()
.
The more time-consuming regression tests are done in parallel.
The package checks in make check-devel
and
make check-recommended
are done in parallel.
More of make check
will work if recommended packages are not
installed: but recommended packages remain needed for thorough
checking of an R build.
The version of tzcode
included in src/extra/tzone
has been
updated. (Formerly used only on Windows.)
The included (64-bit) time-zone conversion code and Olson time-zone
database can be used instead of the system version: use configure
option –with-internal-tzcode
. This is the default on Windows and
OS X. (Note that this does not currently work if a non-default
rsharedir
configure
variable is used.)
(It might be necessary to set environment variable TZ
on OSes
where this is not already set, although the system timezone is
deduced correctly on at least Linux, OS X and Windows.)
This option also switches to the version of strftime
included in
directory src/extra/tzone
.
configure
now tests for a C++11-compliant compiler by testing some
basic features. This by default tries flags for the compiler
specified by CXX
, but an alternative compiler, options and
standard can be specified by variables CXX1X
, CXX1XFLAGS
and
CXX1XSTD
(e.g., -std=gnu++11
).
R can now optionally be compiled to use reference counting instead
of the NAMED
mechanism by defining SWITCH_TO_REFCNT
in
Rinternals.h
. This may become the default in the future.
There is a new option –use-system-tre
to use a suitable system
tre library: at present this means a version from their git
repository, after corrections. (Wish of .)
PACKAGE INSTALLATION
The CRANextra
repository is no longer a default repository on
Windows: all the binary versions of packages from CRAN are now on
CRAN, although CRANextra
contains packages from Omegahat and
elsewhere used by CRAN packages.
Only vignettes sources in directory vignettes
are considered to be
vignettes and hence indexed as such.
In the DESCRIPTION
file,
X11
is no longer recognized as valid. Use MIT
or BSD_2_clause
instead, both of which need + file LICENSE
.
For consistency, entries in .Rinstignore
are now matched
case-insensitively on all platforms.
Help for S4 methods with very long signatures now tries harder to
split the description in the Usage
field to no more than 80
characters per line (some packages had over 120 characters).
R CMD INSTALL –build
(not Windows) now defaults to the internal
tar()
unless R_INSTALL_TAR
is set.
There is support for compiling C++11 code in packages on suitable platforms: see ‘Writing R Extensions’.
Fake installs now install the contents of directory inst
: some
packages use this to install e.g. C++ headers for use by other
packages that are independent of the package itself. Option
–no-inst
can be used to get the previous behaviour.
DEBUGGING
browser()
are now consistent with calls to the browser
triggered by debug()
, in that will default to n
rather than c
.s
has been added, to “step into” function
calls.f
has been added, to “finish” the current
loop or function.help
will display a short list of
available commands.UTILITIES
vignettes
are considered to be
vignettes by R CMD check
. That has been the preferred location
since R 2.14.0 and is now obligatory.R CMD build
now matches entries in
.Rbuildignore
and vignettes/.install_extras
case-insensitively
on all platforms (not just on Windows).checkFF()
(called by R CMD check
by default) can optionally
check foreign function calls for consistency with the registered
type and argument count. This is the default for
R CMD check –as-cran
or can be enabled by setting environment
variable _R_CHECK_FF_CALLS_
to registration
(but is in any case
suppressed by –install=no
). Because this checks calls in which
.NAME
is an R object and not just a literal character string, some
other problems are detected for such calls.
Functions suppressForeignCheck()
and dontCheck()
have been added
to allow package authors to suppress false positive reports.R CMD check –as-cran
warns about a false value of the
DESCRIPTION
field BuildVignettes
for Open Source packages, and
ignores it. (An Open Source package needs to have complete sources
for its vignettes which should be usable on a suitably well-equipped
system).R CMD check –no-rebuild-vignettes
is defunct:R CMD check –no-build-vignettes
has been preferred since R 3.0.0.R CMD build –no-vignettes
is defunct:R CMD build –no-build-vignettes
has been preferred since R 3.0.0.R CMD Sweave
and R CMD Stangle
now process both Sweave and
non-Sweave vignettes. The tools::buildVignette()
function has been
added to do the same tasks from within R.R CMD config –ldflags
and (where installed)
pkg-config –libs libR
are now those needed to link a front-end
against the (shared or static) R library.Sweave.sty
has a new option [inconsolata]
.R CMD check
customizations such as _R_CHECK_DEPENDS_ONLY_
make
available packages only in LinkingTo
only for installation, and
not for loading/runtime tests.tools::checkFF()
reports on .C
and .Fortran
calls with
DUP = FALSE
if argument check_DUP
is true. This is selected by
R CMD check
by default.R CMD check –use-gct
can be tuned to garbage-collect less
frequently using gctorture2()
via the setting of environment
variable _R_CHECK_GCT_N_
.tools::texi2dvi()
limits the number of passes
tried to 20.C-LEVEL FACILITIES
R_WaitEvent()
has been added (with
declaration in headerR.h
) to block execution until the next event
is received by R.Rmath.h
header can be suppressed by defining
R_NO_REMAP_RMATH
.rround()
in header Rmath.h
has been removed:
use fround()
instead.ftrunc()
in header Rmath.h
is now a wrapper for the C99 function
trunc()
, which might as well be used in C code: ftrunc()
is
still needed for portable C++ code.prec()
to fprec()
in header
Rmath.h
has been removed.ZGESDD
and ZGELSD
.LENGTH()
now checks that it is only applied to vector
arguments. However, in packages length()
should be used. (In R
itself LENGTH()
is a macro without the function overhead of
length()
.)SET_VECTOR_ELT()
and SET_STRING_ELT()
are now checked
for indices which are in-range: several packages were writing one
element beyond the allocated length.allocVector3
has been added which allows custom allocators to be
used for individual vector allocations.DEPRECATED AND DEFUNCT
chol(pivot = TRUE, LINPACK = TRUE)
is defunct.
Arguments EISPACK
for eigen()
and LINPACK
for chol()
,
chol2inv()
, solve()
and svd()
are ignored: LAPACK is always
used..find.package()
and .path.package()
are defunct: only the
versions without the initial dot introduced in R 2.13.0 have ever
been in the API.$
operator on data frames now
throws a warning and may become defunct in the future. If partial
matching is intended, replace foo$bar
by
foo[["bar", exact = FALSE]]
.synopsis
in the Usage
section of
.Rd
files has been removed: such sections are now ignored (with a
warning).package.skeleton()
’s deprecated argument namespace
has been
removed.readNEWS()
and checkNEWS()
in package tools are
defunct.download.file(method = "lynx")
is deprecated..C(DUP = FALSE)
and .Fortran(DUP = FALSE)
are now deprecated,
and may be disabled in future versions of R. As their help has long
said, .Call()
is much preferred.
R CMD check
notes such usages (by default).R_OSX_VALGRIND
has been removed: it is
not needed in current valgrind.BUG FIXES
lm.wfit()
with no non-zero weights gave an array-overrun
in the Fortran code and a not very sensible answer. It is now
special-cased with a simpler answer (no qr
component).‘r‘
when that object does not exist) now encode the control
characters. (Reported by Hadley Wickham.)getGraphicsEvent()
caused 100% usage of one CPU in Windows. ()nls()
with no start
argument may now work inside another
function (scoping issue).pbeta()
and similar work better for very large (billions) ncp
.localtime
changed the tzname
variables the reported abbreviation could have been that of the last
time converted.all.equal(list(1), identity)
now works.git
repository. This allows R to be installed on some platforms for
which this was a blocker ( suggests Linux on ARM and HP-UX).?
applied to a call to an S4 generic failed in several cases. ()...
in their argument
list were incorrect. ()methods::callGeneric()
. ()aggregrate()
in introduced a new bug in the case of
no grouping variables. ()as.dendrogram()
was hidden accidentally,
(), and order.dendrogram(d)
gave too much for a leaf d
. ()mcparallel
even though the current
process with that pid was not actually its child.cophenetic()
applied to a "dendrogram"
object sometimes
incorrectly returned a "Labels"
attribute with dimensions. ()printCoefmat()
called from quite a few print()
methods now obeys
small getOption("width")
settings, line wrapping the
"signif. codes"
legend appropriately. ()model.matrix()
assumed that the stored dimnames for a matrix was
NULL
or length 2, but length 1 occurred.CHANGES IN R 3.0.3
NEW FEATURES
.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 or more elements, for those
with large amounts of patience and disc space.La_version()
, to report the version of
LAPACK in use.doc/manual/Makefile
. Suggested by Mauro Cavalcanti.)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.‘“
. ()read.table()
, readLines()
and scan()
now warn when an embedded
nul is found in the input. (Related to which was puzzled by the
behaviour in this unsupported case.)file.symlink()
works around the undocumented
restriction of the Windows system call to backslashes. (Wish of .)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: .)options()
and (C-level) path.expand()
re-entrantly).INSTALLATION and INCLUDED SOFTWARE
VT
and hence agrees with POSIX’s.PACKAGE INSTALLATION
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
rround()
to Rf_fround()
in
header Rmath.h
is now formally deprecated: use fround()
directly.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. ()rbind()
and cbind()
did not handle list objects correctly. ()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. (
and )min()
did not handle NA_character_
values properly. (Reported by
Magnus Thor Torfason.)readRegistry()
would duplicate default values for
keys. ()str(..., strict.width = "cut")
did not handle it properly when
more than one line needed to be cut. (Reported by Gerrit Eichner.)aggregate()
could fail when there were too many levels present in
the by
argument. ()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. ()contour()
could fail when dealing with extremely small z values.
()browseEnv()
, format()
, gl()
, relist()
and
summary.data.frame()
. (E.g., )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.)parse()
(and thus
source()
) to segfault. ()nmax = 1
in duplicated()
or unique()
is
now silently ignored.qcauchy(p, *)
is now fully accurate even when p is very close
to 1. ()validmu()
and valideta()
functions in the standard glm()
families now also report non-finite values, rather than failing..Rout.save
file) were not being
compared to the new ones during R CMD check
.tk_select.list()
no longer causes
the window to close. ()parallel::splitindices()
. ()help.search()
and ??
sometimes
contained badly constructed links.c()
and related functions such as unlist()
converted raw vectors
to invalid logical vectors. ()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.)bmp()
device was not recording res = NA
correctly: it is now
recorded as 72 ppi.clang
compiler.hcl()
now honours NA
inputs (previously they were mapped to
black).NA
returned that
time. (The platforms affected include Linux and OS X, but not
Windows nor Solaris.)rowsum()
has more support for matrices and data frames with or
more elements. ()predict(<lm object>, interval = "confidence", scale = <something>)
now works. ()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. (, patch based on code submitted by Alex
Bertram.)dpqrxxx()
functions might have been rounded up by one (with a warning about
being non-integer). ()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.KalmanRun()
did not take missing
values into account.%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
. ()approx()
and approxfun()
now handle infinite values with the
"constant"
method. ()stripchart()
again respects reversed limits in xlim
and ylim
.
()CHANGES IN R 3.0.2
NEW FEATURES
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 (necessarily summing more than 4
million elements).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 .col2rgb()
now converts factors to character strings not integer
codes (suggested by Bryan Hanson).tail(warnings())
now works, via the new ‘[‘
method.zi4.sty
which has in
some distributions replaced inconsolata.sty
.unlist(x)
now typically returns all non-list x
s unchanged, not
just the “vector” ones. Consequently, format(lst)
now also works
when the list lst
has non-vector elements.tools::getVignetteInfo()
function has been added to give
information about installed vignettes.assertCondition()
, etc. utilities in tools, useful for
testing.BUILTIN
functions.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..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.parse()
finds a syntax error, it now makes partial parse
information available up to the location of the error. (Request of
Reijo Sund.)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. ()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
.)formatC(x)
no longer copies the class of x
to the result, to
avoid misuse creating invalid objects as in . A warning is given if
a class is discarded.npk
has been copied from to allow more tests to be run
without recommended packages being installed.arima()
has been changed and in some
examples avoids a local maximum. ()termplot()
now has an argument transform.x
to control the
display of individual terms in the plot. ()format()
now supports digits = 0
, to display nsmall
decimal
places.par()
parameter called "page"
, which
returns a logical value indicating whether the next plot.new()
call will start a new page.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
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
Depends
, Imports
,
Suggests
and Enhances
fields of the DESCRIPTION
file.Imports
but not imported from, neither
in the NAMESPACE
file nor using the ::
nor :::
operators.library()
or requires()
calls in
the R code but were already put on the search path via
Depends
.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.:::
calls where ::
would do.::
which are not exported.:::
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.
R CMD check
analyses :::
calls.
INSTALLATION and INCLUDED SOFTWARE
texinfo 5.x
.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.zlib
has been updated to 1.2.8, a bug-fix
release.liblzma
has been updated to
5.0.5.javareconf
(see above) is used when R is installed, a stable
link for JAVA_HOME
can be supplied then.–disable-byte-compilation
will override the
DESCRIPTION
files of recommended packages, which typically require
byte-compilation.TMPDIR
is set to a path containing spaces, but this is not
recommended and external software (such as texi2dvi
) may fail.PACKAGE INSTALLATION
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.BSD
is deprecated: use BSD_3_clause
or BSD_2_clause
instead.
License X11
is deprecated: use MIT
or BSD_2_clause
instead.LinkingTo
packages are now recognized:
they are checked at installation. (Fields with version requirements
were previously silently ignored.)S3method
entries in a NAMESPACE
file has been
removed.2.13
, but this can be set by the
environment variable R_BIOC_VERSION
when R is installed.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
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.readNEWS()
and checkNEWS()
in package tools are
deprecated (and they have not worked with current NEWS
files for a
long time).DOCUMENTATION
BUG FIXES
help.request()
could not determine the current version of R on
CRAN. ()file.info()
failed on root directories unless the path
was terminated with an explicit "."
. ()regmatches<-()
replacement function mishandled results coming
from regexpr()
. ()setClass()
and representation()
still suggested the
deprecated argument representation=
. ()R CMD config
failed in an installed build of R 3.0.1 (only) when a
sub-architecture was used. (Reported by Berwin Turlach.)etc/Rconsole
and
etc/Rprofile.site
files even when default options were chosen, so
the MD5 sums did not refer to the installed versions. (Reported by
Tal Galili.)plot(hclust(), cex =)
respects cex
again (and possibly others
similarly). (Reported by Peter Langfelder.)R CMD check
, and one was
written for a different OS, it would set –no-install
for all
following packages as well as itself.qr.coef()
and related functions did not properly coerce real
vectors to complex when necessary. ()ftable(a)
now fixes up empty dimnames
such that the result is
printable.package.skeleton()
was not starting its search for function
objects in the correct place if environment
was supplied.
(Reported by Karl Forner.)ZHER2K
in the reference BLAS had a comment-out
bug in two places. This caused trouble with eigen()
for Hermitian
matrices. ( and report from Robin Hankin)vignette()
and browseVignettes()
did not display non-Sweave
vignettes properly.:
operator. (Found by
Radford Neal; , )svd()
returned NULL
rather than omitting components as
documented. (Found by Radford Neal; )mclapply()
and mcparallel()
with silent = TRUE
could break a
process that uses stdout
output unguarded against broken pipes
(e.g., zip
will fail silently). To work around such issues, they
now replace stdout
with a descriptor pointed to /dev/null
instead. For this purpose, internal closeStdout
and closeStderr
functions have gained the to.null
flag.log()
, signif()
and round()
now raise an error if a single
named argument is not named x
. ()deparse()
now deparses raw vectors in a form that is syntactically
correct. ()jpeg
driver in Sweave created a JPEG file, but gave it a
.png
extension. ()mget()
, seq.int()
and numericDeriv()
did not duplicate
arguments properly. (, , )kmeans(algorithm = "Hartigan-Wong")
now always stops iterating in
the QTran stage. ().read.dcf()
re-allocated incorrectly and so could segfault when
called on a file with lines of more than 100 bytes.mktime()
does not set errno
, the last second
before the epoch could not be converted from POSIXlt
to POSIXct
.
(Reported by Bill Dunlap.)add1.glm()
miscalculated F-statistics when df > 1. (Bill Dunlap,
).stem()
now discards infinite inputs rather than hanging. ()0x1.1p0
), rather than returning unintended values
for malformed constants. ()model.matrix()
now works with very long LHS names (more than 500
bytes). ()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. ()strptime()
now handles %W
fields with value 0. ()+
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.
()–without-recommended-packages
.source()
did not display filenames when reporting syntax errors.R
(instead of Rterm
or Rgui
)
would lose any zero-length strings from the command line arguments.
()–encoding=foo
were not handled properly. ()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
. ()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.)lgamma(-x)
is no longer NaN
for very small x.system2()
now respects specifying stdout
and stderr
as files if called from Rgui
. ()x11()
device whilst locator()
or identify()
is in
progress no longer hangs R. ()list.dirs(full.names = FALSE)
was not implemented. ()format()
sometimes added unnecessary spaces. ()all.equal(check.names = FALSE)
would ignore the request to ignore
the names and would check them as attributes.tools::Rd2txt_options(itemBullet=)
was not
respected in some locales. ()mcMap()
was not exported by package parallel. ()plot()
for TukeyHSD
objects did not balance dev.hold()
and
dev.flush()
calls on multi-page plots. ()CHANGES IN R 3.0.1
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.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.pairs()
gains a line.main
option for title placement.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
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 ().str(d)
no longer gives an error when names(d)
contain illegal
multibyte strings ().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 ().read.table()
misread some files that
contained quote characters ().cat()
with sep
a character vector of length greater than one and
more than one argument was using separators inconsistently ().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
).identify()
and locator()
did not record information
correctly, so replaying a graph (e.g., by copying it to another
device) would fail. ()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 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. ()parallel::mclapply(mc.preschedule = TRUE)
was a list of strings
and not of error objects. (Spotted by Karl Forner and Bernd Bischl.)help()
found multiple pages with the same alias,
the HTML display of all the selections was not produced. ()splinefun(method="monoH.FC")
now produces a function with first
argument named x
and allows deriv=3
, as documented. ()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. ()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.)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. ()CHANGES IN R 3.0.0
SIGNIFICANT USER-VISIBLE CHANGES
NA
, sometimes with a warning. They are now legal for long vectors
so there is no longer a warning, and x[2^31] <- y
will now extend
the vector on a 64-bit platform and give an error on a 32-bit one.ulimit
in a bash
shell, limit
in csh
), to set limits on
overall memory consumption of an R process, particularly in a
multi-user environment. A number of packages need a limit of at
least 4GB of virtual memory to load.
64-bit Windows builds of R are by default limited in memory usage to
the amount of RAM installed: this limit can be changed by
command-line option –max-mem-size
or setting environment variable
R_MAX_MEM_SIZE
.NEW FEATURES
identical()
has a new argument, ignore.environment
, used when
comparing functions (with default FALSE
as before).options(CBoundsCheck=)
, which controls how
.C()
and .Fortran()
pass arguments to compiled code. If true
(which can be enabled by setting the environment variable
R_C_BOUNDS_CHECK
to yes
), raw, integer, double and complex
arguments are always copied, and checked for writing off either end
of the array on return from the compiled code (when a second copy is
made). This also checks individual elements of character vectors
passed to .C()
.
This is not intended for routine use, but can be very helpful in
finding segfaults in package code.layout()
, the limits on the grid size have been raised (again).provideDimnames()
utility function.length()
return a double value which is
representable as an integer (as often happens for package ), this is
converted to an integer.setNames()
now has a default for its object
argument, useful for
a character result.StructTS()
has a revised additive constant in the loglik
component of the result: the previous definition is returned as the
loglik0
component. However, the help page has always warned of a
lack of comparability of log-likelihoods for non-stationary models.
(Suggested by Jouni Helske.)aggregate.formula()
has been revised. It is now
possible to use a formula stored in a variable; previously, it had
to be given explicitly in the function call.install.packages()
has a new argument quiet
to reduce the amount
of output shown.lwd
to a negative or
infinite value is now an error. Lines corresponding to elements with
values NA
or NaN
are silently omitted.
Previously the behaviour was device-dependent.cex
, col
, lty
, lwd
and pch
in
par()
now requires a length-one argument. Previously some silently
took the first element of a longer vector, but not always when
documented to do so.Sys.which()
when used with inputs which would be unsafe in a shell
(e.g., absolute paths containing spaces) now uses appropriate
quoting.as.tclObj()
has been extended to handle raw vectors. Previously,
it only worked in the other direction. (Contributed by Charlie
Friedemann, .)cite()
and citeNatbib()
have been added, to allow
generation of in-text citations from "bibentry"
objects. A
cite()
function may be added to bibstyle()
environments.sort()
method has been added for "bibentry"
objects.bibstyle()
function now defaults to setting the default
bibliography style. The getBibstyle()
function has been added to
report the name of the current default style.scatter.smooth()
now has an argument lpars
to pass arguments to
lines()
.pairs()
has a new log
argument, to allow some or all variables
to be plotted on logarithmic scale. (In part, wish of .)split()
gains a sep
argument.termplot()
does a better job when given a model with interactions
(and no longer attempts to plot interaction terms).getParseData()
and getParseText()
access the data.rep_len()
analogous to rep.int()
for
when speed is required (and names are not).rep(NULL, length.out = n)
for n > 0
(which
returns NULL
) now gives a warning.demo()
gains an encoding
argument for those packages with
non-ASCII demos: it defaults to the package encoding where there is
one.strwrap()
converts inputs with a marked encoding to the current
locale: previously it made some attempt to pass through as bytes
inputs invalid in the current locale.rate
and scale
to [dpqr]gamma
is a warning (if
they are essentially the same value) or an error.merge()
works in more cases where the data frames include
matrices. (Wish of .)optimize()
and uniroot()
no longer use a shared parameter object
across calls. (nlm()
, nlminb()
and optim()
with numerical
derivatives still do, as documented.)all.equal()
method for date-times is now documented: times are
regarded as equal (by default) if they differ by up to 1 msec.duplicated()
and unique()
gain a nmax
argument which can be
used to make them much more efficient when it is known that there
are only a small number of unique entries. This is done
automatically for factors.rbinom()
, rgeom()
, rhyper()
, rpois()
, rnbinom(),
rsignrank()
and rwilcox()
now return integer (not double)
vectors. This halves the storage requirements for large simulations.sort()
, sort.int()
and sort.list()
now use radix sorting for
factors of less than 100,000 levels when method
is not supplied.
So does order()
if called with a single factor, unless
na.last = NA
.diag()
as used to generate a diagonal matrix has been re-written
in C for speed and less memory usage. It now forces the result to be
numeric in the case diag(x)
since it is said to have ‘zero
off-diagonal entries’.backsolve()
(and forwardsolve()
) are now internal functions, for
speed and support for large matrices.chol()
and solve()
) accept
logical matrices (and coerce to numeric).sample.int()
has some support for : see its help for the
limitations.
A different algorithm is used for
(n, size, replace = FALSE, prob = NULL)
for n > 1e7
and
size <= n/2
. This is much faster and uses less memory, but does
give different results.approxfun()
and splinefun()
now return a wrapper to an internal
function in the stats namespace rather than a .C()
or .Call()
call. This is more likely to work if the function is saved and used
in a different session..C()
, .Call()
, .External()
and .Fortran()
now
give an error (rather than a warning) if called with a named first
argument.Sweave()
by default now reports the locations in the source
file(s) of each chunk.clearPushBack()
is now a documented interface to a long-existing
internal call.aspell()
gains filters for R code, Debian Control Format and
message catalog files, and support for R level dictionaries. In
addition, package utils now provides functions
aspell_package_R_files()
and aspell_package_C_files()
for spell
checking R and C level message strings in packages.bibentry()
gains some support for “incomplete” entries with a
crossref
field.gray()
and gray.colors()
finally allow alpha
to be specified.monthplot()
gains parameters to control the look of the reference
lines. (Suggestion of Ian McLeod.)%~%
relation (“is distributed as”) in
plotmath.domain = NA
is accepted by gettext()
and ngettext()
,
analogously to stop()
etc.termplot()
gains a new argument plot = FALSE
which returns
information to allow the plots to be modified for use as part of
other plots, but does not plot them. (Contributed by Terry Therneau,
.)quartz.save()
, formerly an undocumented part of R.app
, is now
available to copy a device to a quartz()
device. dev.copy2pdf()
optionally does this for PDF output: quartz.save()
defaults to
PNG.pairs()
now allows text.panel = NULL
and
the use of <foo>.panel = NULL
is now documented.setRefClass()
and getRefClass()
now return class generator
functions, similar to setClass()
, but still with the reference
fields and methods as before (suggestion of Romain Francois).bitwNot()
, bitwAnd()
, bitwOr()
and bitwXor()
,
using the internal interfaces previously used for classes
"octmode"
and "hexmode"
.
Also bitwShiftL()
and bitwShiftR()
for shifting bits in elements
of integer vectors."deparse.cutoff"
to control the deparsing of language
objects such as calls and formulae when printing. (Suggested by a
comment of Sarah Goslee.)colors()
gains an argument distinct
.demo(colors)
and demo(hclColors)
, with utility functions.list.files()
(aka dir()
) gains a new optional argument no..
which allows to exclude "."
and ".."
from listings."matrix"
; consequently,
head()
, e.g., is more useful.encodeString()
preserves UTF-8 marked encodings. Thus if factor
levels are marked as UTF-8 an attempt is made to print them in UTF-8
in RGui
on Windows.readLines()
and scan()
(and hence read.table()
) in a UTF-8
locale now discard a UTF-8 byte-order-mark (BOM). Such BOMs are
allowed but not recommended by the Unicode Standard: however
Microsoft applications can produce them and so they are sometimes
found on websites.
The encoding name "UTF-8-BOM"
for a connection will ensure that a
UTF-8 BOM is discarded.mapply(FUN, a1, ..)
now also works when a1
(or a further such
argument) needs a length()
method (which the documented arguments
never do). (Requested by Hervé Pagès; with a patch.).onDetach()
is supported as an alternative to .Last.lib
. Unlike
.Last.lib
, this does not need to be exported from the package’s
namespace.srcfile
argument to parse()
may now be a character string,
to be used in error messages.format()
method for ftable
objects gains a method
argument, propagated to write.ftable()
and print()
, allowing
more compact output, notably for LaTeX formatting, thanks to Marius
Hofert.utils::process.events()
function has been added to trigger
immediate event handling.Sys.which()
now returns NA
(not ""
) for NA
inputs (related
to ).print()
method for class "htest"
gives fewer trailing spaces
(wish of ).
Also print output from HoltWinters()
, nls()
and others.loadNamespace()
allows a version specification to be given, and
this is used to check version specifications given in the Imports
field when a namespace is loaded.setClass()
has a new argument, slots
, clearer and less ambiguous
than representation
. It is recommended for future code, but should
be back-compatible. At the same time, the allowed slot specification
is slightly more general. See the documentation for details.mget()
now has a default for envir
(the frame from which it is
called), for consistency with get()
and assign()
.close()
now returns an integer status where available, invisibly.
(Wish of .)tar()
can now store paths too long for the
ustar
format, using the (widely supported) GNU extension. It can
also store long link names, but these are much less widely
supported. There is support for larger files, up to the ustar
limit of 8GB.?LocalReferenceClasses
.untar()
has a new argument restore_times
which if false (not the
default) discards the times in the tarball. This is useful if they
are incorrect (some tarballs submitted to CRAN have times in a local
time zone or many years in the past even though the standard
required them to be in UTC).replayplot()
cannot (and will not attempt to) replay plots
recorded under R < 3.0.0. It may crash the R session if an attempt
is made to replay plots created in a different build of R >= 3.0.0.dev.copy()
) will
work better when the palette is changed during a plot.chol(pivot = TRUE)
now defaults to LAPACK, not LINPACK.parse()
function has a new parameter keep.source
, which
defaults to options("keep.source")
.Rprof()
now optionally records information at the
statement level, not just the function level.Rprof()
function now quotes function names in in its output
file on Windows, to be consistent with the quoting in Unix.Rprof()
now optionally records information about
time spent in GC.options(stringsAsFactors = FALSE)
, model.frame()
,
model.matrix()
and replications()
now automatically convert
character vectors to factors without a warning.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 .)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.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.check_packages_in_dir()
function in package tools for
conveniently checking source packages along with their reverse
dependencies.R_GC_MEM_GROW
. See ?Memory
for more
details.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
..Device
and .Devices
no longer includes the file name. This is
for consistency with other platforms and was requested by the
maintainer.
win.metafile()
still uses the file name: the exact form is used by
package .set.seed(NULL)
re-initializes .Random.seed
as done at the
beginning of the session if not already set. (Suggestion of Bill
Dunlap.)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).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.
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 or more by the replacement function with a double value.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).R_alloc
can now allocate or more bytes.agrep()
and grep()
will return double vectors of indices for
long vector inputs..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).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 @<-
operator is now implemented as a primitive, which should
reduce some copying of objects when used. Note that the operator
object must now be in package base: do not try to import it
explicitly from package methods.
PACKAGE INSTALLATION
The transitional support for installing packages without namespaces
(required since R 2.14.0) has been removed. R CMD build
will still
add a namespace, but a .First.lib()
function will need to be
converted.
R CMD INSTALL
no longer adds a namespace (so installation will
fail), and a .First.lib()
function in a package will be ignored
(with an installation warning for now).
As an exception, packages without a R
directory and no NAMESPACE
file can still be installed.
Packages can specify in their DESCRIPTION file
a line like
yes
to be installed on Windows with –force-biarch
.
Package vignettes can now be processed by other engines besides
Sweave
; see ‘Writing R Extensions’ and the tools::vignetteEngine
help topic for details.
The *.R
tangled source code for vignettes is now included in
tarballs when R CMD build
is used to produce them. In R 3.0.0,
*.R
files not in the sources will be produced at install time, but
eventually this will be dropped.
The package type "mac.binary"
now looks in a path in the
repository without any Mac subtype (which used to be universal
or
leopard
): it looks in bin/macosx/contrib/3.0
rather than
bin/macosx/leopard/contrib/2.15
). This is the type used for the
CRAN binary distribution for OS X as from R 3.0.0.
File etc/Makeconf
makes more use of the macros $(CC)
, $(CXX)
,
$(F77)
and $(FC)
, so the compiler in use can be changed by
setting just these (and if necessary the corresponding flags and
FLIBS
) in file ~/.R/Makevars
.
This is convenient for those working with binary distributions of R,
e.g. on OS X.
UTILITIES
R CMD check
now gives a warning rather than a note if it finds
calls to abort
, assert
or exit
in compiled code, and has been
able to find the .o
file in which the calls occur.
Such calls can terminate the R process which loads the package.
The location of the build and check environment files can now be
specified by the environment variables R_BUILD_ENVIRON
and
R_CHECK_ENVIRON
, respectively.
R CMD Sweave
gains a –compact
option to control possibly
reducing the size of the PDF file it creates when –pdf
is given.
R CMD build
now omits Eclipse’s .metadata
directories, and
R CMD check
warns if it finds them.
R CMD check
now does some checks on functions defined within
reference classes, including of .Call()
etc calls.
R CMD check –as-cran
notes assignments to the global environment,
calls to data()
which load into the global environment, and calls
to attach()
.
R CMD build
by default uses the internal method of tar()
to
prepare the tarball. This is more likely to produce a tarball
compatible with R CMD INSTALL
and R CMD check
: an external tar
program, including options, can be specified via the environment
variable R_BUILD_TAR
.
tools::massageExamples()
is better protected against packages
which re-define base functions such as cat()
and get()
and so
can cause R CMD check
to fail when checking examples.
R CMD javareconf
has been enhanced to be more similar to the code
used by configure
.
There is now a test that a JNI program can be compiled (like
configure
did) and only working settings are used.
It makes use of custom settings from configuration recorded in
etc/javaconf
.
The –no-vignettes
argument of R CMD build
has been renamed to
the more accurate –no-build-vignettes
: its action has always been
to (re)build vignettes and never omitted them.
R CMD check
accepts –no-build-vignettes
as a preferred synonym
for –no-rebuild-vignettes
.
DEPRECATED AND DEFUNCT
The ENCODING
argument to .C()
is defunct. Use iconv()
instead.
The .Internal(eval.with.vis)
non-API function has been removed.
Support for the converters for use with .C()
has been removed,
including the oft misused non-API header R_ext/RConverters.h
.
The previously deprecated uses of array()
with a 0-length dim
argument and tapply()
with a 0-length INDEX
list are now errors.
Translation
packages are defunct.
Calling rep()
or rep.int()
on a pairlist or other non-vector
object is now an error.
Several non-API entry points have been transferred to packages
(e.g., R_zeroin2
) or replaced by different non-API entry points
(e.g., R_tabulate
).
The ‘internal’ graphics device invoked by
.Call("R_GD_nullDevice", package = "grDevices")
has been removed:
use pdf(file = NULL)
instead.
The .Fortran()
entry point "dqrls"
which has not been used by R
since version 2.15.1 is no longer available.
Functions traceOn()
and traceOff()
in package methods are now
defunct.
Function CRAN.packages()
is finally defunct.
Use of col2rgb(0)
is defunct: use par("bg")
or NA
instead.
The long-defunct functions Rd_parse()
, anovalist.lm()
,
categpry()
, clearNames()
, gammaCody()
, glm.fit.null()
,
lm.fit.null()
, lm.wfit.null()
, manglePackageNames()
,
mauchley.test()
, package.contents()
, print.coefmat()
,
reshapeLong()
, reshapeWide()
, tkclose()
, tkcmd()
,
tkfile.dir()
, tkfile.tail()
, tkopen()
, tkputs()
, tkread()
,
trySilent()
and zip.file.extract()
have been removed entirely
(but are still documented in the help system).
The unused dataPath
argument to attachNamespace()
has been
removed.
grid.prompt()
has been removed: use devAskNewPage()
instead.
The long-deprecated intensities
component is no longer returned by
hist()
.
mean()
for data frames and sd()
for data frames and matrices are
defunct.
chol(pivot = FALSE, LINPACK = TRUE)
, ch2inv(LINPACK = TRUE)
,
eigen(EISPACK = TRUE)
, solve(LINPACK = TRUE)
and
svd(LINPACK = TRUE)
are defunct: LAPACK will be used, with a
warning.
The keep.source
argument to library()
and require()
is
defunct. This option needs to be set at install time.
Documentation for real()
, as.real()
and is.real()
has been
moved to ‘defunct’ and the functions removed.
The maxRasters
argument of pdf()
(unused since R 2.14.0) has
been removed.
The unused fontsmooth
argument has been removed from the
quartz()
device.
All the (non-API) EISPACK entry points in R have been removed.
chol(pivot = TRUE, LINPACK = TRUE)
is deprecated.
The long-deprecated use of synopsis
in the Usage
section of
.Rd
files will be removed in R 3.1.0.
.find.package()
and .path.package()
are deprecated: only the
public versions without the dot have ever been in the API.
In a package’s DESCRIPTION
file,
X11
is deprecated, since it includes ‘Copyright (C) 1996 X Consortium’ which cannot be appropriate for a current R package. Use ‘MIT’ or ‘BSD_2_clause’ instead.
CODE MIGRATION
.Internal()
calls)..Internal()
calls used in the stats package have
been migrated to C code in that package.
This means that a number of .Internal()
calls which have been used
by packages no longer exist, including .Internal(cor)
.Internal(cov)
, .Internal(optimhess)
and
.Internal(update.formula)
..External()
calls to the base
package (really to the R
executable or shared library) have been moved to more appropriate
packages. Packages should not have been using such calls, but some
did (mainly those used by integrate()
).PACKAGE parallel
mcaffinity()
which allows getting or
setting the CPU affinity mask for the current R process on systems
that supports this (currently only Linux has been tested
successfully). It has no effect on systems which do not support
process affinity. Users are not expected to use this function
directly (with the exception of fixing libraries that break affinity
settings like OpenBLAS) – the function is rather intended to
support affinity control in high-level parallel functions. In the
future, R may supplement lack of affinity control in the OS by its
own bookkeeping via mcaffinity()
related to processes and
threads it spawns.mcparallel()
has a new argument mc.affinity
which attempts to
set the affinity of the child process according to the specification
contained therein.R_PARALLEL_PORT
to
10187
.C-LEVEL FACILITIES
Rinternals.h
no longer includes the non-API
header R_exts/PrtUtil.h
, and that no longer includes
R_exts/Print.h
.NULL
to .C()
is now an error..C()
and .Fortran()
now warn if "single"
arguments are used
with DUP = FALSE
, as changes to such arguments are not returned to
the caller.R_qsort
and R_qsort_I
now have start
and end
as size_t
to allow them to work with longer vectors on 64-bit
platforms. Code using them should be recompiled.Rf_
, notably [dpq]nbinom_mu
.R.app
are now available to front-ends on all Unix-alikes: one has been
added for the interface to View()
.PACKAGE = ""
is now an error in .C()
etc calls: it was always
contrary to the documentation.rcont2
has been migrated to package stats and so is
no longer available.R_SVN_REVISION
in Rversion.h
is now an integer (rather than a
string) and hence usable as e.g. #if R_SVN_REVISION < 70000
.rgb2hsv
and hsv2rgb
have been migrated to
package grDevices and so are no longer available.R_GE_version
has been increased to 10
and name2col
removed
(use R_GE_str2col
instead). R internal colour codes are now
defined using the typedef rcolor
.REPROTECT
macro now checks that the protect index is valid.chol
, chol2inv
, cg
, ch
and rg
, and the C entry points Brent_fmin
, fft_factor
and
fft_work
..External
call is registered with a number of arguments
(other than -1
), the number of arguments passed is checked for
each call (as for other foreign function calls).R_ext/Connections.h
. Please note that the
implementation of connections is still considered internal and may
change in the future (see the above file for details).INTERNATIONALIZATION
?tools::update_pkg_po
.RGui.exe
are now part
of the base package (rather than having sources in directory po
and being installed to share/locale
). Thus the base package
supports three translation domains, R-base
, R
and RGui
..libPaths()
at the start of the R session will
be used. (It is possible messages will be used before .libPaths()
is set up in which case the default translations will be used: set
environment variable R_TRANSLATIONS
to point to the location of
the intended translations package to use this right from the
start.)INSTALLATION
configure
option
–disable-long-double
.make pdf
and make install-pdf
now make and install the full
reference index (including all base and recommended packages).etc/javaconf
for subsequent use by R CMD javareconf
.makeinfo
version 5.0 (which requires a
slightly different .texi
syntax).–use-system-zlib
and –use-system-pcre
are now tested as 1.2.5 and 8.10 respectively.configure
no longer looks for file ~/.Rconfig
: ~/.R/config
has
long been preferred.BUG FIXES
R CMD build
is run in an encoding other than the one
specified in the package’s DESCRIPTION
file it tries harder to
expand the authors@R
field in the specified encoding. ()R CMD INSTALL
is required to expand the authors@R
field of
the DESCRIPTION
file, it tries harder to do so in the encoding
specified for the package (rather than using ASCII escapes).solve(A, b)
for a vector b
gave the answer names from
colnames(A)
for LINPACK = TRUE
but not in the default case.La.svd()
accepts logical matrices (as documented, and as svd()
did).legend()
now accepts negative pch
values, in the same way
points()
long has.parse()
, tools::parseLatex()
and tools::parse_Rd()
were not reentrant, leading to errors in
rare circumstances such as a garbage collection triggering a
recursive call.$<-
were not
being checked because the magic incantation to turn methods on for
that primitive operator had been inadvertently omitted.setHook(hookname, value, action="replace")
set the hook to be the
value, rather than a list containing the value as documented. ()NEWS.Rd
file, the main HTML package index page
did not link to it. (Reported by Dirk Eddelbuettel.)@<-
was not checking the class of
the replacement. It now does a check, quicker but less general than
slot<-
. See the help.split(x, f)
now recycles classed objects x
in the same way as
vectors. (Reported by Martin Morgan.)pbeta(.28, 1/2, 2200, lower.tail=FALSE, log.p=TRUE)
is no longer
-Inf
; ditto for corresponding pt()
and pf()
calls, such as
pt(45, df=5000, lower.tail=FALSE, log.p=TRUE)
. ()predict()
method for loess()
could
exceed the maximum integer size. (Reported by Hiroyuki Kawakatsu.)ftable(x, row.vars, col.vars)
now also works when the *.vars
arguments are (integer or character vectors) of length zero.cat()
on a malformed UTF-8 string could cause the Windows
GUI to lock up. ()removeClass(cc)
gave "node stack overflow" for some class
definitions containing "array"
or "matrix"
.CHANGES in previous versions
NEWS.0
, NEWS.1
and NEWS.2
in the doc
directory. News in HTML format for R
versions from 2.10.0 to 2.15.3 is in doc/html/NEWS.2.html
.
This article is converted from a Legacy LaTeX article using the texor package. The pdf version is the official version. To report a problem with the html, refer to CONTRIBUTE on the R Journal homepage.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Team, "CHANGES IN R 3.6.2", The R Journal, 2019
BibTeX citation
@article{RJ-2019-2-ch, author = {Team, R Core}, title = {CHANGES IN R 3.6.2}, journal = {The R Journal}, year = {2019}, note = {https://rjournal.github.io/}, volume = {11}, issue = {2}, issn = {2073-4859}, pages = {448-554} }