identical() has a new argument,
ignore.environment, used when comparing functions (with
default FALSE as before).
There is a new option, 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.
In layout(), the limits on the grid size have been
raised (again).
New simple provideDimnames() utility function.
Where methods for length() return a double value
which is representable as an integer (as often happens for package
Matrix), this is converted to an integer.
Matrix indexing of dataframes by two-column numeric indices
is now supported for replacement as well as extraction.
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.)
The logic in 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.
Setting an element of the graphics argument 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.
Setting graphical parameters 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, PR#14939.)
New functions 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.
A sort() method has been added for "bibentry"
objects.
The 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 PR#14919.)
split() gains a sep argument.
termplot() does a better job when given a model with
interactions (and no longer attempts to plot interaction terms).
The parser now incorporates code from Romain Francois'
parser package, to support more detailed computation on
the code, such as syntax highlighting, comment-based
documentation, etc. Functions getParseData() and
getParseText() access the data.
There is a new function rep_len() analogous to
rep.int() for when speed is required (and names are not).
The undocumented use 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.
Specifying both 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 PR#14974.)
optimize() and uniroot() no longer use a
shared parameter object across calls. (nlm(),
nlminb() and optim() with numerical derivatives
still do, as documented.)
The 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.
Functions 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.
More matrix algebra functions (e.g. chol() and
solve()) accept logical matrices (and coerce to numeric).
sample.int() has some support for n >= 2^31: 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.
The functions .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.)
Added support for new %~% 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, PR#15076.)
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.
The default method of pairs() now allows
text.panel = NULL and the use of .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).
New functions 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.
New option "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.
New 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.
Multiple time series are also of class "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.
The srcfile argument to parse() may now be a
character string, to be used in error messages.
The 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.
The utils::process.events() function has been added
to trigger immediate event handling.
Sys.which() now returns NA (not "") for
NA inputs (related to PR#15147).
The print() method for class "htest" gives
fewer trailing spaces (wish of PR#15124).
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 PR#15088.)
The internal method 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.
Local reference classes have been added to package
methods. These are a technique for avoiding unneeded
copying of large components of objects while retaining standard R
functional behavior. See ?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 timezone 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.
Palette changes get recorded on the display list, so
replaying plots (including when resizing screen devices and using
dev.copy()) will work better when the palette is changed
during a plot.
chol(pivot = TRUE) now defaults to LAPACK, not LINPACK.
The parse() function has a new parameter
keep.source, which defaults to options("keep.source").
Profiling via Rprof() now optionally records information
at the statement level, not just the function level.
The Rprof() function now quotes function names in
in its output file on Windows, to be consistent with the quoting
in Unix.
Profiling via Rprof() now optionally records
information about time spent in GC.
The HTML help page for a package now displays non-vignette
documentation files in a more accessible format.
To support options(stringsAsFactors = FALSE),
model.frame(), model.matrix() and
replications() now automatically convert character
vectors to factors without a warning.
The print method for objects of class "table"
now detects tables with 0-extents and prints the results as, e.g.,
< table of extent 0 x 1 x 2 >. (Wish of PR#15198.)
Deparsing involving calls to anonymous functions and has been
made closer to reversible by the addition of extra parentheses.
The function utils::packageName() has been added as
a lightweight version of methods::getPackageName().
find.package(lib.loc = NULL) now treats loaded
namespaces preferentially in the same way as attached packages
have been for a long time.
In Windows, the Change Directory dialog now defaults to
the current working directory, rather than to the last directory
chosen in that dialog.
available.packages() gains a
"license/restricts_use" filter which retains only packages
for which installation can proceed solely based on packages which
are guaranteed not to restrict use.
New check_packages_in_dir() function in package
tools for conveniently checking source packages along with
their reverse dependencies.
R's completion mechanism has been improved to handle help
requests (starting with a question mark). In particular, help
prefixes are now supported, as well as quoted help topics. To
support this, completion inside quotes are now handled by R by
default on all platforms.
The memory manager now allows the strategy used to balance
garbage collection and memory growth to be controlled by setting
the environment variable R_GC_MEM_GROW. See ?Memory
for more details.
(‘For experts only’, as the introductory manual
says.) The use of environment variables R_NSIZE and
R_VSIZE to control the initial (= minimum) garbage
collection trigger for number of cons cels and size of heap has
been restored: they can be overridden by the command-line options
--min-nsize and --min-vsize; see ?Memory.
On Windows, the device name for bitmap devices as reported
by .Device and .Devices no longer includes the file
name. This is for consistency with other platforms and was
requested by the lattice maintainer.
win.metafile() still uses the file name: the exact form is
used by package tkrplot.
set.seed(NULL) re-initializes .Random.seed as
done at the beginning of the session if not already set.
(Suggestion of Bill Dunlap.)
The breaks argument in hist.default() can now be
a function that returns the breakpoints to be used (previously it
could only return the suggested number of breakpoints).
File ‘share/licenses/licenses.db’ has some
clarifications, especially as to which variants of ‘BSD’
and ‘MIT’ is intended and how to apply them to packages.
The problematic licence ‘Artistic-1.0’ has been removed.