Licence: GPL
Version 3.0.1 | Release Date: 2013-05-16 | Download
No changes specified
Version 2.14.2 | Release Date: 2012-02-29 | Download
No changes specified
Version 2.14.1 | Release Date: 2012-01-04 | Download
No changes specified
Version 2.14 | Release Date: 2011-10-31 | Download



o All packages must have a namespace, and one is created on
installation if not supplied in the sources. This means that any
package without a namespace must be re-installed under this
version of R (but previously-installed data-only packages without
R code can still be used).

o The yLineBias of the X11 and windows() families of devices has
been changed from 0.1 to 0.2: this changes slightly the vertical
positioning of text in the margins (including axis annotations).
This is mainly for consistency with other devices such as
quartz() and pdf(). (Wish of PR#14538.)

There is a new graphics parameter "ylbias" which allows the
y-line bias of the graphics device to be tweaked, including to
reproduce output from earlier versions of R.

o Labeling of the p-values in various anova tables has been
rationalized to be either "Pr(>F)" or "Pr(>Chi)" (i.e. the
"Pr(F)", "Pr(Chi)" and "P(>|Chi|)" variants have been
eliminated). Code which extracts the p value via indexing by
name may need adjustment.

o :: can now be used for datasets made available for lazy-loading
in packages with namespaces (which makes it consistent with its
use for data-only packages without namespaces in earlier versions
of R).

o There is a new package parallel.

It incorporates (slightly revised) copies of packages multicore
and snow (excluding MPI, PVM and NWS clusters). Code written to
use the higher-level API functions in those packages should work
unchanged (apart from changing any references to their namespaces
to a reference to parallel, and links explicitly to multicore or
snow on help pages).

It also contains support for multiple RNG streams following
L'Ecuyer et al (2002), with support for both mclapply and snow
clusters. This replaces functions like clusterSetupRNG() from
snow (which are not in parallel).

The version released for R 2.14.0 contains base functionality:
higher-level convenience functions are planned (and some are
already available in the 'R-devel' version of R).

o Building PDF manuals (for R itself or packages, e.g. via R CMD
check) by default requires the LaTeX package inconsolata: see the
section on 'Making the manuals' in the 'R Installation and
Administration Manual'.

o axTicks(*, log=TRUE) has changed in some cases to satisfy the
documented behavior and be consistent.


o txtProgressBar() can write to an open connection instead of the

o Non-portable package names ending in . are no longer allowed.
Nor are single-character package names (R was already

o regexpr() and gregexpr() with perl = TRUE allows Python-style
named captures. (Wish and contribution of PR#14518.)

o The placement of 'plotmath' text in the margins of plots done by
base graphics now makes the same vertical adjustment as ordinary
text, so using ordinary and plotmath text on the same margin line
will seem better aligned (but not exactly aligned, since ordinary
text has descenders below the baseline and plotmath places them
on the baseline). (Related to PR#14537.)

o sunflowerplot() now has a formula interface. (Wish of PR#14541.)

o iconv() has a new argument toRaw to handle encodings such as
UTF-16 with embedded nuls (as was possible before the CHARSXP
cache was introduced).

It will also accept as input the type of list generated with
toRaw = TRUE.

o Garbage-collecting an unused input text connection no longer
gives a warning (since it 'connects' to nothing outside R).

o read.table() and scan() have gained a text argument, to allow
reading data from a (possibly literal) character string.

o optim(*, method = .) now allows method = "Brent" as an interface
to optimize(), for use in cases such as mle() where optim() is
used internally.

o mosaicplot() gains a border argument. (Wish of PR#14550.)

o smooth.spline() gains a tol argument which controls how different
x values need to be to be treated as distinct. The default has
been changed to be more reliable for inputs whose range is small
compared to their maximum absolute value. (Wish of PR#14452.)

o gl() runs faster by avoiding calling factor().

o The print() method for object.size() accepts B as well as b as an
abbreviation for 'bytes'.

o unlink() gains a force argument to work like rm -f and if
possible override restrictive permissions.

o pbirthday() and qbirthday() now use exact calculations for
coincident = 2.

o unzip() and unz() connections have been updated with support for
more recent Zip64 features (including large file sizes and bzip2
compression, but not UTF-8 file names).

unzip() has a new option to restore file times from those
recorded (in an unknown timezone) in the zip file.

o update.packages() now accepts a character vector of package names
for the oldPkgs argument. (Suggestion of Tal Galili.)

o The special reference class fields .self and .refClassDef are now
read-only to prevent corrupting the object.

o decompose() now returns the original series as part of its value,
so it can be used (rather than reconstructed) when plotting.
(Suggestion of Rob Hyndman.)

o Rao's efficient score test has been implemented for glm objects.
Specifically, the add1, drop1, and anova methods now allow test =

o If a saved workspace (e.g. .RData) contains objects that cannot
be loaded, R will now start with an warning message and an empty
workspace, rather than failing to start.

o strptime() now accepts times such as 24:00 for midnight at the
end of the day, for although these are disallowed by POSIX
1003.1-2008, ISO 8601:2004 allows them.

o Assignment of names() to S4 objects now checks for a
corresponding "names" slot, and generates a warning or an error
if that slot is not defined. See the section on slots in

o The default methods for is.finite(), is.infinite() and is.nan()
now signal an error if their argument is not an atomic vector.

o The formula method for plot() no longer places package stats on
the search path (it loads the namespace instead).

o There now is a genuine "function" method for plot() rather than
the generic dispatching internally to graphics::plot.function().
It is now exported, so can be called directly as plot.function().

o The one-sided ks.test() allows exact = TRUE to be specified in
the presence of ties (but the approximate calculation remains the
default: the 'exact' computation makes assumptions known to be
invalid in the presence of ties).

o The behaviour of curve(add = FALSE) has changed: it now no longer
takes the default x limits from the previous plot (if any):
rather they default to c(0, 1) just as the "function" method for
plot(). To get the previous behaviour use curve(add = NA), which
also takes the default for log-scaling of the x-axis from the
previous plot.

o Both curve() and the plot() method for functions have a new
argument xname to facilitate plots such as sin(t) vs t.

o The local argument to source() can specify an environment as well
as TRUE (parent.env()) and FALSE (.GlobalEnv). It gives better
error messages for other values, such as NA.

o vcov() gains methods for classes "summary.lm" and "summary.glm".

o The plot() method for class "profile.nls" gains ylab and lty
arguments, and passes ... on to plot.default.

o Character-string arguments such as the mode argument of vector(),
as.vector() and is.vector() and the description argument of
file() are required to be of length exactly one, rather than any
further elements being silently discarded. This helps catch
incorrect usage in programming.

o The length argument of vector() and its wrappers such as
numeric() is required to be of length exactly one (other values
are now an error rather than giving a warning as previously).

o vector(len) and length(x) <- len no longer acccept TRUE/FALSE for
len (not that they were ever documented to, but there was
special-casing in the C code).

o There is a new function Sys.setFileTime() to set the time of a
file (including a directory). See its help for exactly which
times it sets on various OSes.

o The file times reported by file.info() are reported to sub-second
resolution on systems which support it. (Currently the POSIX
2008 and FreeBSD/Darwin/NetBSD methods are detected.)

o New function getCall(m) as an abstraction for m$call, enabling
update()'s default method to apply more universally. (NB: this
can be masked by existing functions in packages.)

o Sys.info() gains a euser component to report the 'effective' user
on OSes which have that concept.

o The result returned by try() now contains the original error
condition object as the "condition" attribute.

o All packages with R code are lazy-loaded irrespective of the
LazyLoad field in the DESCRIPTION file. A warning is given if
the LazyLoad field is overridden.

o Rd markup has a new \figure tag so that figures can be included
in help pages when converted to HTML or LaTeX. There are
examples on the help pages for par() and points().

o The built-in httpd server now allows access to files in the
session temporary directory tempdir(), addressed as the /session
directory on the httpd server.

o Development versions of R are no longer referred to by the number
under which they might be released, e.g. in the startup banner, R
--version and sessionUtils(). The correct way to refer to a
development version of R is 'R-devel', preferably with the date
and SVN version number.
E.g. R-devel (2011-07-04 r56266)

o There is a new function texi2pdf() in package tools, currently a
convenience wrapper for texi2dvi(pdf = TRUE).

o There are two new options for typesetting PDF manuals from Rd
files. These are beramono and inconsolata, and used the named
font for monospaced output. They are intended to be used in
combination with times, and times,inconsolata,hyper is now the
default for the reference manual and package manuals. If you do
not have that font installed, you can set R_RD4PF to one of the
other options: see the 'R Installation and Administration

o Automatic printing for reference classes is now done by the
$show() method. A method is defined for class envRefClass and
may be overriden for user classes (see the ?ReferenceClasses
example). S4 show() methods should no longer be needed for
reference classes.

o tools::Rdiff (by default) and R CMD Rdiff now ignore differences
in pointer values when comparing printed environments, compiled
byte code, etc.

o The "source" attribute on functions created with keep.source=TRUE
has been replaced with a "srcref" attribute. The "srcref"
attribute references an in-memory copy of the source file using
the "srcfilecopy" class or the new "srcfilealias" class.

o New items User Manuals and Technical Papers have been added to
the HTML help main page. These link to vignettes in the base and
recommended packages and to a collection of papers about R
issues, respectively.

o Documentation and messages have been standardized to use
"namespace" rather than "name space".

o setGeneric() now looks in the default packages for a non-generic
version of a function if called from a package with a namespace.
(It always did for packages without a namespace.)

o Setting the environment variable R_WARN_ON_LOCKED_BINDINGS will
give a warning if an attempt is made to change a locked binding.

o \SweaveInput is now supported when generating concordances in

o findLineNum() and setBreakpoint() now allow the environment to be
specified indirectly; the latter gains a clear argument to allow
it to call untrace().

o The body of a closure can be one of further types of R objects,
including enviroments and external pointers.

o The Rd2HTML function in package tools now has a stylesheet
argument, allowing pages to be displayed in alternate formats.

o New function requireNamespace() analogous to require(), returning
a logical value after attempting to load a namespace.

o There is a new type of RNG, "L'Ecuyer-CMRG", implementing
L'Ecuyer (1999)'s 'combined multiple-recursive generator'
MRG32k3a. See the comments on ?RNG.

o help.search() and ?? can now display vignettes and demos as well
as help pages. The new option "help.search.types" controls the
types of documentation and the order of their display.

This also applies to HTML searches, which now give results in all
of help pages, vignettes and demos.

o socketConnection() now has a timeout argument. It is now
documented that large values (package snow used a year) do not
work on some OSes.

o The initialization of the random-number generator now uses the
process ID as well as the current time, just in case two R
processes are launched very rapidly on a machine with
low-resolution wall clock (some have a resolution of a second;
modern systems have microsecond-level resolution).

o New function pskill() in the tools package to send a terminate
signal to one or more processes, plus constants such as SIGTERM
to provide a portable way to refer to signals (since the numeric
values are OS-dependent).

o New function psnice() in the tools package to return or change
the 'niceness' of a process. (Refers to the 'priority class' on

o list.dirs() gains a recursive argument.

o An Authors at R field in a package DESCRIPTION file can now be used
to generate Author and Maintainer fields if needed, and to
auto-generate package citations.

o New utility getElement() for accessing either a list component or
a slot in an S4 object.

o stars() gains a col.lines argument, thanks to Dustin Sallings.
(Wish of PR#14657.)

o New function regmatches() for extracting or replacing matched or
non-matched substrings from match data obtained by regexpr(),
gregexpr() and regexec().

o help(package = "pkg_name", help_type = "HTML") now gives HTML
help on the package rather than text help. (This gives direct
access to the HTML version of the package manual shown via
help.start()'s 'Packages' menu.)

o agrep() gains a fixed argument to optionally allow approximate
regular expression matching, and a costs argument to specify
possibly different integer match costs for insertions, deletions
and substitutions.

o read.dcf() and write.dcf() gain a keep.white argument to indicate
fields where whitespace should be kept as is.

o available.packages() now works around servers that fail to return
an error code when PACKAGES.gz does not exist. (Patch submitted
by Seth Schommer.)

o readBin() can now read more than 2^31 - 1 bytes in a single call
(the previously documented limitation).

o New function regexec() for finding the positions of matches as
well as all substrings corresponding to parenthesized
subexpressions of the given regular expression.

o New function adist() in package utils for computing 'edit'
(generalized Levenshtein) distances between strings.

o Class "raster" gains an is.na method to avoid confusion from the
misuse of the matrix method (such as PR#14618).

o The identical() function gains an ignore.bytecode argument to
control comparison of compiled functions.

o pmin and pmax now warn if an argument is partially recycled (wish
of PR#14638).

o The default for image(useRaster=) is now taken from option
"preferRaster": for the small print see ?image.

o str() now displays reference class objects and their fields,
rather than treating them as classical S4 classes.

o New function aregexec() in package utils for finding the
positions of approximate string matches as well as all substrings
corresponding to parenthesized subexpressions of the given
regular expression.

o download.file() has an extra argument to pass additional
command-line options to the non-default methods using
command-line utilities.

cacheOK = FALSE is now supported for method = "curl".

o interaction.plot(*, type = .) now also allows type "o" or "c".

o axTicks(*, log=TRUE) did sometimes give more values than the
ticks in the corresponding graphics::axis(). By default, it now
makes use of the new (graphics-package independent) axisTicks()
which can make use of a new utility .axisPars(). Further, it now
returns a decreasing sequence (as for log=FALSE) when usr is

o Using fix() or edit() on a R object (except perhaps a matrix or
data frame) writes its temporary file with extension .R so
editors which select their mode based on the extension will
select a suitable mode.


o The pdf() device makes use of Flate compression: this is
controlled by the new logical argument compress, and is enabled
by default.

o Devices svg(), cairo_pdf() and cairo_ps() gain a family argument.

On a Unix-alike X11 gains a family argument. This is one of
the x11.options() and so can be passed as an argument to the
bmp(), jpeg(), png() and tiff() devices.

Analogous changes have been made on Windows, so all built-in R
graphics devices now have a family argument except pictex()
(which has no means to change fonts).

o The bmp(), jpeg(), png() and tiff() devices now make use of the
antialias argument for type = "quartz".

o There are several new built-in font mappings for X11: see the help on X11Fonts().

o There is a new type X11 which updates the
screeen less frequently: see its help page.

o The X11 device now makes use of cursors to distinguish its
states. The normal cursor is an arrow (rather than a crosshair);
the crosshair is used when the locator is in use, and a watch
cursor is shown when plotting computations are being done.
(These are the standard names for X11 cursors: how they are
actually displayed depends on the window manager.)

o New functions dev.hold() and dev.flush() for use with graphics
devices with buffering. These are used for most of the
high-level graphics functions such as boxplot(), so that the plot
is only displayed when the page is complete.

Currently implemented for windows(buffered = TRUE), quartz() and
the cairographics-based X11 types with buffering (which are the
default on-screen devices).

o New function dev.capture() for capture of bitmap snapshots of
image-based devices (a superset of the functionality provided by
grid.cap() in grid).

o The default colormodel for pdf() and postscript() is now called
"srgb" to more accurately describe it. (Instead of "rgb", and in
the case of postscript() it no longer switches to and from the
gray colorspace, by default.)

The colormodel for postscript() which does use both gray and sRGB
colorspaces is now called "srgb+gray".

Plots which are known to use only black/white/transparent can
advantageously use colormodel = "gray" (just as before, but there
is now slightly more advantage in doing so).

o postscript() with values colormodel = "rgb" and colormodel =
"rgb-nogray" give the behaviour prior to R 2.13.0 of uncalibrated
RGB, which under some circumstances can be rendered much faster
by a viewer.

pdf(colormodel = "rgb") gives the behaviour prior to R 2.13.0 of
uncalibrated RGB, which under some circumstances can be rendered
faster by a viewer, and the files will be smaller (by about 9KB
if compression is not used).

o The postscript() device only includes the definition of the sRGB
colorspace in the output file for the colormodels which use it.

o The postscript() and pdf() devices now output greyscale raster
images (and not RGB) when colormodel = "gray".

o postscript(colormodel = "gray") now accepts non-grey colours and
uses their luminance (as pdf() long has).

o colormodel = "grey" is allowed as an alternative name for
postscript() and pdf().

o pdf() in the default sRGB colorspace outputs many fewer changes
of colorspace, which may speed up rendering in some viewing

o There is a new function dev.capabilities() to query the
capabilities of the current device. The initial set of
capabilities are support for semi-transparent colours, rendering
and capturing raster images, the locator and for interactive

o For pdf(), maxRasters is increased as needed so the argument is
no longer used.


o Options keep.source = TRUE, figs.only = FALSE are now the

o The way the type of user-defined options is determined has
changed. Previously they were all regarded as logical: now the
type is determined by the value given at first use.

o The allowed values of logical options are now precisely those
allowed for character inputs to as.logical(): this means that t
and f are no longer allowed (although T and F still are).

o The preferred location for vignette sources is now the directory
vignettes and not inst/doc: R CMD build will now re-build
vignettes in directory vignettes and copy the .Rnw (etc) files
and the corresponding PDFs to inst/doc. Further files to be
copied to inst/doc can be specified via the file

o R CMD Sweave now supports a --driver option to select the Sweave
driver: the default is equivalent to --driver=RweaveLatex.

o R CMD Sweave and R CMD Stangle support options --encoding and

o The Rtangle() driver allows output = "stdout" or output =
"stderr" to select the output or message connection. This is
convenient for scripting using something like

R CMD Stangle --options='output="stdout"' foo.Rnw > foo2.R

o There is a new option pdf.compress controlling whether PDF
figures are generated using Flate compression (they are by

o R CMD Sweave now has a --pdf option to produce a PDF version of
the processed Sweave document.

o It is no longer allowed to have two vignettes with the same
vignette basename (e.g. vig.Rnw and vig.Snw). (Previously one
vignette hid the other in the vignette() function.)


o Function R_tmpnam2 has been added to the API to allow a temporary
filename to include a specified extension.


o Package DESCRIPTION file field KeepSource forces the package to
be installed with keep.source = TRUE (or FALSE). (Suggestion of
Greg Snow. Note that as all packages are lazy-loaded, this is
now only relevant at installation.)

There are corresponding options --with-keep.source and
--without-keep.source for R CMD INSTALL.

o R CMD INSTALL has a new option --byte-compile to byte-compile the
packages during installation (since all packages are now
lazy-loaded). This can be controlled on a per-package basis by
the optional field ByteCompile in the DESCRIPTION file.

o A package R code but without a NAMESPACE file will have a default
one created at R CMD build or R CMD INSTALL time, so all packages
will be installed with namespaces. A consequence of this is that
.First.lib() functions need to be copied to .onLoad() (usually)
or .onAttach(). For the time being, if there is an
auto-generated NAMESPACE file and no .onLoad() nor .onAttach()
function is found but .First.lib() is, it will be run as the
attach hook (unless the package is one of a list of known
exceptions, when it will be run as the load hook).

o A warning is given if test-loading a package changes a locked
binding in a package other than itself. It is likely that this
will be disallowed in future releases. (There are pro tem some
exceptions to the warning.)

o A dependency on SVN revision is allowed for R, e.g. R (>=
r56550). This should be used in conjunction with a version
number, e.g. R (>= 2.14.0), R (>= r56550) to distinguish beteen
R-patched and R-devel versions with the same SVN revision.

o installed.packages() now hashes the names of its cache files to
avoid very rare problems with excessively long path names.

o A top-level COPYING file in a package is no longer installed
(file names LICENSE or LICENCE having long been preferred).


o R CMD check now gives an error if the R code in a vignette fails
to run, unless this is caused by a missing package.

o R CMD check now unpacks tarballs in the same way as R CMD
INSTALL, including making use of the environment variable
R_INSTALL_TAR to override the default behaviour.

o R CMD check performs additional code analysis of package startup
functions, and notifies about incorrect argument lists and
(incorrect) calls to functions which modify the search path or
inappropriately generate messages.

o R CMD check now also checks compiled code for symbols
corresponding to functions which might terminate R or write to
stdout/stderr instead of the console.

o R CMD check now uses a pdf() device when checking examples
(rather than postscript()).

o R CMD check now checks line-endings of makefiles and
C/C++/Fortran sources in subdirectories of src as well as in src

o R CMD check now reports as a NOTE what look like methods
documented with their full names even if there is a namespace and
they are exported. In almost all cases they are intended to be
used only as methods and should use the \method markup. In the
other rare cases the recommended form is to use a function such
as coefHclust which would not get confused with a method,
document that and register it in the NAMESPACE file by
s3method(coef, hclust, coefHclust).

o The default for the environment variable R_CHECK_COMPACT_DATA2
is now true: thus if using the newer forms of compression
introduced in R 2.10.0 would be beneficial is now checked (by

o Reference output for a vignette can be supplied when checking a
package by R CMD check: see 'Writing R Extensions'.

o R CMD Rd2dvi allows the use of LaTeX package inputenx rather than
inputenc: the value of the environment variable RD2DVI_INPUTENC
is used. (LaTeX package inputenx is an optional install which
provides greater coverage of the UTF-8 encoding.)

o Rscript on a Unix-alike now accepts file names containing spaces
(provided these are escaped or quoted in the shell).

o R CMD build on a Unix-alike (only) now tries to preserve dates on
files it copies from its input directory. (This was the
undocumented behaviour prior to R 2.13.0.)


o require() no longer has a save argument.

o The gamma argument to hsv(), rainbow(), and rgb2hsv() has been

o The --no-docs option for R CMD build --binary is defunct: use
--install-args instead.

o The option --unsafe to R CMD INSTALL is defunct: use the
identical option --no-lock instead.

o The entry point pythag formerly in Rmath.h is defunct: use
instead the C99 function hypot.

o R CMD build --binary is formally defunct: R CMD INSTALL --build
has long been the preferred alternative.

o zip.file.extract() is now defunct: use unzip() or unz() instead.

o R CMD Rd2dvi without the --pdf option is now deprecated: only PDF
output will be supported in future releases (since this allows
the use of fonts only supported for PDF), and only R CMD Rd2pdf
will be available.

o Options such as --max-nsize and the function mem.limits() are now
deprecated: these limits are nowadays almost never used, and are
reported by gc() when they are in use.

o Forms like binomial(link = "link") for GLM families deprecated
since R 2.4.0 are now defunct.

o The declarativeOnly argument to loadNamespace() (not relevant
since R 2.13.0) has been removed.

o Use of library.dynam() without specifying all the first three
arguments is deprecated. (It is often called from a namespace,
and the defaults are only appropriate to a package.)

Use of chname in library.dynam() with the extension .so or .dll
(which is clearly not allowed according to the help page) is
deprecated. This also applies to library.dynam.unload() and
useDynLib directives in NAMESPACE files.

o It is deprecated to use mean(x) and sd(x) directly on data frames
(or also matrices, for sd) x, instead of simply using sapply.

In the same spirit, median(x) now gives an error for a data frame
x (it often gave nonsensical results).

o The keep.source argument to library() and require() is
deprecated: it was only used for packages installed without
lazy-loading, and now all packages are lazy-loaded.

o Using a false value for the DESCRIPTION field LazyLoad is


o The base and recommended packages are now byte-compiled
(equivalent to make bytecode in R 2.13.x).

o Configure option --with-system-zlib now only makes use of the
basic interface of zlib and not the C function gzseek which has
shown erroneous behaviour in zlib 1.2.4 and 1.2.5.

o The zlib in the R sources is now version 1.2.5. (This is safe
even on 32-bit Linux systems because only the basic interface is
now used.)

o The .afm files in package grDevices are now installed as
compressed files (as long done on Windows), saving ca 2MB on the
installed size.

o The non-screen cairo-based devices are no longer in the X11
module and so can be installed without X11. (We have never seen
a Unix-alike system with cairographics installed but not X11, but
a user might select --without-x.)

o Configure will try to use -fobjc-exceptions for the Objective-C
compiler (if present) to ensure that even compilers that do not
enable exceptions by default (such as vanilla gcc) can be used.
(Objective-C is currently only used on Mac OS X.)

o The system call times is required.

o The C99 functions acosh, asinh, atanh, snprintf and vsnprintf are
now required.

o There is no longer support for making DVI manuals via make dvi,
make install-dvi and similar. Only PDF manuals are supported (to
allow the use of fonts which are only available for PDF.)

o The configure arguments used during configuration of R are
included as a comment in Makeconf for informative purposes on
Unix-alikes in a form suitable for shell execution. Note that
those are merely command-line arguments, they do not include
environment variables (one more reason to use configure variables
instead) or site configuration settings.

o Framework installation now supports DESTDIR (Mac OS X only).

o Java detection (R CMD javareconf) works around bogus
java.library.path property in recent Oracle Java binaries.


o The locale category LC_MONETARY was only being set on startup on
Windows: that is now done on Unix-alikes where supported.

o Reference class utilities will detect an attempt to modify
methods or fields in a locked class definition (e.g., in a
namespace) and generate an error.

o The formula methods for lines(), points() and text() now work
even if package stats is not on the search path.

o In principle, S4 classes from different packages could have the
same name. This has not previously worked. Changes have now
been installed that should allow such classes and permit methods
to use them. New functions className() and multipleClasses() are
related tools for programming.

o Work around an issue in Linux (a system select call resetting tv)
which prevented internet operations from timing out properly.

o Several stack trampling and overflow issues have been fixed in
TRE, triggered by agrep and friends with long patterns.

o ("design infelicity") Field assignments in reference classes are
now consistent with slots in S4 classes: the assigned value must
come from the declared class (if any) for the field or from a

o The methods objects constructed for "coerce" and "coerce<-" were
lacking some essential information in the generic, defined and
target slots; as() did not handle duplicate class definitions

o The parser no longer accepts the digit 8 in an octal character
code in a string, nor does it accept unterminated strings in a
file. (Reported by Bill Dunlap.)

o The print() method for class "summary.aov" did not pass on
argument digits when summary() was called on a single object, and
hence used more digits than documented.

o The X11 device's cairo back-end produced incorrect capture
snapshot images on big-endian machines.

o loglin() gave a spurious error when argument margin consisted of
a single element of length one. (PR#14690)

o loess() is better protected against misuse, e.g. zero-length
span. (PR#14691)

o HoltWinters() checks that the optimization succeeded. (PR#14694)

o The (undocumented) inclusion of superclass objects in default
initializing of reference classes overwrote explicit field
arguments. The bug is fixed, the feature documented and a test

o round(x, -Inf) now does something sensible (return zero rather
than NA).

o signif(x, -Inf) now behaves as documented (signif(x, 1)) rather
than giving zero.

o The "table" method for Axis() hardcoded side = 1, hence calls to
plot(<vector>, <table>) labelled the wrong axis. (PR#14699)

o Creating a connection might fail under gctorture(TRUE).

o stack() and unstack() converted character columns to factors.

unstack() sometimes produced incorrect results (a list or a
vector) if the factor on which to un-split had only one level.

o On some systems help(".C", help_type = "pdf") and similar
generated file names that TeX was unable to handle.

o Non-blocking listening socket connections continued to report
isIncomplete() as true even when the peer had closed down and all
available input had been read.

o The revised HTML search system now generates better hyperlinks to
help topics found: previously it gave problems with help pages
with names containing e.g. spaces and slashes.

o A late change in R 2.13.2 broke \Sexpr expressions in Rd files.

o The creation of ticks on log axes (including axTicks() sometimes
incorrectly omitted a tick at one end

o The creation of ticks on log axes (including by axTicks())
sometimes incorrectly omitted a tick at one end of the range by
rounding error in a platform-dependent way. This could be seen
in the examples for axTicks(), where with axis limits c(0.2, 88)
the tick for 0.2 was sometimes omitted.

o qgamma() for small shape underflows to 0 rather than sometimes
giving NaN. (PR#8528, PR#14710)

o mapply() now gives an explicit error message (rather than an
obscure one) is inputs of zero and positive length are mixed.

o Setting a Hershey font family followed by string height query
would crash R.

o R CMD javareconf -e would fail for some shells due to a shift
error. Also the resulting paths will no longer contain
$(JAVA_HOME) as that can result in an unintended substitution
based on Makeconf instead of the shell setting.

Version 2.13.0 | Release Date: 2011-04-13 | Download
No changes specified
Version 2.10.0 | Release Date: 2009-10-26 | Download

CHANGES IN R VERSION 2.10.0 patched


o The PCRE library has been updated to version 8.00.


o configure will be able to find a usable libtiff in some rare
circumstances where it did not previously (where libtiff
needed to be linked explicitly against -ljpeg).


o The 'extended' argument is deprecated in strsplit(), grep(),
grepl(), sub(), gsub(), regexpr() and gregexpr() (not just the
value extended = FALSE) and will be removed in R 2.11.0.


o trigamma(x) and other psigamma(x, n) calls are now accurate for
very large abs(x). (PR#14020)

o [g]sub(perl=FALSE, fixed=FALSE) could use excessive stack space
when used with a very long vector containing some non-ASCII

o The default method of weighted.mean(na.rm = TRUE) did not omit
weights for NA observations in 2.10.0. (PR#14032)

o [g]regexpr(pattern, fixed = TRUE) returned match positions in
bytes (not characters) in an MBCS locale if 'pattern' was a
single byte.

[g]sub(fixed = TRUE) with a single-byte pattern could
conceivably have matched part of a multibyte character in a
non-UTF-8 MBCS.

o findLineNum() and setBreakpoint() would sometimes fail if the
specified file was not in the current directory.

o Package tcltk's demo(tkdensity) was broken in 2.9.0 when demo()
was changed to set par(ask = TRUE).

o gsub() with backrefs could fail on extremely long strings
(hundreds of thousands of characters) due to integer overflow
in a length calculation.

o abline(*, untf=TRUE) now uses a better x-grid in log-scale, e.g.,
for plot(c(1,300), c(1,300), log="xy") ; abline(4,1, untf=TRUE).

o detach/unloadNamespace() arrange to flush the package's
lazyload cache of R objects once the package/namespace is no
longer needed.

o There have been small fixes to the rendering of help,
e.g. \command is now rendered verbatim (so e.g. -- is not
interpreted, PR#14045).

Also, there are many small changes to help files where the new
converters were not rendering them in the same way as before.

o available.packages() would fail when run on a repository
with no packages meeting the filtering conditions. (PR#14042)

o rep(x, times, each = 2) gave invalid results when the 'times'
argument is a vector longer than 'x'. Reported by Bill Dunlap.

o An error when unloadNamespace() attempted to run the .onUnload()
function gave an error in the reporting function and so was
not reported properly.



o Package help is now converted from Rd by the R-based converters
that were first introduced in 2.9.0. This means

- Packages that were installed by R-devel after 2009-08-09
should not be used with earlier versions of R, and most
aspects of package help (including the runnable examples)
will be missing if they are so used.

- Text, HTML and latex help and examples for packages
installed under the new system are converted on-demand from
stored parsed Rd files. (Conversions stored in packages
installed under R < 2.10.0 are used if no parsed Rd files
are found. It is recommended that such packages be

o HTML help is now generated dynamically using an HTTP server
running in the R process and listening on the loopback

- Those worried about security implications of such a server
can disable it by setting the environment variable
R_DISABLE_HTTPD to a non-empty value. This disables
help.start() and HTML help (so text help is shown instead).

- The Java/Javascript search engine has been replaced by an
HTML interface to help.search(). help.start() no longer has
an argument 'searchEngine' as it is no longer needed.

- The HTML help can now locate cross-references of the form
\link[pkg]{foo} and \link[pkg:foo]{bar} where 'foo' is an
alias in the package, rather than the documented (basename
of a) filename (since the documentation has been much


o polygon(), pdf() and postscript() now have a parameter
'fillOddEven' (default FALSE), which controls the mode used for
polygon fills of self-intersecting shapes.

o New debugonce() function; further,
getOption("deparse.max.lines") is now observed when debugging,
from a code suggestion by John Brzustowski. (PR#13647/8)

o plot() methods for "stepfun" and hence "ecdf" no longer plot
points by default for n >= 1000.

o [g]sub(*, perl=TRUE) now also supports '\E' in order to end
\U and \L case changes, thanks to a patch from Bill Dunlap.

o factor(), `levels<-`(), etc, now ensure that the resulting factor
levels are unique (as was always the implied intention). Factors
with duplicated levels are still constructible by low-level means,
but are now declared illegal.

o New print() (S3) method for class "function", also used for
auto-printing. Further, .Primitive functions now print and
auto-print identically. The new method is based on code
suggestions by Romain François.

o The print() and toLatex() methods for class "sessionInfo" now
show the locale in a nicer format and have arguments to
suppress locale information.

o In addition to previously only round(), there are other 'Math'
group (S3) methods for 'difftime', such as floor(), signif(),
abs(), etc.

o For completeness, old.packages() and available.packages() allow
'type' to be specified (you could always specify 'available'
or 'contriburl').

o available.packages() by default only returns information on
the latest versions of packages whose version requirements are
satisified by the currently running R.

o tools::write_PACKAGES() has a new argument 'latestOnly', which
defaults to TRUE when only the latest versions in the
repository will be listed in the index.

o getOption() has a new argument 'default' that is returned if
the specified option is not set. This simplifies querying a
value and checking whether it is NULL or not.

o parse() now warns if the requested encoding is not supported.

o The "table" method of as.data.frame() gains a 'stringsAsFactors'
argument to allow the classifying factors to be returned as
character vectors rather than the default factor type.

o If model.frame.default() encounters a character variable where
'xlev' indicates a factor, it now converts the variable to a
factor (with a warning).

o curve() now returns a list containing the points that were drawn.

o spineplot() now accepts axes = FALSE, for consistency with
other functions called by plot.factor().

o The Kendall and Spearman methods of cor.test() can optionally
use continuity correction when not computing exact p-values.
(The Kendall case is the wish of PR#13691.)

o R now keeps track of line numbers during execution for
code sourced with options(keep.source = TRUE). The source
reference is displayed by debugging functions such as traceback(),
browser(), recover(), and dump.frames(), and is stored as an
attribute on each element returned by sys.calls(). [Experimental]

o More functions now have an implicit (S4) generic definition.

o quantile.default() now disallows factors (wish of PR#13631)
and its help documents what numeric-like properties its input
need to have to work correctly.

o weighted.mean() is now generic and has "Date", "POSIXct" and
"POSIXlt" methods.

o Naming subscripts (e.g. x[i=1, j=2]) in data.frame methods for
[ and [[ now gives a warning. (Names are ignored in the
default method, but could have odd semantics for other
methods, and do for the data.frame ones.)

o as.data.frame() has an "aovproj" method. (Wish of PR#13505)

o as.character(x) for numeric x no longer produces strings such as
"0.30", i.e., with trailing zeros. This change also renders
levels construction in factor() more consistent.

o codocClasses(), which checks consistency of the documentation of
S4 class slots, now does so in considerably more cases. The
documentation of inherited slots (from superclasses) is now
optional. This affects 'R CMD check <pkg>' when the package
defines S4 classes.

o codoc() now also checks S4 methods for code/documentation

o for(), while(), and repeat() loops now always return NULL as
their (invisible) value. This change was needed to address a
reference counting bug without creating performance penalties
for some common use cases.

o The print() method for ls.str() results now obeys an optional
'digits' argument.

o The 'method' argument of glm() now allows user-contributed methods.

o More general reorder.default() replaces functionality of
reorder.factor() and reorder.character().

o The function aspell() has been added to provide an interface to
the Aspell spell-checker.

o Filters RdTextFilter() and SweaveTeXFilter() have been added
to the tools package to provide support for aspell() or other
spell checkers.

o xtabs() with the new option 'sparse = TRUE' now returns a sparse
Matrix, using package 'Matrix'.

o contr.sum() etc gain an argument 'sparse' which allows sparse
matrices to be returned.

contrasts() also gains a 'sparse' argument which it passes to the
actual contrast function if that has a formal argument 'sparse'.

'contrasts(f, .) <- val' now also works when 'val' is a sparse
Matrix. It is planned that model.matrix() will work with such
factors 'f' in the future.

o readNEWS() will recognize a UTF-8 byte-order mark (BOM) in the
NEWS file. However, it is safer to use only ASCII code there
because not all editors recognize BOMs.

o New utility function inheritedSlotNames() for S4 class programming.

o tabulate() now allows NAs to pass through (and be ignored).

o If debug() is called on an S3 generic function then all methods
are debugged as well.

o Outlier symbols drawn by boxplot() now obey the 'outlwd'
argument. Reported by Jurgen Kluge.

o svd(x) and eigen(x) now behave analogously to qr(x) in
accepting logical matrices x.

o File NEWS is now in UTF-8, and has a BOM (often invisible) on
the first line, and Emacs local variables set for UTF-8 at the
end. RShowDoc("NEWS") should display this correctly, given
suitable fonts.

o terms.formula(simplify = TRUE) now does not deparse the LHS and
so preserves non-standard responses such as `a: b` (requested
by Sundar Dorai-Raj).

o New function news() for building and querying R or package news

o z^n for integer n and complex z is more accurate now if
|n| <= 65536.

o factor(NULL) now returns the same as factor(character(0))
instead of an error, and table(NULL) consequently does

o as.data.frame.vector() (and its copies) is slightly faster
by avoiding a copy if there are no names (following a
suggestion of Tim Hesterberg).

o writeLines(), writeBin() and writeChar() have a new argument
'useBytes'. If false, character strings with marked encodings
are translated to the current locale (as before) but if true
they are written byte-by-byte.

o iconv() has a new argument 'mark' which can be used (by
experts) to suppress the declaration of encodings.

o DESCRIPTION 'LinkingTo' specs are now recognized as installation
dependencies, and included in package management computations.

o Standardized DESCRIPTION 'License' specs are now available for
package management computations.

o "\uxxxx" and "\Uxxxxxxxx" escapes can now be parsed to a UTF-8
encoded string even in non-UTF-8 locales (this has been
implemented on Windows since R 2.7.0). The semantics have
been changed slightly: a string containing such escapes is
always stored in UTF-8 (and hence is suitable for portably
including Unicode text in packages).

o New as.raw() method for "tclObj" objects (wish of PR#13578).

o Rd.sty now makes a better job of setting email addresses,
including using a monospaced font.

o textConnection() gains an 'encoding' argument to determine how
input strings with marked encodings will be handled.

o R CMD Rd2pdf is available as a shortcut for R CMD Rd2dvi --pdf.

o R CMD check now checks links where a package is specified
(\link[pkg]{file} or \link[pkg:file]{topic}), if the package
is available. It notes if the package is not available, as in
many cases this is an error in the link.

o identical() gains three logical arguments, which allow for even
more differentiation, notably '-0' and '0'.

o legend() now can specify the 'border' color of filled boxes,
thanks to a patch from Frederic Schutz.

o Indexing with a vector index to [[]] has now been extended to
all recursive types.

o Pairlists may now be assigned as elements of lists. (Lists
could always be created with pairlist elements, but [[<-
didn't support assigning them.)

o The parser now supports C-preprocessor-like #line directives,
so error messages and source references may refer to the original
file rather than an intermediate one.

o New functions findLineNum() and setBreakpoint() work with the
source references to find the location of source lines and set
breakpoints (using trace()) at those lines.

o Namespace importing is more careful about warning on masked
generics, thanks to a patch by Yohan Chalabi.

o detach() now has an argument 'character.only' with the same
meaning as for library() or require().

o available.packages() gains a 'filters' argument for specifying
the filtering operations performed on the packages found in the
repositories. A new built-in 'license/FOSS' filter only
retains packages for which installation can proceed solely based
on packages which can be verified as Free or Open Source
Software (FOSS) employing the available license specifications.

o In registering an S3 class by a call to setOldClass(), the data
part (e.g., the object type) required for the class can be
included as one of the superclasses in the Classes argument.

o The argument 'f' to showMethods() can be an expression evaluating
to a generic function, allowing methods to be shown for
non-exported generics and other nonstandard cases.

o sprintf() now supports '%o' for octal conversions.

o New function Sys.readlink() for information about symbolic
links, including if a file is a symbolic link.

o Package 'tools' has new functions checkRdaFiles() and
resaveRdaFiles() to report on the format of .rda/.RData data
files, and to re-save them in a different compressed format,
including choosing the most compact format available.

A new INSTALL option, --resave-data, makes use of this.

o File ~/.R/config is used in preference to ~/.Rconfig, and
these are now documented in 'R Installation and Administration'.

o Logic operations with complex numbers now work, as they were always
documented to, and as in S.

o arrows() and segments() allow one of x1 or y1 to be omitted to
simplify the specification of vertical or horizontal lines
(suggestion of Tim Hesterberg).

o approxfun() is faster by avoiding repeated NA checks (diagnosis
and patch by Karline Soetaert & Thomas Petzoldt).

o There are the beginnings of a Nynorsk translation by Karl Ove

o stripchart() allows par 'bg' to be passed in for the
background colour for pch = 21 (wish of PR#13984).

o New generic function .DollarNames() to enable class authors
to customize completion after the $ extractor.

o load(), save(), dput() and dump() now open a not-yet-open
connection in the appropriate mode (as other functions using
connections directly already did).


o A different regular expression engine is used for basic and
extended regexps and is also for approximate matching. This is
based on the TRE library of Ville Laurikari, a modifed copy of
which is included in the R sources.

This is often faster, especially in a MBCS locale.

Some known differences are that it is less tolerant of invalid
inputs in MBCS locales, and in its interpretation of undefined
(extended) regexps such as "^*". Also, the interpretation of
ranges such as [W-z] in caseless matching is no longer to map
the range to lower case.

This engine may in future be used in 'literal' mode for fixed
= TRUE, and there is a compile-time option in src/main/grep.c
to do so.

o The use of repeated boundary regexps in gsub() and gregexpr() as
warned about in the help page does not work in this engine (it
did in the previous one since 2005).

o Extended (and basic) regexps now support same set of options as
for fixed = TRUE and perl = TRUE, including 'useBytes' and
support for UTF-8-encoded strings in non-UTF-8 locales.

o agrep() now has full support for MBCS locales with a modest
speed penalty. This enables help.search() to use approximate
matching character-wise rather than byte-wise.

o [g]sub use a single-pass algorithm instead of matching twice
and so is usually faster.

o The perl = TRUE versions now work correctly in a non-UTF-8 MBCS
locale, by translating the inputs to UTF-8.

o useBytes = TRUE now inhibits the translation of inputs with
marked encodings.

o strsplit() gains a 'useBytes' argument.

o The algorithm used by strsplit() has been reordered to batch by
elements of 'split': this can be much faster for fixed = FALSE
(as multiple compilation of regexps is avoided).

o The help pages, including ?regexp, have been updated and
should be consulted for details of the new implementations.


o A new dynamic HTML help system is used by default, and may be
controlled using tools::startDynamicHelp(). With this enabled,
HTML help pages will be generated on request, resolving links
by searching through the current .libPaths(). The user
may set options("help.ports") to control which IP port is used
by the server.

o help.start() no longer sets options(htmlhelp = TRUE) (it used
to on Unix but not on Windows). Nor does it on Unix reset the
"browser" option if given an argument of that name.

Arguments 'update' and 'remote' are now available on all
platforms: the default is update = FALSE since the http server
will update the package index at first use.

o help() has a new argument 'help_type' (with default set by the
option of that name) to supersede 'offline', 'htmlhelp' and
'chmhelp' (although for now they still work if 'help_type' is
unset). There is a new type, "PDF" to allow offline PDF
(rather than PostScript).

A function offline_help_helper() will be used if this exists
in the workspace or further down the search path, otherwise
the function of that name in the 'utils' name space is used.

o Plain text help is now used as the fallback for HTML help (as
it always was for Compiled HTML help on Windows).

o It is possible to ask for static HTML pages to be prebuilt via
the configure option --enable-prebuilt-html. This may be
useful for those who wish to make HTML help available outside
R, e.g. on a local web site.

o An experimental tag \Sexpr has been added to Rd files, to
evaluate expressions at build, install, or render time.
Currently install time and render time evaluation are

o Tags \if, \ifelse and \out have been added to allow
format-specific (or more general, using \Sexpr) conditional
text in man pages.

o The parse_Rd() parser has been made more tolerant of coding
errors in Rd files: now all syntax errors are reported as
warnings, and an attempt is made to continue parsing.

o parse_Rd() now has an argument 'fragment' (default FALSE) to
accept small fragments of Rd files (so that \Sexpr can output
Rd code which is then parsed).

o parse_Rd() now always converts its input to UTF-8. The Rd2*
rendering functions have a new parameter, 'outputEncoding',
which controls how their output is encoded.

o parse_Rd() no longer includes the newline as part of a
"%"-style comment.

o There have been various bug fixes and code reorganization in
the Rd renderers Rd2HTML, Rd2latex, Rd2txt, and Rd2ex.

All example files are now created with either ASCII or UTF-8
encoding, and the encoding is only marked in the file if there
is any non-UTF-8 code (previously it was marked if the help
file had non-ASCII contents, possibly in other sections).

o print.Rd() now adds necessary escape characters so that
printing and re-parsing an Rd object should produce an
equivalent object.

o parse_Rd() was incorrectly handling multiple backslashes in
R code strings, converting 4n+3 backslashes to 2n+1 instead
of 2n+2.

o parse_Rd() now recognizes the \var tag within a quoted string
in R-like text.

o parse_Rd() now treats the argument of \command as LaTeX-like,
rather than verbatim.


o New function untar() to list or unpack tar archives, possibly
compressed. This uses either an external 'tar' command or an
internal implementation.

o New function tar() to create (possibly compressed) tar archives.

o New functions memCompress() and memDecompress() for in-memory
compression and decompression.

o bzfile() has a 'compress' argument to select the amount of
effort put into compression when writing.

o New function xzfile() for use with xz-compressed files. (This
can also read files compressed by some versions of 'lzma'.)

o gzfile() looks at the file header and so can now also read
bzip2-ed files and xz-compressed files.

o There are the new options of save(compress = "bzip2") and "xz"
to use bzip2 or xz compression (which will be slower, but can
give substantially smaller files). Argument compression_level
gives finer control over the space/time tradeoffs.

load() can read such saves (but only as from this version of R).

o R CMD INSTALL/check and tools::writePACKAGES accept a wider
range of compressed tar archives. Precisely how wide depends
on the capabilities of the host system's 'tar' command: they
almost always include .tar.bz2 archives, and with modern
versions of 'tar' other forms of compression such as lzma and
xz, and arbitrary extensions.

o R CMD INSTALL has a new option --data-compress to control the
compression used when lazy-loading data. New possibilities are
--data-compress=bzip2 which will give ca 15% better
compression at the expense of slower installation times, and
--data-compress=xz, often giving even better compression on
large datasets at the expense of much longer installation
times. (The latter is used for the recommended packages: it is
particularly effective for 'survival'.)

o file() for open = "", "r" or "rt" will automagically detect
compressed files (from gzip, bzip2 or xz). This means that
compressed files can be specified by file name (rather than
via a gzfile() connection) to read.table(), readlines(),
scan() and so on.

o data() can handle compressed text files with extensions
.{txt,tab,csv}.{gz,bz2,xz} .


o png(type="cairo1") is defunct: the value is no longer recognized.

o tools::Rd_parse() is defunct (as this version of R uses only
Rd version 2).

o Use of ~/.Rconf (which was deprecated in favour of ~/.Rconfig
in 2004) has finally been removed.

o Bundles of packages are deprecated. See 'Writing R
Extensions' for the steps needed to unbundle a bundle.

o help() arguments 'offline', 'htmlhelp' and 'chmhelp' are
deprecated in favour of 'help_type'.

o clearNames() ('stats') is deprecated for unname().

o Basic regular expressions (extended = FALSE) are deprecated in
strsplit, grep and friends. There is a precise POSIX standard
for them, but it is not what recent RE engines implement, and
it seems that in almost all cases package authors intended
fixed = TRUE when using extended = FALSE.

o methods::trySilent() is deprecated for try(*, silent=TRUE) or
- more efficiently and flexibly - something like
tryCatch(*, error = function(e) e).

o index.search() is deprecated: there are no longer directories of
types other than 'help'.


o cairo >= 1.2 is now required (1.2.0 was released in July 2006)
for cairo-based graphics devices (which remain optional).

o A suitable iconv() is now required: support for configure option
--without-iconv has been withdrawn (it was deprecated in R 2.5.0).

o Perl is no longer 'essential'. R can be built without it, but
scripts R CMD build, check, Rprof and Sd2d require it.

o A system 'glob' function is now essential (a working
Sys.glob() has been assumed since R 2.9.0 at least).

o C99 support for MBCS is now required, and configure option
--disable-mbcs has been withdrawn.

o Having a version of 'tar' capable of automagically detecting
compressed archives is useful for utils::untar(), and so 'gtar'
(a common name for GNU tar) is preferred to 'tar': set
environment variable TAR to specify a particular 'tar' command.


o There is some makefile support for adding/updating translations
in packages: see po/README and 'Writing R Extensions'.

There is support for the use of 'dngettext' for C-level
translations in packages: see 'Writing R Extensions'.


o Assigning an extra 0-length column to a data frame by
DF[, "foo"] <- value now works in most cases (by filling with
NAs) or fails. (It used to give a corrupt data frame.)

o validObject() avoids an error during evaluation in the case
of various incorrect slot definitions.

o n:m now returns a result of type "integer" in a few more
boundary cases.

o The 'zap.ind' argument to printCoefmat() did not usually work as
other code attempted to ensure that non-zero values had a
non-zero representation.

o printCoefmat() formatted groups of columns together, not just
the cs.ind group but also the zap.ind group and a residual
group. It now formats all columns except the cs.ind group
separately (and zaps the zap.ind group column-by-column). The
main effect will be see in the output from print.anova, as
this grouped SS-like columns in the zap.ind group.

o R_ReplDLLinit() initializes the top-level jump so that some
embedded applications on Windows no longer crash on error.

o identical() failed to take the encoding of character strings
into account, so identical byte patterns are not necessarily
identical strings, and similarly Latin-1 and UTF-8 versions of
the same string differ in byte pattern.

o methods(f) used to warn unnecessarily for an S4 generic 'f' which
had been created based on an existing S3 generic.

o The check for consistent ordering of superclasses was not
ignoring all conditional relations (the symptom was usually
spurious warnings for classes extending "array").

o Trying to assign into a raw vector with an index vector
containing NAs could cause a segfault. Reported by Hervé Pagès.

o Rscript could segfault if (by user error) its filename argument
was missing. Reported by Martin Morgan.

o getAnywhere() (and functions that use it, including argument
completion in the console) did not handle special built-in
functions. Reported by Romain Francois.

o order() was missing a PROTECT call and so could segfault when
called on character data under certain (rare) circumstances
involving marked non-native encodings.

o prettyNum(z, drop0trailing=TRUE) did not work correctly when z
was a complex vector. Consequently, str(z, ...) also did
not. (PR#13985)

o 'make distclean' removed too many files in etc/ if
builddir = srcdir.

o R CMD replaced TEXINPUTS rather than appending to it (as
documented and intended).

o help.start() no longer fails on unix when "browser" is a

o pbeta(x, *, log.p = TRUE) is sometimes more accurate, e.g., for
very small x.

o Unserializing a pre-2.8 workspace containing pure ASCII character
objects with a LATIN1 or UTF-8 encoding would corrupt the CHARSXP

Version 2.8.1 | Release Date: 2009-01-08 | Download
No changes specified
Version 2.8 | Release Date: 2008-10-26 | Download

var(), cov(), cor(), sd() etc now by default (when 'use' is not specified) return NA in many cases where they signalled an error before.

Version 2.7.1 | Release Date: 2008-06-15 | Download

The default graphics device in non-interactive use is now
pdf() rather than postscript().

Version 2.6.1 | Release Date: 2007-11-25 | Download



o The "data.frame" and "factor" methods for [[ now support the 'exact' argument introduced in 2.6.0.

o plot.lm() gains a new argument 'cex.caption' to allow the size of the captions to be controlled.

o A series of changes make the CHARSXP cache introduced in 2.6.0 faster (and in some cases many times faster) in sessions with a large number (e.g. a million) of unique character strings, and also if there are many empty strings.

o embedFonts(), bitmap() and dev2bitmap() explicitly turn off auto-rotation in Ghostscript when generating PDF.

o The canonical architecture is no longer checked when loading packages using a non-empty sub-architecture, since it is possible to (e.g.) build packages for i386-pc-linux-gnu on both that architecture and on x86_64-unknown-linux-gnu.

o Deparsing will (if option warnIncomplete is set) warn on strings longer than the parser limit (8192 bytes).

o url() now uses the UserAgent header in http transactions in the same way as download.file() (making use of option "HTTPUserAgent").


o iconv() is again able to translate character strings with embedded nuls (such as those in UCS-2).

o new.packages() and update.packages() failed when called on an empty library, since old.packages() threw an error. old.packages() now returns NULL (as documented) in that case.

o Builds on Mac OS X 10.4 or higher now allocate enough space in the binary headers to relocate dependent libraries into the framework.

o R CMD build now computes the exclusion list on the copy it makes: this avoids problems if the original sources contain symbolic links (which are resolved in the copy). Thanks to Michael Lawrence for diagnosis and patch.

o object.size() had slightly too low a size for objects of type "S4".

o symbol() in plotmath expressions was only accepting valid character strings, which made it impossible to specify symbols such as aleph (obtained by symbol("\300")) in a UTF-8 locale.

o An event handling issue caused autorepeat functions to misbehave with tcltk (notably scrollbars).

o plot(sin, -5, 5) gives ylab 'sin(x)' again, where it resulted in 'x(x)' in 2.6.0. Further, plot(sin) again plots from [0,1] also in cases where a previously used coordinate system differs.

o curve() with unspecified 'from', 'to' and 'xlim' now reuses the previous x limits, and not slightly larger ones.

o It was intended that R code filenames in packages should start with an ASCII letter or digits (and R CMD INSTALL uses that), but the test used in R CMD build ([A-Za-z0-9]) was locale-specific (and excluded t to y in Estonian, for example). (PR#10351)

o 'R CMD build' could misbehave when faced with files with CRLF line endings and no line ending on the final line of the file, removing the last byte of the file.

o DF[i, j] failed in 2.6.0 if j was a logical vector selecting a single column.

o Unix x11() would fail if a valid 'display' was specified but DISPLAY was unset. (PR#10379)

o postscript() was not always ignoring .Postscript.Options in the workspace (where it should not have occurred).

o help.search() would give an error if it found a badly installed package, even if 'package' was not specified.

o tclServiceMode() (package tcltk) now works under Unix-alikes. (Although documented, it used only to work under Windows.)

o As Mac OS X 10.5.0 comes with incompatible /bin/sh shell, we force SHELL=/bin/bash (which is ok) in that case. [Only for 2.6.x: another solution is used in 2.7.0.]

o Deliberately using malformed source attributes no longer causes deparsing/printing of functions to crash R. (PR#10437)

o R CMD check and R CMD INSTALL now work with (some) directory names containing spaces.

o choose(n, k) gave incorrect values for negative n and small k.

o plot.ts(x,y) could use wrong default labels; fixed thanks to Antonio, Fabio di Narzo.

o reshape() got column names out of sync with contents in some cases; found by Antonio, Fabio Di Narzo.

o ar(x) for short 'x' (i.e. length <= 10) could fail because the default 'order.max' was >= length(x) which is non-sensical.

o Keyboard events in getGraphicsEvent() could cause stack imbalance errors (PR#10453)

Version 2.6.0 | Release Date: 2007-10-02 | Download



o integrate(), nlm(), nlminb(), optim(), optimize() and uniroot()
now have '...' much earlier in their argument list. This
reduces the chances of unintentional partial matching but
means that the later arguments must be named in full.

o The default type for nchar() is now "chars". This is almost
always what was intended, and differs from the previous default
only for non-ASCII strings in a MBCS locale. There is a new
argument 'allowNA', and the default behaviour is now to throw
an error on an invalid multibyte string if type="chars" or

o Connections will be closed if there is no R object referring to
them. A warning is issued if this is done, either at garbage
collection or if all the connection slots are in use.


o abs(), sign(), sqrt(), floor(), ceiling(), exp() and the gamma,
trig and hyperbolic trig functions now only accept one
argument even when dispatching to a Math group method (which
may accept more than one argument for other group members).

o abbreviate() gains a 'method' argument with a new option
"both.sides" which can make shorter abbreviations.

o aggregate.data.frame() no longer changes the group variables
into factors, and leaves alone the levels of those which are
factors. (Inter alia grants the wish of PR#9666.)

o The default 'max.names' in all.names() and all.vars() is now
-1 which means unlimited. This fixes PR#9873.

o as.vector() and the default methods of as.character(),
as.complex(), as.double(), as.expression(), as.integer(),
as.logical() and as.raw() no longer duplicate in most cases
where the object is unchanged. (Beware: some code has been
written that invalidly assumes that they do duplicate, often
when using .C/.Fortran(DUP=FALSE).)

o as.complex(), as.double(), as.integer(), as.logical() and
as.raw() are now primitive and internally generic for
efficiency. They no longer dispatch on S3 methods for
as.vector() (which was never documented). as.real() and
as.numeric() remain as alternative names for as.double().

expm1(), log(), log1p(), log2(), log10(), gamma(), lgamma(),
digamma() and trigamma() are now primitive. (Note that logb()
is not.)

The Math2 and Summary groups (round, signif, all, any, max, min,
summ, prod, range) are now primitive.

See under METHODS PACKAGE below for some consquences for S4 methods.

o apropos() now sorts by name and not by position on the search

o attr() gains an 'exact = TRUE' argument to disable partial

o bxp() now allows 'xlim' to be specified. (PR#9754)

o C(f, SAS) now works in the same way as C(f, treatment), etc.

o chol() is now generic.

o dev2bitmap() has a new option to go via PDF and so allow
semi-transparent colours to be used.

o dev.interactive() regards devices with the displaylist enabled
as interactive, and packages can register the names of their
devices as interactive via deviceIsInteractive().

o download.packages() and available.packages() (and functions
which use them) now support in 'repos' or 'contriburl' either
file: plus a general path (including drives on a UNC path on
Windows) or a file:/// URL in the same way as url().

o dQuote() and sQuote() are more flexible, with rendering
controlled by the new option 'useFancyQuotes'. This includes
the ability to have TeX-style rendering and directional quotes
(the so-called 'smart quotes') on Windows. The default is to
use directional quotes in UTF-8 locales (as before) and in the
Rgui console on Windows (new).

o duplicated() and unique() and their methods in base gain an
additional argument 'fromLast'.
o fifo() no longer has a default 'description' argument.

fifo("") is now implemented, and works in the same way as file("").

o file.edit() and file.show() now tilde-expand file paths on all
interfaces (they used to on some and not others).

o The find() argument is now named 'numeric' and not 'numeric.':
the latter was needed to avoid warnings about name clashes
many years ago, but partial matching was used.

o stats:::.getXlevels() confines attention to factors since some
users expected R to treat unclass(<a factor>) as a numeric

o grep(), strsplit() and friends now warn if incompatible sets
of options are used, instead of silently using the documented

o gsub()/sub() with perl = TRUE now preserves attributes from the
argument x on the result.

o is.finite() and is.infinite() are now S3 and S4 generic.

o jpeg(), png(), bmp() (Windows), dev2bitmap() and bitmap() have
a new argument 'units' to specify the units of 'width' and

o levels() is now generic (levels<- has been for a long time).

o Loading serialized raw objects with load() is now considerably

o New primitive nzchar() as a faster alternative to
nchar(x) > 0 (and avoids having to convert to wide chars in
a MBCS locale and hence consider validity).

o The way old.packages() and hence update.packages() handle
packages with different versions in multiple package
repositories has been changed. The first package encountered
was selected, now the one with highest version number.

o optim(method = "L-BFGS-B") now accepts zero-length parameters,
like the other methods. Also, method = "SANN" no longer
attempts to optimize in this case.

o New options 'showWarnCalls' and 'showErrorCalls' to give a
concise traceback on warnings and errors. showErrorCalls=TRUE
is the default for non-interactive sessions. Option
'showNCalls' controls how abbreviated the call sequence is.

o New options 'warnPartialMatchDollar', 'warnPartialMatchArgs'
and 'warnPartialMatchAttr' to help detect the unintended use
of partial matching in $, argument matching and attr()

o A device named as a character string in options(device =) is now
looked for in the grDevices name space if it is not visible
from the global environment.

o pmatch(x, y, duplicates.ok = TRUE) now uses hashing and so is
much faster for large x and y when most matches are exact.

o qr() is now generic.

o It is now a warning to have an non-integer object for
.Random.seed: this indicates a user had been playing with it,
and it has always been documented that users should only save
and restore it.

o New higher-order functions Reduce(), Filter() and Map().

o [g]regexpr() gain an 'ignore.case' argument for consistency with
grep(). (This does change the positional matching
of arguments, but no instances of positional matching beyond
the second were found.)

o relist() utility, an S3 generic with several methods, providing
an 'inverse' for unlist(); thanks to a code proposal from
Andrew Clausen.

o require() now returns invisibly.

o The interface to reshape() has been revised, allowing some
simplified forms that did not work before, and somewhat
improved error handling. A new argument 'sep' has been
introduced to replace simple usages of 'split' (the old
features are retained).

o rmultinom() uses a high-precision accumulator where available,
and so is more likely to give the same result on different
platforms (although it is still possible to get different
results, and the result may differ from previous versions of R).

o row() and col() now work on matrix-like objects such as data
frames, not just matrices.

o Rprof() allows smaller values of 'interval' on machines that
support it: for example modern Linux systems support
interval = 0.001.

o sample() now requires its first argument 'x' to be numeric
(in the sense of is.numeric()) as well as of length 1 and >= 1
before it is regarded as shorthand for 1:x.

o sessionInfo() now provides details about package name spaces
that are loaded but not attached. The output of sessionInfo
has been improved to make it easier to read when it is
inadvertently wrapped after being pasted into an email

o setRepositories() has a new argument 'ind' to allow selections
to be made programmatically.

o showMethods() has a "smart" default for 'inherited' such that
showMethods(<genfun>, incl = TRUE) becomes a useful short cut.

o sprintf() no longer has a output string length limit.

o storage.mode<- is now primitive, and hence makes fewer copies
of an object (none if the mode is unchanged). It is a little
less general than mode<-, which remains available. (See also
the entry under DEFUNCT below.)

o sweep() gains an argument 'check.margin = TRUE' which warns
about mismatched dimensions.

o The mathematical annotation facility (plotmath) now recognises
a symbol() function which forces the font to be a symbol font.
This allows access to all characters in the Adobe Symbol
encoding within plotmath expressions.

o For OSes that cannot unset environment variables, Sys.unsetenv()
sets the value to "", with a warning.

o New function Sys.which(), an interface to 'which' on
Unix-alikes and an emulation on Windows.

o On Unix-alikes, system(, intern = TRUE) reports on very long
lines that may be truncated, giving the line number of the
content being read.

o termplot() has a default for 'ask' that uses dev.interactive().

It allows 'ylim' to be set, or computed to cover all the
plots to be made (the new default) or computed for each plot
(the previous default).

o uniroot(f, *) is slightly faster for non-trivial f() because it
computes f(lower) and f(upper) only once, and it has new optional
arguments 'f.lower' and 'f.upper' by which the caller can pass these.

o unlink() is now internal, using common POSIX code on all platforms.

o unsplit() now works with lists of dataframes.

o The vcov() methods for classes "gls" and "nlme" have migrated to
package 'nlme'.

o vignette() has a new argument 'all' to choose between showing
vignettes in attached packages or in all installed packages.

o New function within(), which is like with(), except that it
returns modified versions back of lists and data frames.

o X11, postscript() (and hence bitmap()), xfig(), jpeg(), png()
and the Windows devices win.print(), win.metafile() and bmp()
now warn (once at first use) if semi-transparent colours are
used (rather than silently treating them as fully

o New function xspline() to provide base graphics support of
X-splines (cf grid.xspline).

o New function xyTable() does the 2D gridding "computations" used by

o Rd conversion to HTML and CHM now makes use of classes, which
are set in the stylesheets. Editing R.css will change the
styles used for \env, \option, \pkg etc. (CHM styles are set
at compilation time.)

o The documented arguments of '%*%' have been changed to be x
and y, to match S and the implicit S4 generic.

o If members of the Ops group (the arithmetic, logical and
comparison operators) and '%*%' are called as functions,
e.g. '>'(x, y), positional matching is always used. (It used
to be the case that positional matching was used for the
default methods, but names would be matched for S3 and S4
methods and in the case of '!' the argument name differed
between S3 and S4 methods.)

o Imports environments of name spaces are named (as
"imports:foo"), and so are known e.g. to environmentName().

o Package 'stats4' uses lazy-loading not SaveImage (which is now

o Installing help for a package now parses the .Rd file only
once, rather than once for each type.

o PCRE has been updated to version 7.2.

o bzip2 has been updated to version 1.0.4.

o gettext has been updated to version 0.16.1.

o There is now a global CHARSXP cache, R_StringHash. CHARSXPs
are no longer duplicated and must not be modified in place.
Developers should strive to only use mkChar (and mkString) for
creating new CHARSXPs and avoid use of allocString. A new
macro, CallocCharBuf, can be used to obtain a temporary char
buffer for manipulating character data. This patch was
written by Seth Falcon.

o The internal equivalents of as.complex, as.double, as.integer
and as.logical used to handle length-1 arguments now accept
character strings (rather than report that this is

o Lazy-loading a package is now substantially more efficient (in
memory saved and load time).

o Various performance improvements lead to a 45% reduction
in the startup time without 'methods' (and one-sixth with -
'methods' now takes 75% of the startup time of a default session).

o The [[ subsetting operator now has an argument 'exact' that
allows programmers to disable partial matching (which will in
due course become the default). The default value is exact=NA
which causes a warning to be issued when partial matching
occurs. When exact = TRUE, no partial matching will be
performed. When exact = FALSE, partial matching can occur and
no warning will be issued. This patch was written by Seth

o Many of the C-level warning / error messages (e.g. from
subscripting) have been re-worked to give more detailed
information on either the location or the cause of the

o The S3 and S4 Math groups have been harmonized. Functions
log1p(), expm1(), log10() and log2() are members of the S3
group, and sign(), log1p(), expm1(), log2(), cummax(),
cummin(), digamma(), trigamma() and trunk() are members of the
S4 group. gammaCody() is no longer in the S3 Math group.
They are now all primitive.

o The initialization of the random-number stream makes use of the
sub-second part of the current time where available.

Initialization of the 1997 Knuth TAOCP generator is now done
in R code, avoiding some C code whose licence status has been

o The reporting of syntax errors has been made more user-


o Packages using 'methods' have to have been installed in R 2.4.0
or later (when various internal representations were changed).

o Internally generic primitives no longer dispatch S4 methods on
S3 objects.

o load() and restoring a workspace attempt to detect and warn on
the loading of pre-2.4.0 S4 objects.

o Making functions primitive changes the semantics of S4
dispatch: these no longer dispatch on classes based on types
but do dispatch whenever the function in the base name space is

This applies to as.complex(), as.integer(), as.logical(),
as.numeric(), as.raw(), expm1(), log(), log1p(), log2(),
log10(), gamma(), lgamma(), digamma() and trigamma(), as
well as the Math2 and Summary groups.

Because all members of the group generics are now primitive,
they are all S4 generic and setting an S4 group generic does
at last apply to all members and not just those already made
S4 generic.

as.double() and as.real() are identical to as.numeric(), and
now remain so even if S4 methods are set on any of them.
Since 'as.numeric' is the traditional name used in S4,
currently methods must be exported from a NAMESPACE for
'as.numeric' only.

o The S4 generic for '!' has been changed to have signature (x)
(was (e1)) to match the documentation and the S3 generic.
setMethod() will fix up methods defined for (e1), with a

o The "structure" S4 class now has methods that implement the
concept of structures as described in the Blue Book--that
element-by-element functions and operators leave structure
intact unless they change the length. The informal behavior
of R for vectors with attributes was inconsistent.

o The implicitGeneric() function and relatives have been added to
specify how a function in a package should look when methods are
defined for it. This will be used to ensure that generic versions
of functions in R core are consistent. See ?implicitGeneric.

o Error messages generated by some of the functions in the methods
package provide the name of the generic to provide more
contextual information.

o It is now possible to use setGeneric(useAsDefault = FALSE) to
define a new generic with the name of a primitive function
(but having no connection with the primitive).


o $ on an atomic vector now gives a warning that it is 'invalid'.
It remains deprecated, but may be removed in R >= 2.7.0.

o storage.mode(x) <- "real" and storage.mode(x) <- "single" are
defunct: use instead storage.mode(x) <- "double" and
mode(x) <- "single".

o In package installation, SaveImage: yes is deprecated in
favour of LazyLoad: yes.

o seemsS4Object (methods package) is deprecated in favour of isS4().

o It is planned that [[exact=TRUE]] will become the default in
R 2.7.0.


o checkS3methods() (invoked by R CMD check) now checks the
arguments of methods for primitive members of the S3 group

o R CMD check now does a recursive copy on the 'tests' directory.

o R CMD check now warns on non-ASCII .Rd files without an
\encoding field, rather than just on ones that are definitely
not from an ISO-8859 encoding. This agrees with the
long-standing stipulation in 'Writing R Extensions', and
catches some packages with UTF-8 man pages.

o R CMD check now warns on DESCRIPTION files with a non-portable
Encoding field, or with non-ASCII data and no Encoding field.

o R CMD check now loads all the 'Suggests' and 'Enhances'
dependencies to reduce warnings about non-visible objects, and
also emulates standard functions (such as shell()) on
alternative R platforms.

o R CMD check now (by default) attempts to latex the vignettes
rather than just weave and tangle them: this will give a NOTE
if there are latex errors.

o R CMD check computations no longer ignore Rd \usage entries for
functions for extracting or replacing parts of an object, so S3
methods should use the appropriate \method{} markup.

o R CMD check now checks for CR (as well as CRLF) line endings in
C/C++/Fortran source files, and for non-LF line endings in
Makefile[.in] and Makevars[.in] in the package 'src'
directory. R CMD build will correct non-LF line endings in
source files and in the make files mentioned.

o Rdconv now warns about unmatched braces rather than silently
omitting sections containing them. (Suggestion by Bill
Dunlap, PR#9649)

Rdconv now renders (rather than ignores) \var{} inside \code{}
markup in latex conversion.

R CMD Rdconv gains a --encoding argument to set the default
encoding for conversions.

o The list of CRAN mirrors now has a new (manually maintained)
column "OK" which flags mirrors that seem to be OK, only those
are used by chooseCRANmirror(). The now exported function
getCRANmirrors() can be used to get all known mirrors or only
the ones that are OK.

o R CMD SHLIB gains arguments --clean and --preclean to clean up
intermediate files after and before building.

o R CMD config now knows about FC and FCFLAGS (used for F9x

o R CMD Rdconv now does a better job of rendering quotes in
titles in HTML, and \sQuote and \dQuote into text on Windows.


o New utility function alloc3DArray similar to allocMatrix.

o The entry point R_seemsS4Object in Rinternals.h has not been
needed since R 2.4.0 and has been removed. Use IS_S4_OBJECT

o Applications embedding R can use R_getEmbeddingDllInfo() to
obtain DllInfo for registering symbols present in the
application itself.

o The instructions for making and using standalone libRmath have
been moved to the R Installation and Administration manual.

o CHAR now returns (const char *) since CHARSXPs should no
longer be modified in place. This change allows compilers to
warn or error about improper modification. Thanks to Herve
Pages for the suggestion.

o acopy_string is a (provisional) new helper function that
copies character data and returns a pointer to memory
allocated using R_alloc. This can be used to create a copy of
a string stored in a CHARSXP before passing the data on to a
function that modifies its arguments.

o asLogical, asInteger, asReal and asComplex now accept STRSXP
and CHARSXP arguments, and asChar accepts CHARSXP.

o New R_GE_str2col() exported via R_ext/GraphicsEngine.h for
external device developers.

o doKeybd and doMouseevent are now exported in GraphicsDevice.h.

o R_alloc now has first argument of type 'size_t' to support
64-bit platforms (e.g. Win64) with a 32-bit 'long' type.

o The type of the last two arguments of getMatrixDimnames (non-API
but mentioned in R-exts.texi and in Rinternals.h) has been
changed to 'const char **' (from char **).

o R_FINITE now always resolves to the function call R_finite in
packages (rather than sometimes substituting isfinite). This
avoids some issues where R headers are called from C++ code
using features tested on the C compiler.

o The advice to include R headers from C++ inside extern "C" {}
has been changed. It is nowadays better not to wrap the
headers, as they include other headers which on some OSes
should not be wrapped.

o Rinternals.h no longer includes a substantial set of C headers.
All but ctype.h and errno.h are included by R.h which is supposed
to be used before Rinternals.h.

o Including C system headers can be avoided by defining NO_C_HEADERS
before including R headers. This is intended to be used from
C++ code, and you will need to include C++ equivalents such as
<cmath> before the R headers.


o The 'test-Lapack' test is now part of 'make check'.

o The 'stat' system call is now required, along with 'opendir'
(which had long been used but not tested for). ('make check'
would have failed in earlier versions without these calls.)

o 'evince' is now considered as a possible PDF viewer.

o 'make install-strip' now also strips the DLLs in the standard

o Perl 5.8.0 (released in July 2002) or later is now required.
(R 2.4.0 and later have in fact required 5.6.1 or later.)

o The C function 'finite' is no longer used: we expect a C99
compiler which will have 'isfinite'. (If that is missing, we
test separately for NaN, Inf and -Inf.)

o A script/executable 'texi2dvi' is now required on Unix-alikes:
it is part of the texinfo distribution.

o Files texinfo.tex and txi-en.tex are no longer supplied in
doc/manual (as the latest versions have an incompatible
licence). You will need to ensure that your texinfo and/or
TeX installations supply them.

o wcstod is now required for MBCS support.

o There are some experimental provisions for building on Cygwin.


o The encoding declared in the DESCRIPTION file is now used as
the default encoding for .Rd files.

o A standard for specifying package license information in the
DESCRIPTION License field was introduced, see 'Writing R
Extensions'. In addition, files LICENSE or LICENCE in a package
top-level source directory are now installed (so putting copies
into the 'inst' subdirectory is no longer necessary).

o install.packages() on a Unix-alike now updates
doc/html/packages.html only if packages are installed to
.Library (by that exact name).

o R CMD INSTALL --clean now runs SHLIB --clean to do the clean
up (unless there is a src/Makefile), and this will remove
$(OBJECTS) (which might have been redefined in Makevars).

R CMD INSTALL --preclean cleans up the sources after a
previous installation (as if that had used --clean) before
attempting to install.

R CMD INSTALL will now run R CMD SHLIB in the 'src' directory
if src/Makevars is present, even if there are no source files
with known extensions.

o If there is a file src/Makefile, src/Makevars is now ignored
(it could be included by src/Makefile if desired), and it is
preceded by etc/Makeconf rather than share/make/shlib.mk.
Thus the makefiles read are R_HOME/etc/Makeconf, src/Makefile
in the package and then any personal Makevars files.

o R CMD SHLIB used to support the use of 'OBJS' in Makevars, but
this was changed to 'OBJECTS' in 2001. The undocumented
alternative of 'OBJS' has finally been removed.

o R CMD check no longer issues a warning about no data sets
being present if a lazyload db is found (as determined by the
presence of Rdata.rdb, Rdata.rds, and Rdata.rdx in the 'data'


o charmatch() and pmatch() used to accept non-integer values for
'nomatch' even though the return value was documented to be
integer. Now 'nomatch' is coerced to integer (rather than the
result being coerced to the type of 'nomatch').

o match.call() no longer 'works' outside a function unless
'definition' is supplied. (Under some circumstances it used
to 'work', matching itself.)

o The formula methods of boxplot, cdplot, pairs and spineplot
now attach 'stats' so that model.frame() is visible where
they evaluate it.

o Date-time objects are no longer regarded as numeric by

o methods("Math") did not work if 'methods' was not attached.

o readChar() read an extra empty item (or more than one) beyond
the end of the source; in some conditions it would terminate
early when reading an item of length 0.

o Added a promise evaluation stack so interrupted promise
evaluations can be restarted.

o R.version[1:10] now nicely prints.

o In the methods package, prototypes are now inherited for the
.Data "slot"; i.e., for classes that contain one of the basic
data types.

o <data frame>[[i, j]] now works if 'i' is character.

o write.dcf() no longer writes NA fields (PR#9796), and works
correctly on empty descriptions.

o pbeta(x, log.p = TRUE) now has improved accuracy in many cases,
and so have functions depending on it such as pt(), pf() and

o mle() had problems with the L-BFGS-B in the no-parameter case
and consequentially also when profiling 1-parameter models
(fix thanks to Ben Bolker).

o Two bugs fixed in methods that in involve the "..." argument in
the generic function: previously failed to catch methods that
just dropped the "..."; and use of callGeneric() with no arguments
failed in some circumstances when "..." was a formal argument.

o sequence() now behaves more reasonably, although not
back-compatibly for zero or negative input.

o nls() now allows more peculiar but reasonable ways of being called,
e.g., with data=list(<uneven lengths>) or a model without variables.

o match.arg() was not behaving as documented when
several.ok=TRUE (PR#9859), gave spurious warnings when 'arg'
had the wrong length and was incorrectly documented (exact
matches are returned even when there is more than one partial

o The data.frame method for split<-() was broken.

o The test for -D__NO_MATH_INLINES was badly broken and returned
true on all non-glibc platforms and false on all glibc ones
(whether they were broken or not).

o LF was missing after the last prompt when --quiet was used without
--slave. Use --slave when no final LF is desired.

o Fixed bug in initialisation code in 'grid' package for
determining the boundaries of shapes. Problem reported
by Hadley Wickham; symptom was error message:
"Polygon edge not found".

o str() is no longer slow for large POSIXct objects. Its output
is also slightly more compact for such objects; implementation
via new optional argument 'give.head'.

o strsplit(*, fixed=TRUE), potentially iconv() and internal string
formatting is now faster for large strings, thanks to report
PR#9902 by John Brzustowski.

o de.restore() gave a spurious warning for matrices (Ben Bolker)

o plot(fn, xlim=c(a,b)) would not set "from" and "to" properly
when plotting a function. The argument lists to curve() and
plot.function() have been modified slightly as part of the

o julian() was documented to work with POSIXt origins, but did
not work with POSIXlt ones. (PR#9908)

o Dataset HairEyeColor has been corrected to agree with
Friendly (2000): the change involves the breakdown of the
Brown hair / Brown eye cell by Sex, and only totals over Sex
are given in the original source.

o Trailing spaces are now consistently stripped from \alias{}
entries in .Rd files, and this is now documented. (PR#9915)

o .find.packages(), packageDescription() and sessionInfo()
assumed that attached environments named "package:foo" were
package environments, although misguided users could use such
a name in attach().

o spline() and splinefun() with method = "periodic" could return
incorrect results when length(x) was 2 or 3.

o getS3method() could fail if the method name contained a regexp
metacharacter such as "+".

o help(<a character vector>) now uses the name and not the
value of the vector unless it has length exactly one, so
e.g. help(letters) now gives help on 'letters'.
(Related to PR#9927)

o Ranges in chartr() now work better in CJK locales, thanks to
Ei-ji Nakama.

Version 2.12.0 | Release Date: 2007-01-01 | Download
No changes specified
Version 2.4.1 | Release Date: 2006-12-18 | Download


o The extraction of info from Subversion for an SVN checkout now
also works for svn >= 1.4.0. However, on Windows the 'Last
Changed Date' will be in the local timezone, and not in GMT as

o configure uses code borrowed from autoconf 2.60 to try harder to
ensure that a C99-compliant compiler is used. (It does so by
appending to CC.) This avoids problems with systems such as FC5
which override CFLAGS and thereby lose flags such as -std=gnu99.


o rainbow(), heat.colors(), terrain.colors(), topo.colors() and
cm.colors() all gain an 'alpha' argument to be passed to hsv().

o dput() will give an incorrect representation of the row names
of a data frame with integer row names. This is now corrected
when the object is recreated.


o Using STRICT_R_HEADERS applies to more reported clashes with
Windows headers, including Calloc and Realloc. These and
Free need to be prefixed by R_ when STRICT_R_HEADERS is defined.


o The previously undocumented behaviour of structure() in adding a
class when specifying "tsp" or "levels" attributes is now
deprecated (with a warning).


o Fixed warning() to use .dfltWarn intead of .dfltStop for default
handling (PR#9274).

o R would slow down when the product of the length of a vector and
the length of a character vector used to subset it exceeded 2^31.

o merge() now allows zero-row data frames.

o add1.lm() had been broken by other changes for weighted fits.

o axis.POSIXct() would sometimes give the wrong labels.

o Help for a method call would fail. (PR#9291)

o gzfile() returned an object of class "file" not "gzfile". (PR#9271)

o load()ing from a connection had a logic bug in when it closed
the connection. (PR#9271)

o The lowess() algorithm is unstable if the MAD of the residuals
becomes (effectively) zero: R now terminates the iterations at
that point. (This may result in quite different answers.)

The 'delta' argument was incorrectly documented. (PR#9264)

o abbreviate() would only work for strings of up to 8191 bytes,
but this was not checked. Now longer strings are errors.

o Drawing X11 rotated text was buggy for VERY small (negative)
angle of rotation. Reported by Ben Bolker. (PR#9301)

o The X11 data editor would crash in an MBCS locale if R was
compiled with FC's CFLAGS that add buffer overflow and
stack-smashing detection.

o rect() was not accepting border=NA in some cases involving

o Fixes to S4 group generics to ensure that the correct number of
active arguments are in the signature of the group and all
members. Also a fix to keep the 'groupMembers' slot up to date.

o S4 group generic "Logic" (with '&', '|', but not '!') has been
created, following the green book (apart from '!').

o removeClass() now takes care to remove any subclass references
to the deleted class.

o mle() (in stats4) might not have worked as intended when the
order of parameters in 'start' differed from that in the
log-likelihood. (PR#9313)

o dotchart() now properly restores par() settings after itself.

o system() on Mac OS X was blocking arbitrary signals during the
call although only SIGPROF was meant to be blocked.

o methods cached via callNextMethod() and (sometimes) as() were
being cached as directly specified although in fact they were
inherited. Caused problems in later search for inherited methods.

o str() works properly for method definitions and other S4-classed
function objects.

o JAVA_LIBS are now set correctly on MacOS X.

o Fix null-termination issue suspected of causing crash with Fedora
Extra RPMS (PR#9339, Justin Harrington, analysis and fix from Bill

o Namespaces restored via a saved session silently failed to cache
their methods because the methods package was not yet
attached. Fixed by attaching methods before restoring data.

o rbind()ing a list to a data frame generated invalid row names,
which were an error in 2.4.0. (PR#9346)

o boxplot.stats(x) now returns the correct minimum instead of an
error for x <- c(1,Inf,Inf,Inf), and hence boxplot(x) "works".

o promptClass() now uses \linkS4class{<ClassName>} instead of
of \link{<ClassName>-class}.

o gc() no longer reports nonsense values for the number of used
Vcells if the true value exceeds 2^31 (and hence over 16Gb of
heap is in use): it now reports NA. (PR#9345)

o rapply() now detects more user errors in supplying arguments.

o boxplot() was ignoring argument 'boxfill'. (PR#9352)

o plot.lm(which = 6, id.n = 0) did not work. (PR#9333)

o .deparseOpts("delayPromises") was not matching the C code,
returning 64 rather than 32.

o bxp() could use partial matching on 'pars' when finding
defaults for some of its parameters, e.g. a setting of 'cex.axis'
in 'pars' or inline was used to set a default for 'outcex'.

o acf() now allows lag.max = 0 except when type="partial", and
forces the lag 0 autocorrelation to 1. (PR#9360)

o hist(*, include.lowest=., right=., plot=FALSE) does not warn
anymore, (PR#9356) and more.

o Some bugs in caching superclass/subclass relations and in
removing those relations on detach and on removeClass() have
been fixed.

o readBin() could return one too many strings if 'n' was an
over-estimate. (PR#9361)

o A request for an opaque colour in the pdf() device after a
translucent one did not set the transparency back to opaque in

Semi-transparent background colours were not being plotted on
the pdf() device.

o plot.lm(which=5) in the case of constant leverage re-ordered
the factor levels but not the residuals, so the labelling by
factor level was often incorrect.

o packBits() was not accepting a logical argument. (PR#9374)

o make install was omitting doc/FAQ and doc/RESOURCES.

o A two-sample t.test(x, y, var.equal=TRUE) did not allow one of the
groups to be of size one.

o The "ts" method for print() failed on some corrupted objects
of class "ts", e.g. those without a "tsp" attribute.

o structure() reordered the "class" value given if there was a
"tsp" value specified.

o pairs() now does pass appropriate parts of '...' to the
'diag.panel' argument. (PR#9384)

o plot.lm() was using an incorrect estimate of dispersion for
some GLMs (including family=binomial and family=poisson).

o Subsetting operators were setting R_Visible too early, so
assignments in arguments could make the result invisible.

o The tk-GUI was displaying a warning due to an extra comma in
the list of manuals (PR#9396)

o packageDescription() now gives an explicit error on a corrupt

o There was a scoping issue with tcltk callbacks given as
unevaluated expressions. This has only been partially fixed, a
complete fix probably requires redesign.

o trace() had its return value documented incorrectly and was
sometimes visible when it should not have been.

o pchisq() would sometimes use the wrong tail when calculating
non-central probabilities with lower.tail = FALSE. (PR#9406)

o rm() could remove the wrong objects when passed an expression.
(PR#9399) Now only names are allowed in the '...' argument,
and the incorrect documentation of what happened with
character objects is corrected.

o url() was not supporting 'encoding' except on file:// URLs.