o The default graphics device in non-interactive use is now pdf() rather than postscript(). [PDF viewers are now more widely available than PostScript viewers.]
The default width and height for pdf() and bitmap() have been changed to 7 (inches) to match the screen devices.
o 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.
o 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 way, for example as being in device units (pixels) rather than in points.
o Packages which include graphics devices need to be re-installed for this version of R, with recently updated versions.
NEW FEATURES
o The apse code used by agrep() has been updated to version 0.16, with various bug fixes.
agrep() now supports multibyte character sets.
o any() and all() avoid coercing zero-length arguments (which used a surprising amount of memory) since they cannot affect the answer.
Coercion of other than integer arguments now gives a warning as this is often a mistake (e.g. writing all(pr) > 0 instead of all(pr > 0) ).
o as.Date(), as.POSIXct() and as.POSIXlt() now convert numeric arguments (days or seconds since some epoch) provided the 'origin' argument is specified.
o New function as.octmode() to create objects such as file permissions.
o as.POSIXlt() is now generic, and it and as.POSIXct() gain a '...' argument. The character/factor methods now accept a 'format' argument (analogous to that for as.Date).
o New function browseVignettes() lists available vignettes in an HTML browser with links to PDF, Rnw, and R files.
o There are new capabilities "aqua" (for the AQUA GUI and quartz() device on Mac OS X) and "cairo" (for cairo-based graphics devices).
o New function checkNEWS() in package 'tools' that detects common errors in NEWS file formatting.
o deparse() gains a new argument 'nlines' to limit the number of lines of output, and this is used internally to make several functions more efficient.
o deriv() now knows the derivatives of digamma(x), trigamma(x) and psigamma(x, deriv) (wrt to x).
o dir.create() has a new argument 'mode', used on Unix-alikes (only) to set the permissions on the created directory.
o Where an array is dropped to a length-one vector by drop() or [, drop = TRUE], the result now has names if exactly one of the dimensions was named. (This is compatible with S.) Previously there were no names.
o The 'incomparables' argument to duplicated(), unique() and match() is now implemented, and passed to match() from merge().
o dyn.load() gains a 'DLLpath' argument to specify the path for dependent DLLs: currently only used on Windows.
o The spreadsheet edit() methods (and used by fix()) for data frames and matrices now warn when classes are discarded.
When editing a data frame, columns of unknown type (that is not numeric, logical, character or factor) are now converted to character (instead of numeric).
o file.create() has a new argument 'showWarnings' (default TRUE) to show an informative warning when creation fails, and dir.create() warns under more error conditions.
o New higher-order functions Find(), Negate() and Position().
o [dpqr]gamma(*, shape = 0) now work as limits of 'shape -> 0', corresponding to the point distribution with all mass at 0.
o An informative warning (in addition to the error message) will be given when the basic, extended or perl mode of grep(), strsplit() and friends fails to compile the pattern.
o More study is done of perl=TRUE patterns in grep() and friends when length(x) > 10: this should improve performance on long vectors.
o grep(), 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.
o help.search() now builds the database about 3x times faster.
o iconv() now accepts "UTF8" on all platforms (many did, but not e.g. libiconv as used on Windows).
o identity() convenience function to be used for programming.
o In addition to warning when 'pkgs' is not found, install.packages() now reports if it finds a valid package with only a case mismatch in the name.
o intToUtf8() now marks the Encoding of its output.
o The function is() now works with S3 inheritance; that is, with objects having multiple strings in the class attribute.
o Extensions to condition number computation for matrices, notably complex ones are provided, both in kappa() and the new rcond().
o list.file() gains a 'ignore.case' argument, to allow case-insensitive matching on some Windows/MacOS file systems.
o ls.str() and lsf.str() have slightly changed arguments and defaults such that ls.str() {no arguments} works when debugging.
o Under Unix, utils::make.packages.html() can now be used directly to set up linked HTML help pages, optionally without creating the package listing and search database (which can be much faster).
o new.packages() now knows about the front-end package gnomeGUI (which does not install into a library).
o optim(*, control = list(...)) now warns when '...' contains unexpected names, instead of silently ignoring them.
o The options "browser" and "editor" may now be set to functions, just as "pager" already could.
o packageDescription() makes use of installed metadata where available (for speed, e.g. in make.packages.html()).
o 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.
o paste() and file.path() are now completely internal, for speed. (This speeds up make.packages.html(packages=FALSE) severalfold, for example.)
o paste() now sets the encoding on the result under some circumstances (see ?paste).
o predict.loess() now works when loess() was fitted with transformed explanatory variables, e.g, loess(y ~ log(x) + log(z)).
o print()'s new argument 'row.names' allows to suppress printing rownames.
o print() and str() now also "work" for 'logLik' vectors longer than one.
o Progress-bar functions txtProgressBar(), tkProgressBar() in package tcltk and winProgressBar() (Windows only).
o readChar() gains an argument 'useBytes' to allow it to read a fixed number of bytes in an MBCS locale.
o readNEWS() has been moved to the tools package.
o round() and signif() now do internal argument matching if supplied with two arguments and at least one is named.
o New function showNonASCII() in package tools to aid detection of non-ASCII characters in .R and .Rd files.
o The [dpq]signrank() functions now typically use considerably less memory than previously, thanks to a patch from Ivo Ugrina.
o spec.ar() now uses frequency(x) when calculating the frequencies of the estimated spectrum, so that for monthly series the frequencies are now per year (as for spec.pgram) rather than per month as before.
o spline() gets an 'xout' argument, analogously to approx().
o 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.
o [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.)
o New function Sys.chmod(), a wrapper for 'chmod' on platforms which support it. (On Windows it handles only the read-only bit.)
o New function Sys.umask(), a wrapper for 'umask' on platforms which support it.
o New bindings ttk*() in package tcltk for the 'themed widgets' of Tk 8.5. The tcltk demos make use of these widgets where available.
o write.table(d, row.names=FALSE) is faster when 'd' has millions of rows; in particular for a data frame with automatic row names. (Suggestion from Martin Morgan.)
o The parser limit on string size has been removed.
o If a NEWS file is present in the root of a source package, it is installed (analogously to LICENSE, LICENCE and COPYING).
o Rd conversion to 'example' now quotes aliases which contain spaces.
o The handling of DST on dates outside the range 1902-2037 has been improved. Dates after 2037 are assumed to have the same DST rules as currently predicted for the 2030's (rather than the 1970s), and dates prior to 1902 are assumed to have no DST and the same offset as in 1902 (if known, otherwise as in the 1970s).
o On platforms where we can detect that mktime sets errno (e.g. Solaris and 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.
o The definition of 'whitespace' used by the parser is slightly wider: it includes Unicode space characters on Windows and in UTF-8 locales on machines which use Unicode wide characters.
o The src/extra/intl sources have been updated to those from gettext 0.17.
o New flag --interactive on Unix-alikes forces the session to be interactive (as --ess does on Windows).
o x[] <- NULL is always a no-op: previously type-checking was done on the replacement value and so this failed, whereas we now assume NULL can be promoted to any zero-length vector-like object.
Other cases of a zero-length index are done more efficiently.
o There is a new option in Rd markup of \donttest{} to mark example code that should be run by example() but not tested (e.g. because it might fail in some locales).
o The error handler in the parser now reports line numbers for more syntax errors (MBCS and Unicode encoding errors, line length and context stack overflows, and mis-specified argument lists to functions).
o The "MethodsList" objects originally used for method selection are being phased out. New utilities provide simpler alternatives (see ?findMethods), and direct use of the mangled names for the objects is now deprecated.
o 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.
o Unix-alikes now give a warning on startup if locale settings fail. (The Windows port has long done so.)
o Parsing and scanning of numerical constants is now done by R's own C code. This ensures cross-platform consistency, and mitigates the effects of setting LC_NUMERIC (within base R it only applies to output -- packages may differ).
The format accepted is more general than before and includes binary exponents in hexadecimal constants: see ?NumericConstants for details.
o 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.