This blog is updated daily.
A general description is here.
quartz() would segfault if asked to create a file for bitmap output which could not be created. This applied also to the type="quartz" versions of bmp(), jpeg(), png() and tiff().
dnbinom(0, size, mu = <large>) suffered from cancellation in 2.7.2 only.
seek() now clears the pushback on a text-mode connection if used to set a new position. (PR#12640)
source() did not respect the setting of options("keep.source") when setting source references.
Attempting to open an X11() device on a non-existent display when one is already open on another display now gives a warning rather than terminating R via a fatal X11 error. (PR#12628)
within(<dataframe>, { ... }) now also works when '...' removes more than one column.
data.frame(row.names=NULL) once again behaves differently from the default (as documented).
plot(isoreg(x,y)) now plots the points correctly, also when 'x' is not sorted.
duplicated() and unique() now handle 'incomparables' better, and avoid occasional segfaults (PR#12551).
The use of multiple packages in 'LinkingTo' works again, and now works when the dependent packages are in the libraries loaded by R but noty to be installed to (but not in the library path seen by R --vanilla).
sprintf() returns elements of the result in UTF-8 when the
format or any character input has a corresponding element
declared as UTF-8. Similarly for paste(), elements of the
result are in UTF-8 when any input to that element is declared
as UTF-8.
axis() has new arguments 'col.ticks' and 'lwd.ticks' to allow
the colour and line width of ticks to be set separately from
that of the line (e.g. to set one or the other to transparent
or zero width).
legend() has a new argument 'box.col' to set the colour of the
enclosing box.
legend() gains a 'xpd' argument to make it easier to place a
legend in the margins or outer margins.
stripchart() now passes '...' to title() (as well as to
plot.default() and axis()). (Wish of PR#12202)
help.search() has to new argument 'searchEngine' to go
directly to the search form: this is needed by users of
Firefox 3 to workaround a bug in interpreting the search
results pages.
Plotmath computed the glyph metrics for the wrong character (and
perhaps for a non-existent one) if this was a single-byte
character with the top bit set. An example was symbol("\300").
sink() and cat() could divert output to a non-writable connection.
phyper(x, 0,0,0) no longer hangs for huge x and gives 1 for x >= 0.
(PR#11813)
plnorm(x, ..., log.p=TRUE) is now correct for x <= 0. (PR#11867)
<data.frame>[, ch] gives an error (again!) when ch is a string not
exactly matching the column names, thanks to an oral bug report by
Matthew Dowle.
data.frame(x=1:2, y=3:4, row.names=c("a","NA"))[c(2,NA),] has
correct row names c("NA,"NA.1") again.
The GUI data editor for dataframes did not handle escape
characters in entries properly. (PR#11897)
PCRE has been updated to 7.7 (bugfix release).
package.skeleton() wrongly warned about invalid code_files names
when these were not in the current directory.
shapiro.test(c(0,0,1)) now has P value >= 0 (instead of barely
negative).
assign() now warns if given a character vector of length > 1,
rather than silently taking the first element.
rcond(<exactly singular matrix>) now gives 0 instead of an error.
There was a memory leak in C function ucstoutf8 used by some
graphics devices.
Plots of profile.mle() objects (package 'stats4') were
misbehaving when the 'which' argument had been used in their
calculation.
dnbinom(x, size, mu=*, ..) is now more accurate for very large
'size'. The same applies to pnbinom() and rnbinom().
axis() was ignoring par() mgp[3] if mgp was set in-line.
Closing an X11 View() or dataentry window via its frame's
close control now works better on some window managers.
Calling lapply() was not handling method dispatch correctly for
is.numeric(), is.matrix(), is.array(), log() and the Math2
group. This affected data.matrix() which incorrectly regarded
"Date" and "POSIXct" objects as numeric, and has been adjusted
to do so as exceptions.
package.skeleton() was not looking for non-function objects in
its 'environment' argument.
nls() was only finding its 'weights' argument in the case when
all the variables in the formula were of the same length and
hence that model.frame() could be used.
It was silently ignoring 'subset' and 'na.action' except in that case. Now they are ignored only if 'data' is a list and variables taken from 'data' are not all of the same length, in which case a warning is given.
The 'mle' confint() method now takes 'level' into account when
setting 'alpha' for the profile.
within() was not handling correctly expressions that produced
NULL columns. (PR#11131)
dev.print() and dev.copy2{eps,pdf}() now ensure that the current
device is restored as the active device even if an error
occurs. (PR#9801)
as.Date() could fail to convert character strings representing
days on which midnight did not exist in the current timezone
(as happened in parts of Africa on 1960-01-01).
The automatic placement of legend() with 'title' and a
reversed 'x' axis was incorrect. (PR#12019)
The use of multiple packages in 'LinkingTo' works again, and
now works when the dependent packages are in libraries loaded
by R but not by R --vanilla.
bxp() (and hence boxplot) now respects in-line graphical
parameters 'xaxp'/'yaxp' as appropriate. (PR#11463)
barplot(log = "y") failed if there were NAs in the 'height'
argument. (PR#11585)
pbeta() is more accurate in some cases with extreme values of
'ncp'. (PR#11277).
edit.data.frame() no longer fails if called on a 0-column
data frame and no column is created.
pchisq(x, df=0) was always one even for x < 0; similarly for
pgamma(x, alpha=0).
add1() and drop1() now return a P-value of NaN in cases with
df=0 for test="Chisq" (they gave NaN until pchisq was altered
in R 2.6.2).
The default methods of drop1() and add1() now re-evaluate in the
object's formula environment, rather than simply in the parent
(informal bug report by Werner Stahel).
The undocumented limit of 8191 bytes on comments (from # to
the end of the line) in R code has been removed.
qgamma() warns if used with shape < 1e-10, when it may be
unreliable. (PR#12324)
Installing a source package was not using the package's declared
encoding (if any) as a default encoding for the help.search()
database in Meta/hsearch.rds. This could cause packages with
a default encoding to have some of their entries rejected by
help.search() in a multi-byte locale (such as a UTF-8 locale).
sprintf() returns elements of the result in UTF-8 when the format or any character input has a corresponding element declared as UTF-8. Similarly for paste(), elements of the result are in UTF-8 when any input to that element is declared as UTF-8.
axis() has new arguments 'col.ticks' and 'lwd.ticks' to allow the colour and line width of ticks to be set separately from that of the line (e.g. to set one or the other to transparent or zero width).
legend() has a new argument 'box.col' to set the colour of the enclosing box.
legend() gains a 'xpd' argument to make it easier to place a legend in the margins or outer margins.
stripchart() now passes '...' to title() (as well as to plot.default() and axis()). (Wish of PR#12202)
help.search() has new argument 'searchEngine' to go directly to the search form: this is needed by users of Firefox 3 to workaround a bug in interpreting the search results pages.
Plotmath computed the glyph metrics for the wrong character (and perhaps for a non-existent one) if this was a single-byte character with the top bit set. An example was symbol("\300").
sink() and cat() could divert output to a non-writable connection.
phyper(x, 0,0,0) no longer hangs for huge x and gives 1 for x >= 0. (PR#11813)
plnorm(x, ..., log.p=TRUE) is now correct for x <= 0. (PR#11867)
<data.frame>[, ch] gives an error (again!) when ch is a string not exactly matching the column names, thanks to an oral bug report by Matthew Dowle.
data.frame(x=1:2, y=3:4, row.names=c("a","NA"))[c(2,NA),] has correct row names c("NA,"NA.1") again.
The GUI data editor for dataframes did not handle escape characters in entries properly. (PR#11897)
PCRE has been updated to 7.7 (bugfix release).
package.skeleton() wrongly warned about invalid code_files names when these were not in the current directory.
shapiro.test(c(0,0,1)) now has P value >= 0 (instead of barely negative).
assign() now warns if given a character vector of length > 1, rather than silently taking the first element.
rcond(<exactly singular matrix>) now gives 0 instead of an error.
There was a memory leak in C function ucstoutf8 used by some graphics devices.
Plots of profile.mle() objects (package 'stats4') were misbehaving when the 'which' argument had been used in their calculation.
dnbinom(x, size, mu=*, ..) is now more accurate for very large 'size'. The same applies to pnbinom() and rnbinom().
axis() was ignoring par() mgp[3] if mgp was set in-line.
Closing an X11 View() or dataentry window via its frame's close control now works better on some window managers.
Calling lapply() was not handling method dispatch correctly for is.numeric(), is.matrix(), is.array(), log() and the Math2 group. This affected data.matrix() which incorrectly regarded "Date" and "POSIXct" objects as numeric, and has been adjusted to do so as exceptions.
package.skeleton() was not looking for non-function objects in its 'environment' argument.
nls() was only finding its 'weights' argument in the case when all the variables in the formula were of the same length and hence that model.frame() could be used.
It was silently ignoring 'subset' and 'na.action' except in that case. Now they are ignored only if 'data' is a list and variables taken from 'data' are not all of the same length, in which case a warning is given.
The 'mle' confint() method now takes 'level' into account when setting 'alpha' for the profile.
within() was not handling correctly expressions that produced NULL columns. (PR#11131)
dev.print() and dev.copy2{eps,pdf}() now ensure that the current device is restored as the active device even if an error occurs. (PR#9801)
as.Date() could fail to convert character strings representing days on which midnight did not exist in the current timezone (as happened in parts of Africa on 1960-01-01).
The automatic placement of legend() with 'title' and a reversed 'x' axis was incorrect. (PR#12019)
The use of multiple packages in 'LinkingTo' works again, and now works when the dependent packages are in libraries loaded by R but not by R --vanilla.
bxp() (and hence boxplot) now respects in-line graphical parameters 'xaxp'/'yaxp' as appropriate. (PR#11463)
barplot(log = "y") failed if there were NAs in the 'height' argument. (PR#11585)
pbeta() is more accurate in some cases with extreme values of 'ncp'. (PR#11277).
edit.data.frame() no longer fails if called on a 0-column data frame and no column is created.
pchisq(x, df=0) was always one even for x < 0; similarly for pgamma(x, alpha=0).
add1() and drop1() now return a P-value of NaN in cases with df=0 for test="Chisq" (they gave NaN until pchisq was altered in R 2.6.2).
The default methods of drop1() and add1() now re-evaluate in the object's formula environment, rather than simply in the parent (informal bug report by Werner Stahel).
The undocumented limit of 8191 bytes on comments (from # to the end of the line) in R code has been removed.
qgamma() warns if used with shape < 1e-10, when it may be unreliable. (PR#12324)
Installing a source package was not using the package's declared encoding (if any) as a default encoding for the help.search() database in Meta/hsearch.rds. This could cause packages with a default encoding to have some of their entries rejected by help.search() in a multi-byte locale (such as a UTF-8 locale).
help.search() has to new argument 'searchEngine' to go directly to the search form: this is needed by users of Firefox 3 to workaround a bug in interpreting the search results pages.
qgamma() warns if used with shape < 1e-10, when it may be unreliable. (PR#12324)
Installing a source package was not using the package's declared encoding (if any) as a default encoding for the help.search() database in Meta/hsearch.rds. This could cause packages with a default encoding to have some of their entries rejected by help.search() in a multi-byte locale (such as a UTF-8 locale).
pbeta() is more accurate in some cases with extreme values of 'ncp'. (PR#11277).
axis() has new arguments 'col.ticks' and 'lwd.ticks' to allow the colour and line width of ticks to be set separately from that of the line (e.g. to set one or the other to transparent or zero width).
legend() has a new argument 'box.col' to set the colour of the enclosing box.
legend() gains a 'xpd' argument to make it easier to place a legend in the margins or outer margins.
stripchart() now passes '...' to title() (as well as to plot.default() and axis()). (Wish of PR#12202)
The automatic placement of legend() with 'title' and a reversed 'x' axis was incorrect. (PR#12019)
pchisq(x, df=0) was always one even for x < 0; similarly for pgamma(x, alpha=0).
add1() and drop1() now return a P-value of NaN in cases with df=0 for test="Chisq" (they gave NaN until pchisq was altered in R 2.6.2).
The default methods of drop1() and add1() now re-evaluate in the object's formula environment, rather than simply in the parent (informal bug report by Werner Stahel).
The undocumented limit of 8191 bytes on comments (from # to the end of the line) in R code has been removed.
edit.data.frame() not longer fails if called on a 0-column data frame and no column is created.
The automatic placement of legend() with 'title' and a
reversed 'x' axis was incorrect. (PR#12019)
edit.data.frame() not longer fails if called on a 0-column data frame and no column is created.
bxp() (and hence boxplot) now respects in-line graphical parameters 'xaxp'/'yaxp' as appropriate. (PR#11463)
barplot(log = "y") failed if there were NAs in the 'height' argument. (PR#11585)
pbeta() is more accurate in some cases with extreme values of ncp. (PR#11277).
Calling lapply() with certain primitives was not handling method dispatch correctly for is.numeric(), is.matrix(), is.array(), log() and the Math2 group. This affected data.matrix() which incorrectly regarded "Date" and "POSIXct" objects as numeric, and has been adjusted to still do sodo so as exceptions.
The use of multiple packages in 'LinkingTo' works again, and now works when the dependent packages are in libraries loaded by R but not by R --vanilla.
The use of multiple packages in 'LinkingTo' works again.
The automatic placement of legend() with 'title' and a reversed 'x' axis was incorrect. (PR#12019)
sprintf() returns elements of the result in UTF-8 when the format or any character input has a corresponding element declared as UTF-8. Similarly for paste(), elements of the result are in UTF-8 when any input to that element is declared as UTF-8.
as.Date() could fail to convert character strings representing days on which midnight did not exist in the current timezone (as happened in parts of Africa on 1960-01-01).
Plots of profile.mle() objects (package 'stats4') were misbehaving when the 'which' argument had been used in their calculation.
dnbinom(x, size, mu=*, ..) is now more accurate for very large 'size'. The same applies to pnbinom() and rnbinom().
The 'mle' confint() method now takes 'level' into account when setting 'alpha' for the profile.
within() was not handling correctly expressions that produced NULL columns. (PR#11131)
dev.print() and dev.copy2{eps,pdf}() now ensure that the current device is restored as the active device even if an error occurs. (PR#9801)
Calling lapply() with certain primitives was not handling method dispatch correctly for is.numeric(), is.matrix(), is.array(), log() and the Math2 group. This affected data.matrix() which incorrectly regarded "Date" and "POSIXct" objects as numeric, and has been adjusted to still do so.
There was a memory leak in C function ucstoutf8 used by some graphics devices.
axis() was ignoring par() mgp[3] if mgp was set in-line.
There was a memory leak in ucstoutf8 used by some graphics devices.
axis() was ignoring par() mgp[3] is mgp was set in-line.
Calling lapply() with certain primitives was not handling method dispatch correctly for is.numeric(), is.matrix(), is.array(), log() and the Math2 group. This affected data.matrix() which incorrectly regarded "Date" and "POSIXct" objects as numeric.
package.skeleton() was not looking for non-function objects in its 'environment' argument.
nls() was only finding its 'weights' argument in the case when all the variables in the formula were of the same length and hence that model.frame() could be used.
It was silently ignoring 'subset' and 'na.action' except in that case. Now they are ignored only if 'data' is a list and variables taken from 'data' are not all of the same length, in which case a warning is given.
Closing an X11 View() or dataentry window via its frame's close control now works better on some window managers.
rcond(<exactly singular matrix>) now gives 0 instead of an error.
axis() was ignoring par() mgp[3] is mgp was set in-line.
co[rv](use = "complete.obs") now always gives an error if there are no complete cases: they used to give NA if method = "pearson" but an error for the other two methods. (Note that this is pretty arbitrary, but zero-length vectors always give an error so it is at least consistent.)
Since sd(na.rm=TRUE) and var(na.rm=TRUE) both call cov(use = "complete.obs"), this applies also to them.
cor(use="pair") used to give diagonal 1 even if the variable was completely missing for the rank methods but NA for the Pearson method: it now gives NA in all cases.
cor(use="pair") for the rank methods gave a matrix result with dimensions > 0 even if one of the inputs had 0 columns.
There was a memory leak in ucstoutf8 used by some graphics devices.
assign() now warns if given a character vector of length > 1, rather than silently taking the first element.
assign() now warns if given a character vector of length > 1, rather than silently taking the first element.
shapiro.test(c(0,0,1)) now has P value >= 0 (instead of barely negative).
package.skeleton() wrongly warned about invalid code_files names when these were not in the current directory.
PCRE has been updated to 7.7 (bugfix release).
The GUI data editor for dataframes did not handle escape characters in entries properly. (PR#11897)
data.frame(x=1:2, y=3:4, row.names=c("a","NA"))[c(2,NA),] has correct row names c("NA,"NA.1") again.
<data.frame>[, ch] gives an error (again!) when ch is a string not exactly matching the column names, thanks to an oral bug report by Matthew Dowle.
plnorm(x, ..., log.p=TRUE) is now correct for x <= 0. (PR#11867)
<data.frame>[, ch] gives an error (again!) when ch is a string not exactly mathing the column names, thanks to an oral bug report by Matthew Dowle.
phyper(x, 0,0,0) no longer hangs for huge x and gives 1 for x >= 0. (PR#11813)
Plotmath computed the glyph metrics for the wrong character (and perhaps for a non-existent one) if this was a single-byte character with the top bit set. An example was symbol("\300").
phyper(x, 0,0,0) no longer hangs for huge x and gives 1 for x >= 0. (PR#11813)
Plotmath computed the glyph metrics for the wrong character (and perhaps for a non-existent one) if this was a single-byte character with the top bit set. An example was symbol("\300").
sink() and cat() could divert output to a non-writable connection.
Plotmath computed the glyph metrics for the wrong character (and perhaps for a non-existent one) if this was a single-byte character with the top bit set. An example was symbol("\300").
symbol() in plotmath expressions works again with non-ASCII input on devices that use UTF-8 for the symbol font.
Adobe Symbol was missing from the encodings in tools::charset_to_EncodingUnicode.
The 'noquote' method for c() now works correctly with three or more arguments.
tools::texi2dvi() has a new argument 'texinputs' to allow the
TeX and bibtex input paths to be specified (even on MiKTeX).
dev.copy2pdf() gains an 'out.type' argument to allow it to be
used with cairo_pdf() or quartz(type = "pdf").
poly() has additional checks against user error (as in PR#11243).
The Mac OS quartz() device draws contiguous lines much faster.
A field containing just a sign is no longer regarded as numeric
(it was on all platforms in 2.7.0, but not on most in earlier
versions of R).
CITATION files are now read in Latin-1: quite a few were
failing if used in a multibyte locale such as UTF-8.
The DESCRIPTION file of a package can specify an 'OS_type' field
as either 'unix' or 'windows' to confine installation to that
OS type.
HoltWinters() now uses optimize() rather than optim for
one-parameter problems which should be more reliable (PR#11469).
axis() now respects the setting of par("xpd") when clipping.
The 'factor' method of format() now preserves names, dims and
dimnames in the same way as for character and numeric inputs.
(PR#11512)
The use of unserialize() on character strings is deprecated:
that was a format used in R < 2.4.0.
The use of embedded nuls in character strings is deprecated:
They will no longer be allowed in R 2.8.0.
R CMD check checks for possible check directories in the
sources -- in mid-2008 there were about 20 examples on CRAN.
R CMD build tries harder to clean up the inst/doc directory
from the remnants of earlier builds.
It also removes any directories with extension .Rcheck, and files .DS_Store and ._* (created by tar on Mac OS X under some circumstances: it now sets environment variables to ask for such files not to be created by that tar.)
Encoding<- on NA_character_ converted it to "NA".
Adobe Symbol was missing from the encodings in
tools::charset_to_Encoding.
diag(matrix(x, 0, 0)) now returns a 0-length vector of the
correct mode, instead of always numeric.
The parser sometimes accepted invalid quoted strings in a UTF-8
locale.
plot.default(x, y) now dispatches to Axis() methods whether
y is NULL or not.
On Mac OS X, the Cocoa Quartz window could close without warning
under certain circumstances (specific autorelease pool flush).
Plotting symbols with separate border and fill colours (e.g.,
plot(pch = 21)) now works with transparent 'col', but opaque
or semi-transparent 'bg'. Previously, if 'col' was
transparent then 'bg' was ignored and nothing was drawn.
file.path() did not work correctly in 2.7.0 if the components
had different encodings.
merge() failed if there were no common columns and one of the
inputs had zero rows.
expand.grid() failed if an input had length 0.
match() does again truncate strings at embedded nuls (as newly
documented in 2.7.0).
Because of a typo, 'pointsize' in png(type="cairo") (and jpeg,
bmp, tiff) devices was being interpreted in pixels not bigpoints.
is() was wrong for some S3 class objects with class of length
greater than one.
undoc() / codoc() were not checking all S4 methods in some cases.
Use of textConnection(NULL, mode="w") could segfault.
Use of strwidth/height(units="user") (the default) is again an
error before a user coordinate system has been set on the
device, rather than giving nonsensical values (the effect of
r31367).
Rare string width calculations in package grid were not
interpreting the string encoding correctly.
hasMethods(f, env) {without specified 'package'} now works better.
A missing PROTECT could cause segfaults on string
comparisons. (PR#11421)
str(structure(1, classID = "Pooh")) now works fine.
A missing PROTECT could cause segfaults in if() if coercion of
the condition was required or a warning was to be given.
plot(<table>) now uses a sensible default main title.
validObject() called with complete=TRUE did not use inherited
validity methods for slot classes.
Several bugs fixed in as(): the initial method lookup was not
using the table with inherited methods (so inheritance had to
be recomputed each time); coerce() should not be called
directly--it can insert invalid inherited methods; the
constructed as() methods were not retaining the function's
environment.
influence.measures(<glm-object>) now computes the same
Cook's distance approximations as cooks.distance().
plot(<glm>, which=5) uses more correct Cook's distance contours;
(fix to fix to PR#9316).
pdf() and postscript() were not working correctly in 2.7.0 with
UTF-8 encoded data in a non-UTF-8 MBCS (e.g. EUC-JP on Unix,
CJK locales on Windows).
conformMethod(), called by setMethod(), now checks better about
argument names in wrong order. Whereas it only warns currently,
it is planned to become an error in the future.
The predict() method for prcomp() had an incorrect check for
the number of columns of 'newdata' if the columns were not named.
The axis() function now distinguishes between setting "at" to
NULL or a zero-length vector, treating the latter as a request
for no ticks. This corrects the handling of the "x" parameter
to rug().
glob2rx("*[*") now produces a correct regular expression.
The canvas is no longer painted on copy or save in Cocoa Quartz.
identify() in Quartz can now be terminated by either using popup
menu equivalent (Ctrl-click or second mouse button) or by pressing
the <Esc> key. The latter was documented but did not work.
tools:::.check_package_depends() {called from 'R CMD check'} now
also works correctly when directory-name != package-name.
Source references were sometimes off by a line.
The quartz() parameter 'antialias' is no longer ignored.
The Quartz device is now trying hard to remove anti-aliasing
effects for rasterized backends in plots that use adjacent,
borderless rectangles such as image().
The srcfilecopy() function now adds a timestamp to the object it
creates.
parse() would lose a token when run on stdin().
socketConnection() was using internally the class "socket"
and not "sockconn", which caused a conflict with make.socket().
(PR#11515)
Quartz is now trying harder to find the proper font for a given
family which resolves font issues on Mac OS X 10.4. Full font
names and PostScript names can be used interchangeably. (Note,
however that italic/oblique font faces of Helvetica are not
included in the Mac OS X 10.4 system).
qf() no longer gives NaN when one of df1 and df2 is large and
the other is infinite (including if both are infinite); it is more
accurate e.g. for qf(1e-18, 2,4).
qbeta(-1e10, 50, 40, log.p=TRUE) no longer hangs.
Cocoa Quartz backend autodetection of display DPI was not
correct for screens rotated by 90 or 270 degrees.
selectMethod("coerce", .) now uses a correct default for
'useInherited', and hence no longer may mess up the method cache.
show() now also works on "unregistered" S3 class objects.
formatC(*, format="fg", flag="#") is no longer dropping trailing
zeros.
tools::texi2dvi() has a new argument 'texinputs' to allow the TeX and bibtex input paths to be specified (even on MiKTeX).
dev.copy2pdf() gains an 'out.type' argument to allow it to be used with cairo_pdf() or quartz(type = "pdf").
poly() has additional checks against user error (as in PR#11243).
The Mac OS quartz() device draws contiguous lines much faster.
A field containing just a sign is no longer regarded as numeric (it was on all platforms in 2.7.0, but not on most in earlier versions of R). Similarly, '.' is now always non-numeric.
CITATION files are now read in Latin-1: quite a few were failing if used in a multibyte locale such as UTF-8.
The DESCRIPTION file of a package can specify an 'OS_type' field as either 'unix' or 'windows' to confine installation to that OS type.
HoltWinters() now uses optimize() rather than optim for one-parameter problems which should be more reliable (PR#11469).
axis() now respects the setting of par("xpd") when clipping.
The 'factor' method of format() now preserves names, dims and dimnames in the same way as for character and numeric inputs. (PR#11512)
read.DIF(*, transpose=TRUE) now allows to correctly read DIF files produced by some versions of Excel.
The use of unserialize() on character strings is deprecated: that was a format used in R < 2.4.0.
The use of embedded nuls in character strings is deprecated: They will no longer be allowed in R 2.8.0.
R CMD check checks for possible check directories in the sources -- in mid-2008 there were about 20 examples on CRAN.
R CMD build tries harder to clean up the inst/doc directory from the remnants of earlier builds.
It also removes any directories with extension .Rcheck, and files .DS_Store and ._* (created by tar on Mac OS X under some circumstances: it now sets environment variables to ask for such files not to be created by that tar.)
Encoding<- on NA_character_ converted it to "NA".
Adobe Symbol was missing from the encodings in tools::charset_to_Encoding.
diag(matrix(x, 0, 0)) now returns a 0-length vector of the correct mode, instead of always numeric.
The parser sometimes accepted invalid quoted strings in a UTF-8 locale.
plot.default(x, y) now dispatches to Axis() methods whether y is NULL or not.
On Mac OS X, the Cocoa Quartz window could close without warning under certain circumstances (specific autorelease pool flush).
Plotting symbols with separate border and fill colours (e.g., plot(pch = 21)) now works with transparent 'col', but opaque or semi-transparent 'bg'. Previously, if 'col' was transparent then 'bg' was ignored and nothing was drawn.
file.path() did not work correctly in 2.7.0 if the components had different encodings.
merge() failed if there were no common columns and one of the inputs had zero rows.
expand.grid() failed if an input had length 0.
match() does again truncate strings at embedded nuls (as newly documented in 2.7.0).
Because of a typo, 'pointsize' in png(type="cairo") (and jpeg, bmp, tiff) devices was being interpreted in pixels not bigpoints.
is() was wrong for some S3 class objects with class of length greater than one.
undoc() / codoc() were not checking all S4 methods in some cases.
Use of textConnection(NULL, mode="w") could segfault.
Use of strwidth/height(units="user") (the default) is again an error before a user coordinate system has been set on the device, rather than giving nonsensical values (the effect of r31367).
Rare string width calculations in package grid were not interpreting the string encoding correctly.
hasMethods(f, env) {without specified 'package'} now works better.
A missing PROTECT could cause segfaults on string comparisons. (PR#11421)
str(structure(1, classID = "Pooh")) now works fine.
A missing PROTECT could cause segfaults in if() if coercion of the condition was required or a warning was to be given.
plot(<table>) now uses a sensible default main title.
validObject() called with complete=TRUE did not use inherited validity methods for slot classes.
Several bugs fixed in as(): the initial method lookup was not using the table with inherited methods (so inheritance had to be recomputed each time); coerce() should not be called directly--it can insert invalid inherited methods; the constructed as() methods were not retaining the function's environment.
influence.measures(<glm-object>) now computes the same Cook's distance approximations as cooks.distance().
plot(<glm>, which=5) uses more correct Cook's distance contours; (fix to fix to PR#9316).
pdf() and postscript() were not working correctly in 2.7.0 with UTF-8 encoded data in a non-UTF-8 MBCS (e.g. EUC-JP on Unix, CJK locales on Windows).
conformMethod(), called by setMethod(), now checks better about argument names in wrong order. Whereas it only warns currently, it is planned to become an error in the future.
The predict() method for prcomp() had an incorrect check for the number of columns of 'newdata' if the columns were not named.
The axis() function now distinguishes between setting "at" to NULL or a zero-length vector, treating the latter as a request for no ticks. This corrects the handling of the "x" parameter to rug().
glob2rx("*[*") now produces a correct regular expression.
The canvas is no longer painted on copy or save in Cocoa Quartz.
identify() in Quartz can now be terminated by either using popup menu equivalent (Ctrl-click or second mouse button) or by pressing the <Esc> key. The latter was documented but did not work.
tools:::.check_package_depends() {called from 'R CMD check'} now also works correctly when directory-name != package-name.
Source references were sometimes off by a line.
The quartz() parameter 'antialias' is no longer ignored.
The Quartz device is now trying hard to remove anti-aliasing effects for rasterized backends in plots that use adjacent, borderless rectangles such as image().
The srcfilecopy() function now adds a timestamp to the object it creates.
parse() would lose a token when run on stdin().
socketConnection() was using internally the class "socket" and not "sockconn", which caused a conflict with make.socket(). (PR#11515)
Quartz is now trying harder to find the proper font for a given family which resolves font issues on Mac OS X 10.4. Full font names and PostScript names can be used interchangeably. (Note, however that italic/oblique font faces of Helvetica are not included in the Mac OS X 10.4 system).
qf() no longer gives NaN when one of df1 and df2 is large and the other is infinite (including if both are infinite); it is more accurate e.g. for qf(1e-18, 2,4).
qbeta(-1e10, 50, 40, log.p=TRUE) no longer hangs.
Cocoa Quartz backend autodetection of display DPI was not correct for screens rotated by 90 or 270 degrees.
selectMethod("coerce", .) now uses a correct default for 'useInherited', and hence no longer may mess up the method cache.
show() now also works on "unregistered" S3 class objects.
formatC(*, format="fg", flag="#") is no longer dropping trailing zeros.
read.table(file = stdin()) with invalid input could leave the connection in an invalid state and hence cause a later segfault. (PR#11627)
read.DIF() did not obey the default 'stringsAsFactors = TRUE'.
read.table(file = stdin()) with invalid input could leave the connection in an invalid state and hence cause a later segfault. (PR#11627)
show() now also works on "unregistered" S3 class objects.
formatC(*, format="fg", flag="#") is no longer dropping trailing zeros.
selectMethod("coerce", .) now uses a correct default for 'useInherited', and hence no longer may mess up the method cache.
Cocoa Quartz backend autodetection of display DPI was not correct for screens rotated by 90 or 270 degrees.
The 'factor' method of format() now preserves names, dims and dimnames in the same way as for character and numeric inputs. (PR#11512)
plot(<table>) now uses a sensible default main title.
qf() no longer gives NaN when one of df1 and df2 is large and the other is infinite (including if both are infinite); it is more accurate e.g. for qf(1e-18, 2,4).
qbeta(-1e10, 50, 40, log.p=TRUE) no longer hangs.
Quartz is now trying harder to find the proper font for a given family which resolves font issues on Mac OS X 10.4. Full font names and PostScript names can be used interchangeably. (Note, however that italic/oblique font faces of Helvetica are not included in the Mac OS X 10.4 system).
R CMD build tries harder to clean up the inst/doc directory from the remnants of earlier builds.
It also removes any directories with extension .Rcheck., and files .DS_Store and ._* (created by tar on Mac OS X under some circumstances: it now sets environment variables to ask for such files not to be created by that tar.)
The 'factor' method of format() now preserves names, dims and dimnames in the same way as for character and numeric inputs.
socketConnection() was using internally the class "socket" and not "sockconn", which caused a conflict with make.socket(). (PR#11515)
Source references were sometimes off by a line.
The quartz() parameter 'antialias' is no longer ignored.
The Quartz device is now trying hard to remove anti-aliasing effects for rasterized backends in plots that use adjacent, borderless rectangles such as image().
The srcfilecopy() function now adds a timestamp to the object it creates.
parse() would lose a token when run on stdin().
conformMethod(), called by setMethod(), now checks better about argument names in wrong order. Whereas it only warns currently, it is planned to become be an error in the future.
tools:::.check_package_depends() {called from 'R CMD check'} now also works correctly when directory-name != package-name.
axis() now respects the setting of par("xpd") when clipping.
The axis() function now distinguishes between setting "at" to NULL or a zero-length vector, treating the latter as a request for no ticks. This corrects the handling of the "x" parameter to rug().
glob2rx("*[*") now produces a correct regular expression.
The canvas is no longer painted on copy or save in Cocoa Quartz.
identify() in Quartz can now be terminated by either using popup menu equivalent (Ctrl-click or second mouse button) or by pressing the <Esc> key. The latter was documented but did not work.
HoltWinters() now uses optimize() rather than optim for one-parameter problems which should be more reliable (PR#11469).
hasMethods(f, env) {without specified 'package'} now works better.
conformMethod(), called by setMethod(), now checks better about argument names in wrong order. Whereas it only warns currently, it is planned to become be an error in the future.
The predict() method for prcomp() had an incorrect check for the number of columns of 'newdata' if the columns were not named.
validObject() called with complete=TRUE did not use inherited validity methods for slot classes.
sSeveral bugs fixed in as(): the initial method lookup was not using the table with inherited methods (so inheritance had to be recomputed each time); coerce() should not be called directly--it can insert invalid inherited methods; the constructed as() methods were not retaining the function's environment.
plot(<glm>, which=5) uses more correct cCook's distance contours; (fix to fix to PR#9316).
pdf() and postscript() were not working correctly in 2.7.0 with UTF-8 encoded data in a non-UTF-8 MBCS (e.g. EUC-JP on Unix, CJK locales on Windows).
The predict() method for prcomp() had an incorrect check for the number of columns of 'newdata' if the columns were not named.
pdf() and postscript() were not working correctly in 2.7.0 with UTF-8 encoded data in a non-UTF-8 MBCS (e.g. EUC-JP on Unix, CJK locales on Windows).
pdf() and postscript() were not working correctly with UTF-8 encoded data in a non-UTF-8 MBCS (e.g. CJK locales on Windows).
influence.measures(<glm-object>) now computes the same Cook's distance approximations as cooks.distance().
plot(<glm>, which=5) uses more correct cook's distance contours; (fix to fix to PR#9316).
validObject called with complete=TRUE did not use inherited validity methods for slot classes.
several bugs fixed in as(): the initial method lookup was not using the table with inherited methods (so inheritance had to be recomputed each time); coerce() should not be called directly--it can insert invalid inherited methods; the constructed as() methods were not retaining the function's environment.
A missing PROTECT could cause segfaults in if() if coercion of the condition was required or a warning was to be given.
A missing PROTECT could cause segfaults on string comparisons. (PR#11421)
str(structure(1, classID = "Pooh")) now works fine.
The DESCRIPTION file of a package can specify an 'OS_type' field as either 'unix' or 'windows' to confine installation to that OS type.
QuartzThe Mac OS quartz() device draws contiguous lines much faster.
R CMD check checks for possible check directories in the sources -- in mid-2008 there were about 20 examples on CRAN.
file.path() did not work correctly in 2.7.0 if the components had different encodings.
is() was wrong for some S3 class objects with class forof length greater than one.
undoc() / codoc() where not checking all S4 methods in some cases.
R CMD build tries harder to clean up the inst/doc directory from the remnants of earlier builds.
It also removes any directories with extension .Rcheck.
Use of strwidth/height(units="user") (the default) is again an error before a user coordinate system has been set on the device, rather than giving nonsensical values (the effect of r31367).
Rare string width calculations in package grid were not interpreting the string encoding correctly.
is() was wrong for some S3 class objects with multi-string classclass for length greater than one.
Use of textConnection(NULL, mode="w") could segfault.
A field containing just a sign is no longer regarded as numeric (it was on all platforms in 2.7.0, but not on most in earlier versions of R).
CITATION files are now read in Latin-1: quite a few were failing if used in a multibyte locale such as UTF-8.
Quartz draws contiguous lines much faster.
is() was wrong for some S3 class objects with multi-string class.
undoc() / codoc() where not checking all S4 methods in some cases.
Because of a typo, 'pointsize' in png(type="cairo") etc (and jpeg, bmp, tiff) devices was being interpreted in pixels not bigpoints.
Because of a typo, 'pointsize' in png(type="cairo") etc devices was being interpreted in pixels not bigpoints.
Quartz draws contiguous lines much faster
The use of embedded nuls in character strings is deprecated: They will no longer be allowed in R 2.8.0.
merge() failed if there were no common columns and one of the inputs had zero rows.
expand.grid() failed if an input had length 0.
match() does again truncate strings at embedded nuls (as newly documented in 2.7.0).
Under certain rare circumstances the parser could accept
invalid UTF-8 quoted strings.
The parser sometimes accepted invalid quoted strings in a UTF-8 locale.
file.path() did not work correctly if the components had different encodings.
plot.default(x, y) now should correctly dispatchdispatches to Axis() methods whether y is NULL or not.
On Mac OS X, the Cocoa Quartz window could close without warning under certain circumstances (specific autorelease pool flush).
poly() has additional checks against user error (as in PR#11243).
The C macro 'allocString' is deprecated -- use 'mkChar',
or 'allocVector' directly if really necessary.
plot.default(x, y) now should correctly dispatch to Axis() methods whether y is NULL or not.
Plotting symbols with separate border and fill colours (e.g., plot(pch = 21)) now works with transparent 'col', but opaque or semi-transparent 'bg'. Previously, if 'col' was transparent then 'bg' was ignored and nothing was drawn.
list.files() gains a 'ignore.case' argument, to allow case-insensitive matching on some Windows/MacOS file systems.
tools::texi2dvi() has a new argument 'texinputs' to allow the TeX and bibtex input paths to be specified (even on MiKTeX).
dev.copy2pdf() gains an 'out.type' argument to allow it to be used with cairo_pdf() or quartz(type = "pdf").
The use of unserialize() on character strings is deprecated: that was a format used in R < 2.4.0.
The C macro 'allocString' is deprecated -- use 'mkChar', or 'allocVector' directly if really necessary.
R CMD build tries harder to clean up the inst/doc directory from the remnants of earlier builds.
Encoding<- on NA_character_ converted it to "NA".
Adobe Symbol was missing from the encodings in tools::charset_to_Encoding.
diag(matrix(x, 0, 0)) now returns a 0-length vector of the correct mode, instead of always numeric.
Under certain rare circumstances the parser could accept invalid UTF-8 quoted strings.
Cocoa Quartz window could close without warning under certain circumstances (specific autorelease pool flush).
The C macro 'allocString' will be removed in 2.8.0 -- use 'mkChar', or 'allocVector' directly if really necessary.
load() again reads correctly character strings with embedded nuls. (This was broken in 2.6.x, but worked in earlier versions.)
dbeta(.., ncp) is now more accurate for large ncp, and typically no longer underflows for give.log = TRUE.
determinant(matrix(,0,0)) now returns a correct "det" result; also value 1 or 0 depending on 'logarithm', rather than numeric(0).
load() again reads correctly character strings with embedded nuls.
The default for 'stylepath' in Sweave's (default) RweaveLatex driver can be set by the environment variable SWEAVE_STYLEPATH_DEFAULT: see ?RweaveLatex.
There is a new version of the X11() device based on cairo graphics which is selected by type = ""cairo" or "nbcairo", and is available on machines with cairo installed and preferably pango (which most machines with gtk+ >= 2.8 will have). This version supports translucent colours and normally does a better job of font selection so it has been possible to display (e.g.) English, Polish, Russian and Japanese text on a single X11() window. It is the default where available.
There is a companion function, savePlot(), to save the current plot to a PNG file.
On Unix-alikes, devices jpeg() and png() also accept type = "cairo", and with that option do not need a running X server. The meaning of capabilities("jpeg") and capabilities("png") has changed to reflect this. On MacOS X, there is a further type = "quartz". The default type is selected by the new option "bitmapType", and is "quartz" or "cairo" where available.
Where cairo 1.2 or later is supported, there is a svg() device to write SVG files, and cairo_pdf() and cairo_ps() devices to write (possibly bitmap) PDF and postscript files via cairo.
Some features require cairo >= 1.2, and some which are nominally supported under 1.2 seem to need 1.4 to work well.
Name space 'grDevices' was not unloading its DLL when the name space was unloaded.
getNativeSymbolInfo() was unaware of non-registered Fortran names, because one of the C support routines ignored them.
scan() with a non-default separator could skip nul bytes, including those entered as \0 with allowEscapes=TRUE. This was different from the default separator.
determinant(matrix(,0,0)) now returns a correct "det" result.
Packages which include graphics devices need to be re-installed for this version of R, with recently updated versions.
dev.copy2eps() uses dev.displaylist() to detect screen
devices, rather than list them in the function.
If writeLines(con = stdout()) is used (the default) and
sink(split=TRUE) has been used, the output is now sent to all
the active sink connections.
New function checkNEWS() that detects common errors in NEWS
file formatting.
New function checkNEWS() in package 'tools' that detects common errors in NEWS file formatting.
[g]sub(useBytes= = FALSE) now sets the encoding on changed elements of the result when working on an element of known encoding. (This was previously done only for perl = TRUE.)
[dpqr]gamma(*, shape= = 0) now work as limits of 'shape -> 0', corresponding to the point distribution with all mass at 0.
strsplit(), grepgrep(), strsplit() and friends with fixed=TRUE or perl=TRUE work in UTF-8 and preserve the UTF-8 encoding for UTF-8 inputs where supported.
dev.copy2eps() uses dev.displaylist() to detect screen devices, rather than list them in the function.
Dependence specifications for R or packages in the Depends field in a DESCRIPTION file can now make use of operators < > == and != (in addition to <= and >=): such packages will not be installable nor loadable in R < 2.7.0.
There can be multiple mentions of R or a package in the Depends field in a DESCRIPTION file: only the first mention will be used in R < 2.7.0.
When plot.default() is called with y=NULL it now calls Axis() with the 'y' it constructs rather than use the default axis.
dbeta(.., ncp) is now more accurate for large ncp.
optim(*, control = list(...)) now warns when '...' contains unexpected names, instead of silently ignoring them.
pairwise.t.test() and pairwise.wilcox.test() now more explicitly allow paired tests. In the former case it is now flagged as an error if both 'paired' and 'pool.SD' are set TRUE (formerly, 'paired' was silently ignored), and one-sided tests are generated according to 'alternative' also if 'pool.SD' is TRUE.
On platforms where we can detect that mktime sets errno (e.g. Solaris but not glibcand the code used on Windows but not Linux nor Mac OS X), "1969-12-31 23:59:59" GMT is converted from POSIXlt to POSIXct as -1 and not NA.
sprintf() now does all the conversions needed in a first pass if length(fmt) == 1, and so can be many times faster if called with long vector arguments.
There is a new version of the X11() device based on cairo graphics which is selected by type = "cairo", and is available on machines with cairo installed and preferably pango (which most machines with gtk+ >= 2.8 will have). This version supports translucent colours and normally does a better job of font selection so it has been possible to display (e.g.) English, Polish, Russian and Japanese text on a single X11() window. It is the default where available.
There is a companion function, savePlot(), to save the current plot to a PNG file.
On Unix-alikes, devices jpeg() and png() also accept type = "cairo", and with that option do not need a running X server. The meaning of capabilities("jpeg") and capabilities("png") has changed to reflect this. On MacOS X, there is a further type = "quartz". The default type is selected by the new option "bitmapType", and is "quartz" or "cairo" where available.
Where cairo is supported, there is a svg() device to write SVG files, and cairo_pdf() and cairo_ps() devices to write (possibly bitmap) PDF and postscript files via cairo.
Some features require cairo >= 1.2, and some which are nominally supported under 1.2 seem to need 1.4 to work correctlywell.
strwidth() and strheight() gain 'font' and 'vfont' arguments and accept in-line pars such as 'family' in the same way as text() does. (Longstanding wish of PR#776)
oOption( "device.ask.default") replaces "par.ask.default" now it applies also to grid.prompt().
The 'device-independent' family "symbol" is deprecated as it was highly locale- and device-dependent (it only did something useful in single-byte localsingle-byte locales on most devices) and font=5 (base) or fontface=5 (grid) did the job it was intended to do more reliably.
The search for tclConfig.sh and tkConfig.sh now only looks in containing directoriesdirectories with names containing $(LIBnn) in the hope of finding the version for the appropriate architecture (e.g. x86_64 or i386).
Rprintf() and REprintf() now use 'const char *' for their format argument -- this should reduce warnings when called from C++.
A new header 'R_ext/Visibility.h' contains some definitions for controlling the visibility of entry points, and how to control visibility is now documented in 'Writing R Extensions'.
optim(*, control = list(...)) now warns when '...' contains
unexpected names, instead of silently ignoring them.
read.dcf(all = TRUE) was leaking connections.
co[rv](use = "complete.obs") now always gives an error if there are no complete cases: they used to give NA if method = "pearson" but an error for the other two methods. (Note that this is pretty arbitrary, but zero-length vectors always give an error so it is at least consistent.)
cor(use="pair") used to give diagonal 1 even if the variable was completely missing for the rank methods but NA for the Pearson method: it now gives NA in all cases.
cor(use="pair") for the rank methods gave a matrix result with dimensions > 0 even if one of the inputs had 0 columns.
rnorm(n, mu = Inf) now returns rep(Inf, n) instead of NaN; similar sensible changes are applied to rlnorm(), rexp(), etc.
MS4 methods with missing arguments in the definition are handled correctly when non-signature arguments exist, and check for conflicting local names in the method definition.
Most users of the X11() device will see a new device that has different fonts, anti-aliasing of lines and fonts, and supports semi-transparent colours.
Progress-bar functions txtProgressBar(), tkProgressBar() in package tcltk and winProgressBar() (Windows only).
Progress-bar functions txtProgressBar(), tkProgressBar() in
package tcltk and winProgressBar() (Windows only).
optim(*, control = list(...)) now warns when '...' contains unexpected names, instead of silently ignoring them.
Most users of the X11() device will see a new device that has different fonts, anti-aliasing of lines and fonts, and supports semi-transparent colours.
Progress-bar functions txtProgressBar(), tkProgressBar() in package tcltk and winProgressBar() (Windows only).
Progress-bar functions txtProgressBar(), tkProgressBar() in
package tcltk and winProgressBar() (Windows only).
identity() convenience function to be used for programming.
New higher-order function Negates Find(), Negate() and Position().
Progress-bar functions txtProgressBar(), tkProgressBar() in package tcltk and winProgressBar() (Windows only).
Extensions to condition number computation for matrices, notably complex ones are provided ... currently via experimental ., both in kappa() and the new rcond().
predict.loess() now works when loess() was fitted with transformed explanatory variables, e.g, loess(y ~ log(x) + log(z)).
Graphics devices can say if they can rotate text well (e.g. postscript() and PDFpdf() can) and if so the device's native text becomes the default for contour labels rather than using Hershey fonts.
A new header 'R_ext/Visibility' contains some definitions for controlling the visibility of entry points, and how to control visibility is now documented in 'Writing R Extensions'.
The S4 pseudo-class "single" has been removed.
["double" is deprecated, but remains until a bug in the
Matrix package is fixed.]
The S4 pseudo-classes "single" and double have been removed. (The S4 class for a REALSXP is "numeric": for back-compatibility as(x, "double") coerces to "numeric".)
There is a new public interface to the encoding info stored on CHARSXPs, getCharCE and mkCharCE using the enumeration type cetype_t.
dump() and friends now warn that all S4 objects (even those based on vectors) are not source()able, with a stronger wording.
There is a new public interface to the encoding info stored on CHARSXPs, getCharCE and mkCharCE using the enumeration type cetype_t.
The default graphics devices in interactive and non-interactive sessions are now configurable via environment variables R_INTERACTIVE_DEVICE and R_DEFAULT_DEVICE respectively.
New function dev.new() to launch a new copy of the default graphics device (and taking care if it is "pdf" or "postscript" not to trample on the file of an already running copy).
New function dev.copy2pdf(), the analogue of dev.copy2eps().
dev.interactive() no longer treats a graphics device as interactive if it has a display list (but devices can still register themselves on the list of interactive devices).
The X11() and windows() graphics devices have a new argument 'title' to set the window title.
X11() now has the defaults for all of its arguments set by the new function X11.options(), inter alia replacing options "gamma", "colortype" and "X11fonts".
ps.options() now warns on unused option 'append'.
xfig() no longer takes default arguments from ps.options(). (This was not documented prior to 2.6.1 patched.)
pdf() now takes defaults from the new function pdf.options() rather that from ps.options() (and the latter was not documented prior to 2.6.1 patched).
The defaults for all arguments other than 'file' in postscript() and pdf() can now be set by ps.options() or pdf.options()
New functions setEPS() and setPS() as wrappers to ps.options() to set appropriate defaults for figures for inclusion in other documents and for spooling to a printer respectively.
The meaning of numeric 'pch' has been extended where MBCSes are supported. Now negative integer values indicate Unicode points, integer values in 32-127 represent ASCII characters, and 128-255 are valid only in single-byte locales. (Previously what happened with negative pch values was undocumented: they were replaced by the current setting of par("pch").)
Graphics devices can say if they can rotate text well (e.g. postscript() and PDF() can) and if so the device's native text becomes the default for contour labels rather than using Hershey fonts.
The setting of the line spacing (par("cra")[2]) on the X11() and windows() devices is now comparable with postscript() etc, and roughly 20% smaller than before (it used to depend on the locale for X11). (So is the pictex() device, now 20% larger.) This affects the margin size in plots, and should result in better-looking plots.
There is a per-device setting for whether new frames need confirmation. This is controlled by either par("ask") or grid.prompt() and affects all subsequent plots on the device using base or grid graphics.
There is a new version of the X11() device based on cairo graphics which is selected by type = "cairo", and is available on machines with cairo installed and preferably pango (which most machines with gtk+ >= 2.8 will have). This version supports translucent colours and normally does a better job of font selection so it has been possible to display (e.g.) English, Polish, Russian and Japanese text on a single X11() window. It is the default where available.
There is a companion function, savePlot(), to save the current plot to a PNG file.
On Unix-alikes, devices jpeg() and png() also accept type = "cairo", and with that option do not need a running X server. The meaning of capabilities("jpeg") and capabilities("png") has changed to reflect this. On MacOS X, there is a further type = "quartz". The default type is selected by the new option "bitmapType", and is "quartz" or "cairo" where available.
Where cairo is supported, there is a svg() device to write SVG files, and cairo_pdf() and cairo_ps() devices to write (possibly bitmap) PDF and postscript files via cairo.
Some features require cairo >= 1.2, and some which are nominally supported under 1.2 seem to need 1.4 to work correctly.
There are new bmp() and tiff() devices.
New function devSize() to report the size of the current graphics device surface (in inches or device units). This gives the same information as par("din"), but independent of the graphics subsystem.
New base graphics function clip() to set the clipping region (in user coordinates).
New functions grconvertX() and grconvertY() to convert between coordinate systems in base graphics.
identify() recycles its 'labels' argument if necessary.
stripchart() is now a generic function, with default and formula methods defined. Additional graphics parameters may be included in the call. Formula handling is now similar to boxplot().
strwidth() and strheight() gain 'font' and 'vfont' arguments and accept in-line pars such as 'family' in the same way as text() does. (PR#776)
example(ask=TRUE) now applies to grid graphics (e.g. from lattice) as well as to base graphics.
option("device.ask.default") replaces "par.ask.default" now it applies also to grid.prompt().
plot.formula() only prompts between plots for interactive devices (it used to prompt for all devices).
Most users of the X11() device will see a new device that has different fonts, anti-aliasing of lines and fonts, and supports semi-transparent colours.
Considerable efforts have been made to make the default output from graphics devices as similar as possible (and in particular close to that from postscript/pdf). Many devices were misinterpreting 'pointsize' in some ways, for example as being in device units (pixels) rather than in points.
identify() recycles its 'labels' argument if necessary.
stripchart() is now a generic function, with default and
formula methods defined. Additional graphics parameters may
be included in the call. Formula handling is now
similar to boxplot().
ps.options() now warns on unused option 'append'.
xfig() no longer takes default arguments from ps.options(). (This was not documented prior to 2.6.1 patched.)
pdf() now takes defaults from the new function pdf.options() rather that from ps.options() (and the latter was not documented prior to 2.6.1 patched).
The defaults for all arguments other than 'file' in postscript() and pdf() can now be set by ps.options() or pdf.options()
New functions setEPS() and setPS() as wrappers to ps.options()
to set appropriate defaults for figures for inclusion in other
documents and for spooling to a printer respectively.
The default graphics devices in interactive and
non-interactive sessions are now configurable via environment
variables R_INTERACTIVE_DEVICE and R_DEFAULT_DEVICE
respectively.
New function dev.new() to launch a new copy of the default
graphics device (and taking care if it is "pdf" or
"postscript" not to trample on the file of an already running
copy).
New function dev.copy2pdf(), the analogue of dev.copy2eps().
dev.interactive() no longer treats a graphics device as
interactive if it has a display list (but devices can still
register themselves on the list of interactive devices).
plot.formula() only prompts between plots for interactive
devices (it used to prompt for all devices).
The X11() and windows() graphics devices have a new argument
'title' to set the window title.
X11() now has the defaults for all of its arguments set by the
new function X11.options(), inter alia replacing options
"gamma", "colortype" and "X11fonts".
The meaning of numeric 'pch' has been extended where MBCSes are
supported. Now negative integer values indicate Unicode
points, integer values in 32-127 represent ASCII characters,
and 128-255 are valid only in single-byte locales.
(Previously what happened with negative pch values was
undocumented: they were replaced by the current setting of
par("pch").)
Graphics devices can say if they can rotate text well
(e.g. postscript() and PDF() can) and if so the device's
native text becomes the default for contour labels rather than
using Hershey fonts.
strwidth() and strheight() gain 'font' and 'vfont' arguments and
accept in-line pars such as 'family' in the same way as text()
does. (PR#776)
The setting of the line spacing (par("cra")[2]) on the X11() and
windows() device is now comparable with postscript() etc, and
roughly 20% smaller than before (it used to depend on the
locale for X11). (So is the pictex() device, now 20% larger.)
This affects the margin size in plots, and should result in
better-looking plots.
There is a per-device setting for whether new frames need
confirmation. This is controlled by either par("ask") or
grid.prompt() and affects all subsequent plots on the device
using base or grid graphics.
example(ask=TRUE) now applies to grid graphics (e.g. from
lattice) as well as to base graphics.
option("device.ask.default") replaces "par.ask.default" now it
applies also to grid.prompt().
There is a new version of the X11() device based on cairo
graphics which is selected by type = "cairo", and is available
on machines with cairo installed and preferably pango (which
most machines with gtk+ >= 2.8 will have). This version
supports translucent colours and normally does a better job of
font selection so it has been possible to display (e.g.)
English, Polish, Russian and Japanese text on a single X11()
window.
There is a companion function, savePlot(), to save the current plot to a PNG file.
On Unix-alikes, devices jpeg() and png() also accept type = "cairo", and with that option do not need a running X server. The meaning of capabilities("jpeg") and capabilities("png") has changed to reflect this. On MacOS X, there is a further type = "quartz" -- the default type is selected by the new option "bitmapType".
Where cairo is supported, there is a svg() device to write SVG files, and cairo_pdf() and cairo_ps() to write (possibly bitmap) PDF and postscript files via cairo.
Some features require cairo >= 1.2, and some which are nominally supported under 1.2 seem to need 1.4 to work correctly.
There are new bmp() and tiff() devices.
New function devSize() to report the size of the current
graphics device surface (in inches or device units). This
gives the same information as par("din"), but independent of
the graphics subsystem.
New graphics function clip() to set the clipping region (in
user coordinates).
New functions grconvertX() and grconvertY() to convert between
coordinate systems in base graphics.
Creating new S4 class and method definitions in an environment that could not be identified (as package, namespace or global) previously generated an error. It now results in creating and using an artificial package name from the current date/time, with a warning. See ?getPackageName.
The S4 pseudo-class "single" has been removed. ["double" will follow shortly: the S4 class for a REALSXP is "numeric"is deprecated, but remains until a bug in the Matrix package is fixed.]
coerce() is now a proper S4 object and so prints correctly.
@ now checks it is being applied to an S4 object, and if not gives a warning (which will become an error in 2.8.0).