The ‘Changes in R’ article from the 2011-1 issue.
CHANGES IN R VERSION 2.13.0
SIGNIFICANT USER-VISIBLE CHANGES
replicate()
(by default) and vapply()
(always) now return a
higher-dimensional array instead of a matrix in the case where the
inner function value is an array of dimension \(\ge 2\).
Printing and formatting of floating point numbers is now using the
correct number of digits, where it previously rarely differed by a
few digits. (See “scientific” entry below.) This affects many
*.Rout.save
checks in packages.
NEW FEATURES
normalizePath()
has been moved to the base package (from
utils): This is so it can be used by library()
and friends.
It now does tilde expansion.
It gains new arguments winslash
(to select the separator on
Windows) and mustWork
to control the action if a canonical path
cannot be found.
The previously barely documented limit of 256 bytes on a symbol name
has been raised to 10,000 bytes (a sanity check). Long symbol names
can sometimes occur when deparsing expressions (for example, in
model.frame
).
reformulate()
gains a intercept
argument.
cmdscale(add = FALSE)
now uses the more common definition that
there is a representation in n-1
or less dimensions, and only
dimensions corresponding to positive eigenvalues are used. (Avoids
confusion such as PR#14397.)
Names used by c()
, unlist()
, cbind()
and rbind()
are marked
with an encoding when this can be ascertained.
R colours are now defined to refer to the sRGB color space.
The PDF, PostScript, and Quartz graphics devices record this fact. X11 (and Cairo) and Windows just assume that your screen conforms.
system.file()
gains a mustWork
argument (suggestion of Bill
Dunlap).
new.env(hash = TRUE)
is now the default.
list2env(envir = NULL)
defaults to hashing (with a suitably sized
environment) for lists of more than 100 elements.
text()
gains a formula method.
IQR()
now has a type
argument which is passed to quantile()
.
as.vector()
, as.double()
, etc., duplicate less when they leave
the mode unchanged but remove attributes.
as.vector(mode = "any")
no longer duplicates when it does not
remove attributes. This helps memory usage in matrix()
and
array()
.
matrix()
duplicates less if data
is an atomic vector with
attributes such as names (but no class).
dim(x) <- NULL
duplicates less if x
has neither dimensions nor
names (since this operation removes names and dimnames).
setRepositories()
gains an addURLs
argument.
chisq.test()
now also returns a stdres
component, for
standardized residuals (which have unit variance, unlike the Pearson
residuals).
write.table()
and friends gain a fileEncoding
argument, to
simplify writing files for use on other OSes (e.g. a spreadsheet
intended for Windows or Mac OS X Excel).
Assignment expressions of the form foo::bar(x) <- y
and
foo:::bar(x) <- y
now work; the replacement functions used are
foo::‘bar<-‘
and foo:::‘bar<-‘
.
Sys.getenv()
gains a names
argument so
Sys.getenv(x, names = FALSE)
can replace the common idiom of
as.vector(Sys.getenv())
. The default has been changed to not name
a length-one result.
Lazy loading of environments now preserves attributes and locked status. (The locked status of bindings and active bindings are still not preserved; this may be addressed in the future).
options("install.lock")
may be set to FALSE
so that
install.packages()
defaults to –no-lock
installs, or (on
Windows) to TRUE
so that binary installs implement locking.
sort(partial = p)
for large p
now tries Shellsort if quicksort
is not appropriate and so works for non-numeric atomic vectors.
sapply()
gets a new option simplify = "array"
which returns a
“higher rank” array instead of just a matrix when FUN()
returns a
dim()
length of two or more.
replicate()
has this option set by default, and vapply()
now
behaves that way internally.
aperm()
becomes S3 generic and gets a table
method which
preserves the class.
merge()
and as.hclust()
methods for objects of class
"dendrogram"
are now provided.
as.POSIXlt.factor()
now passes ...
to the character method
(suggestion of Joshua Ulrich).
The character method of as.POSIXlt()
now tries to find a format
that works for all non-NA
inputs, not just the first one.
str()
now has a method for class "Date"
analogous to that for
class "POSIXt"
.
New function file.link()
to create hard links on those file
systems (POSIX, NTFS but not FAT) that support them.
New Summary()
group method for class "ordered"
implements
min()
, max()
and range()
for ordered factors.
mostattributes<-()
now consults the "dim"
attribute and not the
dim()
function, making it more useful for objects (such as data
frames) from classes with methods for dim()
. It also uses
attr<-()
in preference to the generics name<-()
, dim<-()
and
dimnames<-()
. (Related to PR#14469.)
There is a new option "browserNLdisabled"
to disable the use of an
empty (e.g. via the ‘Return’ key) as a synonym for c
in
browser()
or n
under debug()
. (Wish of PR#14472.)
example()
gains optional new arguments character.only
and
give.lines
enabling programmatic exploration.
serialize()
and unserialize()
are no longer described as
‘experimental’. The interface is now regarded as stable, although
the serialization format may well change in future releases.
(serialize()
has a new argument version
which would allow the
current format to be written if that happens.)
New functions saveRDS()
and readRDS()
are public versions of the
‘internal’ functions .saveRDS()
and .readRDS()
made available
for general use. The dot-name versions remain available as several
package authors have made use of them, despite the documentation.
saveRDS()
supports compress = "xz"
.
Many functions when called with a not-open connection will now
ensure that the connection is left not-open in the event of error.
These include read.dcf()
, dput()
, dump()
, load()
, parse()
,
readBin()
, readChar()
, readLines()
, save()
, writeBin()
,
writeChar()
, writeLines()
, .readRDS()
, .saveRDS()
and
tools::parse_Rd()
, as well as functions calling these.
Public functions find.package()
and path.package()
replace the
internal dot-name versions.
The default method for terms()
now looks for a "terms"
attribute
if it does not find a "terms"
component, and so works for model
frames.
httpd()
handlers receive an additional argument containing the
full request headers as a raw vector (this can be used to parse
cookies, multi-part forms etc.). The recommended full signature for
handlers is therefore function(url, query, body, headers, ...)
.
file.edit()
gains a fileEncoding
argument to specify the
encoding of the file(s).
The format of the HTML package listings has changed. If there is more than one library tree, a table of links to libraries is provided at the top and bottom of the page. Where a library contains more than 100 packages, an alphabetic index is given at the top of the section for that library. (As a consequence, package names are now sorted case-insensitively whatever the locale.)
isSeekable()
now returns FALSE
on connections which have
non-default encoding
. Although documented to record if ‘in
principle’ the connection supports seeking, it seems safer to report
FALSE
when it may not work.
R CMD REMOVE
and remove.packages()
now remove file R.css
when
removing all remaining packages in a library tree. (Related to the
wish of PR#14475: note that this file is no longer installed.)
unzip()
now has a unzip
argument like zip.file.extract()
. This
allows an external unzip
program to be used, which can be useful
to access features supported by Info-ZIP’s unzip
version 6 which
is now becoming more widely available.
There is a simple zip()
function, as wrapper for an external zip
command.
bzfile()
connections can now read from concatenated bzip2
files
(including files written with bzfile(open = "a")
) and files
created by some other compressors (such as the example of PR#14479).
The primitive function c()
is now of type BUILTIN.
plot(<dendrogram>, .., nodePar=*)
now obeys an optional xpd
specification (allowing clipping to be turned off completely).
nls(algorithm="port")
now shares more code with nlminb()
, and is
more consistent with the other nls()
algorithms in its return
value.
xz
has been updated to 5.0.1 (very minor bugfix release).
image()
has gained a logical useRaster
argument allowing it to
use a bitmap raster for plotting a regular grid instead of polygons.
This can be more efficient, but may not be supported by all devices.
The default is FALSE
.
list.files()
/dir()
gains a new argument include.dirs()
to
include directories in the listing when recursive = TRUE
.
New function list.dirs()
lists all directories, (even empty ones).
file.copy()
now (by default) copies read/write/execute permissions
on files, moderated by the current setting of Sys.umask()
.
Sys.umask()
now accepts mode = NA
and returns the current
umask
value (visibly) without changing it.
There is a !
method for classes "octmode"
and "hexmode"
: this
allows xor(a, b)
to work if both a
and b
are from one of those
classes.
as.raster()
no longer fails for vectors or matrices containing
NA
s.
New hook "before.new.plot"
allows functions to be run just before
advancing the frame in plot.new
, which is potentially useful for
custom figure layout implementations.
Package tools has a new function compactPDF()
to try to reduce
the size of PDF files via qpdf
or gs
.
tar()
has a new argument extra_flags
.
dotchart()
accepts more general objects x
such as 1D tables
which can be coerced by as.numeric()
to a numeric vector, with a
warning since that might not be appropriate.
The previously internal function create.post()
is now exported
from utils, and the documentation for bug.report()
and
help.request()
now refer to that for create.post()
.
It has a new method = "mailto"
on Unix-alikes similar to that on
Windows: it invokes a default mailer via open
(Mac OS X) or
xdg-open
or the default browser (elsewhere).
The default for ccaddress
is now getOption("ccaddress")
which is
by default unset: using the username as a mailing address nowadays
rarely works as expected.
The default for options("mailer")
is now "mailto"
on all
platforms.
unlink()
now does tilde-expansion (like most other file
functions).
file.rename()
now allows vector arguments (of the same length).
The "glm"
method for logLik()
now returns an "nobs"
attribute
(which stats4::BIC()
assumed it did).
The "nls"
method for logLik()
gave incorrect results for zero
weights.
There is a new generic function nobs()
in package stats, to
extract from model objects a suitable value for use in BIC
calculations. An S4 generic derived from it is defined in package
stats4.
Code for S4 reference-class methods is now examined for possible errors in non-local assignments.
findClasses
, getGeneric
, findMethods
and hasMethods
are
revised to deal consistently with the package=
argument and be
consistent with soft namespace policy for finding objects.
tools::Rdiff()
now has the option to return not only the status
but a character vector of observed differences (which are still by
default sent to stdout
).
The startup environment variables , , and are now treated more consistently. In all cases an empty value is considered to be set and will stop the default being used, and for the last two tilde expansion is performed on the file name. (Note that setting an empty value is probably impossible on Windows.)
Using R –no-environ CMD
, R –no-site-file CMD
or
R –no-init-file CMD
sets environment variables so these settings
are passed on to child R processes, notably those run by INSTALL
,
check
and build
. R –vanilla CMD
sets these three options (but
not –no-restore
).
smooth.spline()
is somewhat faster. With cv=NA
it allows some
leverage computations to be skipped,
The internal (C) function scientific()
, at the heart of R’s
format.info(x)
, format(x)
, print(x)
, etc, for numeric x
, has
been re-written in order to provide slightly more correct results,
fixing PR#14491, notably in border cases including when
digits >= 16
, thanks to substantial contributions (code and
experiments) from Petr Savicky. This affects a noticable amount of
numeric output from R.
A new function grepRaw()
has been introduced for finding subsets
of raw vectors. It supports both literal searches and regular
expressions.
Package compiler is now provided as a standard package. See
?compiler::compile
for information on how to use the compiler.
This package implements a byte code compiler for R: by default the
compiler is not used in this release. See the ‘R Installation and
Administration Manual’ for how to compile the base and recommended
packages.
Providing an exportPattern
directive in a NAMESPACE file now
causes classes to be exported according to the same pattern, for
example the default from package.skeleton()
to specify all names
starting with a letter. An explicit directive to
exportClassPattern
will still over-ride.
There is an additional marked encoding "bytes"
for character
strings. This is intended to be used for non-ASCII strings which
should be treated as a set of bytes, and never re-encoded as if they
were in the encoding of the currrent locale: useBytes = TRUE
is
autmatically selected in functions such as writeBin()
,
writeLines()
, grep()
and strsplit()
.
Only a few character operations are supported (such as substr()
).
Printing, format()
and cat()
will represent non-ASCII bytes in
such strings by a \\xab
escape.
The new function removeSource()
removes the internally stored
source from a function.
"srcref"
attributes now include two additional line number values,
recording the line numbers in the order they were parsed.
New functions have been added for source reference access:
getSrcFilename()
, getSrcDirectory()
, getSrcLocation()
and
getSrcref()
.
Sys.chmod()
has an extra argument use_umask
which defaults to
true and restricts the file mode by the current setting of umask
.
This means that all the R functions which manipulate file/directory
permissions by default respect umask
, notably R CMD INSTALL
.
tempfile()
has an extra argument fileext
to create a temporary
filename with a specified extension. (Suggestion and initial
implementation by Dirk Eddelbuettel.)
There are improvements in the way Sweave()
and Stangle()
handle
non-ASCII vignette sources, especially in a UTF-8 locale: see
‘Writing R Extensions’ which now has a subsection on this topic.
factanal()
now returns the rotation matrix if a rotation such as
"promax"
is used, and hence factor correlations are displayed.
(Wish of PR#12754.)
The gctorture2()
function provides a more refined interface to the
GC torture process. Environment variables , , and can also be used
to control the GC torture process.
file.copy(from, to)
no longer regards it as an error to supply a
zero-length from
: it now simply does nothing.
rstandard.glm
gains a type
argument which can be used to request
standardized Pearson residuals.
A start on a Turkish translation, thanks to Murat Alkan.
.libPaths()
calls normalizePath(winslash = "/")
on the paths:
this helps (usually) present them in a user-friendly form and should
detect duplicate paths accessed via different symbolic links.
SWEAVE CHANGES
Sweave()
has options to produce PNG and JPEG figures, and to use a
custom function to open a graphics device (see ?RweaveLatex
).
(Based in part on the contribution of PR#14418.)
The default for Sweave()
is to produce only PDF figures (rather
than both EPS and PDF).
Environment variable can be used to supply defaults for existing or new options to be applied after the Sweave driver setup has been run.
The Sweave manual is now included as a vignette in the utils package.
Sweave()
handles keep.source=TRUE
much better: it could
duplicate some lines and omit comments. (Reported by John Maindonald
and others.)
C-LEVEL FACILITIES
Because they use a C99 interface which a C++ compiler is not
required to support, Rvprintf
and REvprintf
are only defined by
R_ext/Print.h
in C++ code if the macro R_USE_C99_IN_CXX
is
defined when it is included.
pythag
duplicated the C99 function hypot
. It is no longer
provided, but is used as a substitute for hypot
in the very
unlikely event that the latter is not available.
R_inspect(obj)
and R_inspect3(obj, deep, pvec)
are (hidden)
C-level entry points to the internal inspect
function and can be
used for C-level debugging (e.g., in conjunction with the p
command in gdb
).
Compiling R with –enable-strict-barrier
now also enables
additional checking for use of unprotected objects. In combination
with gctorture()
or gctorture2()
and a C-level debugger this can
be useful for tracking down memory protection issues.
UTILITIES
R CMD Rdiff
is now implemented in R on Unix-alikes (as it has been
on Windows since R 2.12.0).
R CMD build
no longer does any cleaning in the supplied package
directory: all the cleaning is done in the copy.
It has a new option –install-args
to pass arguments to
R CMD INSTALL
for –build
(but not when installing to rebuild
vignettes).
There is new option, –resave-data
, to call
tools::resaveRdaFiles()
on the data
directory, to compress
tabular files (.tab
, .csv
etc) and to convert .R
files to
.rda
files. The default, –resave-data=gzip
, is to do so in a way
compatible even with years-old versions of R, but better compression
is given by –resave-data=best
, requiring R >= 2.10.0.
It now adds a datalist
file for data
directories of more than
1Mb.
Patterns in .Rbuildignore
are now also matched against all
directory names (including those of empty directories).
There is a new option, –compact-vignettes
, to try reducing the
size of PDF files in the inst/doc
directory. Currently this tries
qpdf
: other options may be used in future.
When re-building vignettes and a inst/doc/Makefile
file is found,
make clean
is run if the makefile has a clean:
target.
After re-building vignettes the default clean-up operation will
remove any directories (and not just files) created during the
process: e.g. one package created a .R_cache
directory.
Empty directories are now removed unless the option
–keep-empty-dirs
is given (and a few packages do deliberately
include empty directories).
If there is a field BuildVignettes
in the package DESCRIPTION
file with a false value, re-building the vignettes is skipped.
R CMD check
now also checks for filenames that are
case-insensitive matches to Windows’ reserved file names with
extensions, such as nul.Rd
, as these have caused problems on some
Windows systems.
It checks for inefficiently saved data/*.rda
and data/*.RData
files, and reports on those large than 100Kb. A more complete check
(including of the type of compression, but potentially much slower)
can be switched on by setting environment variable to TRUE
.
The types of files in the data
directory are now checked, as
packages are still misusing it for non-R data files.
It now extracts and runs the R code for each vignette in a separate
directory and R process: this is done in the package’s declared
encoding. Rather than call tools::checkVignettes()
, it calls
tool::buildVignettes()
to see if the vignettes can be re-built as
they would be by R CMD build
. Option –use-valgrind
now applies
only to these runs, and not when running code to rebuild the
vignettes. This version does a much better job of suppressing output
from successful vignette tests.
The 00check.log
file is a more complete record of what is output
to stdout
: in particular contains more details of the tests.
It now check all syntactically valid Rd usage entries, and warns about assignments (unless these give the usage of replacement functions).
.tar.xz
compressed tarballs are now allowed, if tar
supports
them (and setting environment variable to internal
ensures so on
all platforms).
R CMD check
now warns if it finds inst/doc/makefile
, and
R CMD build
renames such a file to inst/doc/Makefile
.
INSTALLATION
Installing R no longer tries to find perl
, and R CMD
no longer
tries to substitute a full path for awk
nor perl
– this was a
legacy from the days when they were used by R itself. Because a
couple of packages do use awk
, it is set as the make
(rather
than environment) variable .
make check
will now fail if there are differences from the
reference output when testing package examples and if environment
variable is set to a true value.
The C99 double complex type is now required.
The C99 complex trigonometric functions (such as csin
) are not
currently required (FreeBSD lacks most of them): substitutes are
used if they are missing.
The C99 system call va_copy
is now required.
If environment variable is set during configuration (for example in
config.site
) it is used unchanged in file etc/ldpaths
rather
than being appended to.
configure
looks for support for OpenMP and if found compiles R
with appropriate flags and also makes them available for use in
packages: see ‘Writing R Extensions’.
This is currently experimental, and is only used in R with a single
thread for colSums()
and colMeans()
. Expect it to be more widely
used in later versions of R.
This can be disabled by the –disable-openmp
flag.
PACKAGE INSTALLATION
R CMD INSTALL –clean
now removes copies of a src
directory which
are created when multiple sub-architectures are in use. (Following a
comment from Berwin Turlach.)
File R.css
is now installed on a per-package basis (in the
package’s html
directory) rather than in each library tree, and
this is used for all the HTML pages in the package. This helps when
installing packages with static HTML pages for use on a webserver.
It will also allow future versions of R to use different stylesheets
for the packages they install.
A top-level file .Rinstignore
in the package sources can list (in
the same way as .Rbuildignore
) files under inst
that should not
be installed. (Why should there be any such files? Because all the
files needed to re-build vignettes need to be under inst/doc
, but
they may not need to be installed.)
R CMD INSTALL
has a new option –compact-docs
to compact any PDFs
under the inst/doc
directory. Currently this uses qpdf
, which
must be installed (see ‘Writing R Extensions’).
There is a new option –lock
which can be used to cancel the effect
of –no-lock
or –pkglock
earlier on the command line.
Option –pkglock
can now be used with more than one package, and is
now the default if only one package is specified.
Argument lock
of install.packages()
can now be use for Mac
binary installs as well as for Windows ones. The value "pkglock"
is now accepted, as well as TRUE
and FALSE
(the default).
There is a new option –no-clean-on-error
for R CMD INSTALL
to
retain a partially installed package for forensic analysis.
Packages with names ending in .
are not portable since Windows
does not work correctly with such directory names. This is now
warned about in R CMD check
, and will not be allowed in R 2.14.x.
The vignette indices are more comprehensive (in the style of
browseVignetttes()
).
DEPRECATED & DEFUNCT
require(save = TRUE)
is defunct, and use of the save
argument is
deprecated.
R CMD check –no-latex
is defunct: use –no-manual
instead.
R CMD Sd2Rd
is defunct.
The gamma
argument to hsv()
, rainbow()
, and rgb2hsv()
is
deprecated and no longer has any effect.
The previous options for R CMD build –binary
(–auto-zip
,
–use-zip-data
and –no-docs
) are deprecated (or defunct): use the
new option –install-args
instead.
When a character value is used for the EXPR
argument in
switch()
, only a single unnamed alternative value is now allowed.
The wrapper utils::link.html.help()
is no longer available.
Zip-ing data sets in packages (and hence R CMD INSTALL
options
–use-zip-data
and –auto-zip
, as well as the ZipData: yes
field
in a DESCRIPTION
file) is defunct.
Installed packages with zip-ed data sets can still be used, but a warning that they should be re-installed will be given.
The ‘experimental’ alternative specification of a name space via
.Export()
etc is now defunct.
The option –unsafe
to R CMD INSTALL
is deprecated: use the
identical option –no-lock
instead.
The entry point pythag
in Rmath.h
is deprecated in favour of the
C99 function hypot
. A wrapper for hypot
is provided for R 2.13.x
only.
Direct access to the "source"
attribute of functions is
deprecated; use deparse(fn, control="useSource")
to access it, and
removeSource(fn)
to remove it.
R CMD build –binary
is now formally deprecated:
R CMD INSTALL –build
has long been the preferred alternative.
Single-character package names are deprecated (and R is already
disallowed to avoid confusion in Depends:
fields).
BUG FIXES
drop.terms
and the [
method for class "terms"
no longer add
back an intercept. (Reported by Niels Hansen.)
aggregate
preserves the class of a column (e.g. a date) under some
circumstances where it discarded the class previously.
p.adjust()
now always returns a vector result, as documented. In
previous versions it copied attributes (such as dimensions) from the
p
argument: now it only copies names.
On PDF and PostScript devices, a line width of zero was recorded verbatim and this caused problems for some viewers (a very thin line combined with a non-solid line dash pattern could also cause a problem). On these devices, the line width is now limited at 0.01 and for very thin lines with complex dash patterns the device may force the line dash pattern to be solid. (Reported by Jari Oksanen.)
The str()
method for class "POSIXt"
now gives sensible output
for 0-length input.
The one- and two-argument complex maths functions failed to warn if NAs were generated (as their numeric analogues do).
Added .requireCachedGenerics
to the dont.mind
list for
library()
to avoid warnings about duplicates.
$<-.data.frame
messed with the class attribute, breaking any S4
subclass. The S4 data.frame
class now has its own $<-
method,
and turns dispatch on for this primitive.
Map()
did not look up a character argument f
in the correct
frame, thanks to lazy evaluation. (PR#14495)
file.copy()
did not tilde-expand from
and to
when to
was a
directory. (PR#14507)
It was possible (but very rare) for the loading test in
R CMD INSTALL
to crash a child R process and so leave around a
lock directory and a partially installed package. That test is now
done in a separate process.
plot(<formula>, data=<matrix>,..)
now works in more cases;
similarly for points()
, lines()
and text()
.
edit.default()
contained a manual dispatch for matrices (the
"matrix"
class didn’t really exist when it was written). This
caused an infinite recursion in the no-GUI case and has now been
removed.
data.frame(check.rows = TRUE)
sometimes worked when it should have
detected an error. (PR#14530)
scan(sep= , strip.white=TRUE)
sometimes stripped trailing spaces
from within quoted strings. (The real bug in PR#14522.)
The rank-correlation methods for cor()
and cov()
with
use = "complete.obs"
computed the ranks before removing missing
values, whereas the documentation implied incomplete cases were
removed first. (PR#14488)
They also failed for 1-row matrices.
The perpendicular adjustment used in placing text and expressions in
the margins of plots was not scaled by par("mex")
. (Part of
PR#14532.)
Quartz Cocoa device now catches any Cocoa exceptions that occur during the creation of the device window to prevent crashes. It also imposes a limit of \(144 \text{ft}^2\) on the area used by a window to catch user errors (unit misinterpretation) early.
The browser (invoked by debug()
, browser()
or otherwise) would
display attributes such as "wholeSrcref"
that were intended for
internal use only.
R’s internal filename completion now properly handles filenames with
spaces in them even when the readline library is used. This resolves
PR#14452 provided the internal filename completion is used (e.g., by
setting rc.settings(files = TRUE)
).
Inside uniroot(f, ...)
, -Inf
function values are now replaced by
a maximally negative value.
rowsum()
could silently over/underflow on integer inputs (reported
by Bill Dunlap).
as.matrix()
did not handle "dist"
objects with zero rows.
CHANGES IN R VERSION 2.12.2 patched
NEW FEATURES
max()
and min()
work harder to ensure that NA
has precedence
over NaN
, so e.g. min(NaN, NA)
is NA
. (This was not previously
documented except for within a single numeric vector, where compiler
optimizations often defeated the code.)BUG FIXES
A change to the C function R_tryEval
had broken error messages in
S4 method selection; the error message is now printed.
PDF output with a non-RGB color model used RGB for the line stroke color. (PR#14511)
stats4::BIC()
assumed without checking that an object of class
"logLik"
has an "nobs"
attribute: glm()
fits did not and so
BIC()
failed for them.
In some circumstances a one-sided mantelhaen.test()
reported the
p-value for the wrong tail. (PR#14514)
Passing the invalid value lty = NULL
to axis()
sent an invalid
value to the graphics device, and might cause the device to
segfault.
Sweave()
with concordance=TRUE
could lead to invalid PDF files;
Sweave.sty
has been updated to avoid this.
Non-ASCII characters in the titles of help pages were not rendered properly in some locales, and could cause errors or warnings.
checkRd()
gave a spurious error if the \\href
macro was used.
CHANGES IN R VERSION 2.12.2
SIGNIFICANT USER-VISIBLE CHANGES
Complex arithmetic (notably z^n
for complex z
and integer n
)
gave incorrect results since R 2.10.0 on platforms without C99
complex support. This and some lesser issues in trignometric
functions have been corrected.
Such platforms were rare (we know of Cygwin and FreeBSD). However,
because of new compiler optimizations in the way complex arguments
are handled, the same code was selected on x86_64 Linux with
gcc 4.5.x
at the default -O2
optimization (but not at -O
).
There is a workaround for crashes seen with several packages on
systems using zlib 1.2.5
: see the INSTALLATION section.
NEW FEATURES
PCRE has been updated to 8.12 (two bug-fix releases since 8.10).
rep()
, seq()
, seq.int()
and seq_len()
report more often when
the first element is taken of an argument of incorrect length.
The Cocoa back-end for the quartz()
graphics device on Mac OS X
provides a way to disable event loop processing temporarily (useful,
e.g., for forked instances of R).
kernel()
’s default for m
was not appropriate if coef
was a set
of coefficients. (Reported by Pierre Chausse.)
bug.report()
has been updated for the current R bug tracker, which
does not accept emailed submissions.
R CMD check
now checks for the correct use of $(LAPACK_LIBS)
(as
well as $(BLAS_LIBS)
), since several CRAN recent submissions have
ignored ‘Writing R Extensions’.
INSTALLATION
The zlib
sources in the distribution are now built with all
symbols remapped: this is intended to avoid problems seen with
packages such as XML and rggobi which link to zlib.so.1
on
systems using zlib 1.2.5
.
The default for and with gfortran
on x86_64 Linux has been changed
back to -g -O2
: however, setting -g -O
may still be needed for
gfortran 4.3.x
.
PACKAGE INSTALLATION
A LazyDataCompression
field in the DESCRIPTION
file will be used
to set the value for the –data-compress
option of R CMD INSTALL
.
Files R/sysdata.rda
of more than 1Mb are now stored in the
lazyload database using xz
compression: this for example halves
the installed size of package Imap.
R CMD INSTALL
now ensures that directories installed from inst
have search permission for everyone.
It no longer installs files inst/doc/Rplots.ps
and
inst/doc/Rplots.pdf
. These are almost certainly left-overs from
Sweave
runs, and are often large.
DEPRECATED & DEFUNCT
The ‘experimental’ alternative specification of a name space via
.Export()
etc is now deprecated.
zip.file.extract()
is now deprecated.
Zip-ing data sets in packages (and hence
R CMD INSTALL –use-zip-data
and the ZipData: yes
field in a
DESCRIPTION
file) is deprecated: using efficiently compressed
.rda
images and lazy-loading of data has superseded it.
BUG FIXES
identical()
could in rare cases generate a warning about
non-pairlist attributes on CHARSXPs. As these are used for internal
purposes, the attribute check should be skipped. (Reported by Niels
Richard Hansen).
If the filename extension (usually .Rnw
) was not included in a
call to Sweave()
, source references would not work properly and
the keep.source
option failed. (PR#14459)
format.data.frame()
now keeps zero character column names.
pretty(x)
no longer raises an error when x
contains solely
non-finite values. (PR#14468)
The plot.TukeyHSD()
function now uses a line width of 0.5 for its
reference lines rather than lwd = 0
(which caused problems for
some PDF and PostScript viewers).
The big.mark
argument to prettyNum()
, format()
, etc. was
inserted reversed if it was more than one character long.
R CMD check
failed to check the filenames under man
for Windows’
reserved names.
The "Date"
and "POSIXt"
methods for seq()
could overshoot when
to
was supplied and by
was specified in months or years.
The internal method of untar()
now restores hard links as file
copies rather than symbolic links (which did not work for
cross-directory links).
unzip()
did not handle zip files which contained filepaths with
two or more leading directories which were not in the zipfile and
did not already exist. (It is unclear if such zipfiles are valid and
the third-party C code used did not support them, but PR#14462
created one.)
combn(n, m)
now behaves more regularly for the border case
\(m = 0\). (PR#14473)
The rendering of numbers in plotmath expressions (e.g.
expression(10^2)
) used the current settings for conversion to
strings rather than setting the defaults, and so could be affected
by what has been done before. (PR#14477)
The methods of napredict()
and naresid()
for
na.action = na.exclude
fits did not work correctly in the very
rare event that every case had been omitted in the fit. (Reported by
Simon Wood.)
weighted.residuals(drop0=TRUE)
returned a vector when the
residuals were a matrix (e.g. those of class "mlm"
). (Reported by
Bill Dunlap.)
Package HTML index files <pkg>/html/00Index.html
were generated
with a stylesheet reference that was not correct for static browsing
in libraries.
ccf(na.action = na.pass)
was not implemented.
The parser accepted some incorrect numeric constants, e.g. 20x2
.
(Reported by Olaf Mersmann.)
format(*, zero.print)
did not always replace the full zero parts.
Fixes for subsetting or subassignment of "raster"
objects when not
both i
and j
are specified.
R CMD INSTALL
was not always respecting the ZipData: yes
field
of a DESCRIPTION
file (although this is frequently incorrectly
specified for packages with no data or which specify lazy-loading of
data).
R CMD INSTALL –use-zip-data
was incorrectly implemented as
–use-zipdata
since R 2.9.0.
source(file, echo=TRUE)
could fail if the file contained #line
directives. It now recovers more gracefully, but may still display
the wrong line if the directive gives incorrect information.
atan(1i)
returned NaN+Infi
(rather than 0+Infi
) on platforms
without C99 complex support.
library()
failed to cache S4 metadata (unlike loadNamespace()
)
causing failures in S4-using packages without a namespace (e.g.
those using reference classes).
The function qlogis(lp, log.p=TRUE)
no longer prematurely
overflows to Inf
when exp(lp)
is close to 1.
Updating S4 methods for a group generic function requires resetting the methods tables for the members of the group (patch contributed by Martin Morgan).
In some circumstances (including for package XML), R CMD INSTALL
installed version-control directories from source packages.
Added PROTECT
calls to some constructed expressions used in C
level eval
calls.
utils:::create.post()
(used by bug.report()
and
help.request()
) failed to quote arguments to the mailer, and so
often failed.
bug.report()
was naive about how to extract maintainer email
addresses from package descriptions, so would often try mailing to
incorrect addresses.
debugger()
could fail to read the environment of a call to a
function with a ...
argument. (Reported by Charlie Roosen.)
prettyNum(c(1i, NA), drop0=TRUE)
or str(NA_complex_)
now work
correctly.
This article is converted from a Legacy LaTeX article using the texor package. The pdf version is the official version. To report a problem with the html, refer to CONTRIBUTE on the R Journal homepage.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Team, "Changes in R", The R Journal, 2011
BibTeX citation
@article{RJ-2011-1-r-changes, author = {Team, The R Core}, title = {Changes in R}, journal = {The R Journal}, year = {2011}, note = {https://rjournal.github.io/}, volume = {3}, issue = {1}, issn = {2073-4859}, pages = {79-88} }