The R Project SVN R

Rev

Rev 37889 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

            Dear Emacs, please make this -*-Text-*- mode!
    **************************************************
    *                        *
    *          2.3 SERIES NEWS           *
    *                        *
    **************************************************


        CHANGES IN R VERSION 2.3.0


USER-VISIBLE CHANGES

    o   In the grid package there are new 'arrow' arguments to
    grid.line.to(), grid.lines(), and grid.segments()
    (grid.arrows() has been deprecated).

    The new 'arrow' arguments have been added BEFORE
    the 'name', 'gp' and 'vp' arguments so existing code that
    specifies any of these arguments *by position* (not by name)
    will fail.

    o   all.equal() is more stringent, see the PR#8191 bug fix below.

    o   The data frame argument to transform() is no longer called 'x',
    but '_data'.  Since this is an invalid name, it is less likely
    to clash with names given to transformed variables. (People
    were getting into trouble with transform(data, x=y+z).)


NEW FEATURES

    o   arima.sim() has a new argument 'start.innov' for compatibility
    with S-PLUS.  (If not supplied, the output is unchanged from
    previous versions in R.)

    o   arrows() has been changed to be more similar to segments():
    for example col=NA omits the arrow rather than as previously
    (undocumented) using par("col").

    o   as.list() now accepts symbols (as given by as.symbol() aka
    as.name()).

    o   atan2() now allows one complex and one numeric argument.

    o   The 'masked' warnings given by attach() and library() now only
    warn for functions masking functions or non-functions masking
    non-functions.

    o   New function Axis(), a generic version of axis(), with Date and
    POSIX[cl]t methods.  This is used by most of the standard
    plotting functions (boxplot, contour, coplot, filled.contour,
    pairs, plot.default, rug, stripchart) which will thus label x
    or y axes appropriately.

    o   pbeta() now uses TOMS708 in all cases and so is more accurate
    in some (e.g. when lower.tail = FALSE and when one of the
    shape parameters is very small).

    o   [qr]beta(), [qr]f() and [qr]t() now have a non-centrality parameter.

    o   [rc]bind and some more cases of subassignment are implemented
    for raw matrices.  (PR8529 and 8530)

    o   The number of lines of deparsed calls printed by browser() and
    traceback() can be limited by the option "deparse.max.lines".
    (Wish of PR#8638.)

    o   New canCoerce() utility function in "methods" package.

    o   [pq]chisq() are considerably more accurate for moderate (up to
    80) values of ncp, and lower.tail = FALSE is fully supported
    in that region.  (They are somewhat slower than before.)

    o   chol(pivot = TRUE) now gives a warning if used on a (numerically)
    non-positive-definite matrix.

    o   chooseCRANmirror() consults the CRAN master (if accessible) to
    find an up-to-date list of mirrors.

    o   cov.wt() is more efficient for 'cor = TRUE' and has a new 'method'
    argument which allows 'Maximum Likelihood'.

    o   do.call() gains an 'envir' argument.

    o   eigen() applied to an asymmetric real matrix now uses a
    tolerance to decide if the result is complex (rather than
    expecting the imaginary parts of the eigenvalues to be exactly
    zero).

    o   New function embedFonts() for embedding fonts in PDF or
    PostScript graphics files.

    o   fisher.test() now uses p-values computed via hypergeometric
    distributions for all 2 by 2 tables.  This might be slightly
    slower for a few cases, but works much better for tables with
    some large counts.

    There is a new option to simulate the p-value for larger than
    2 x 2 tables.

    o   for() now supports raw vectors as the set of indices.

    o   getNativeSymbolInfo() is vectorized for the 'name' argument.  It
    returns a named list of NativeSymbolInfo objects, but is
    backward compatible by default when called with a character
    vector of length 1, returning the NativeSymbolInfo object.

    o   help.search() no longer attempts to handle packages installed
    prior to R 2.0.0, and reports the current path to the
    package (rather than where it was originally installed: this
    information is not shown by the print() method).

    o   Added "hexmode" to parallel "octmode".

    o   install.packages() now does tilde expansion on file paths
    supplied as 'pkgs'.

    o   install.packages() has additional arguments 'configure.args' and
    'clean' which allow the caller to provide additional arguments
    to the underlying R CMD INSTALL shell command when installing
    source packages on a Unix-alike.

    o   is.loaded() has a new argument 'type' to confine the search to
    symbols for .C, .Fortran, .Call or .External: by default it
    looks for a symbol which will match any of them.  It is now
    internal and not primitive, so argument matching works in the
    usual way.

    o   The symmetry test for matrices used in eigen() has been ``exported''
    as the 'matrix' method of a new S3-generic 'isSymmetric().

    o   .leap.seconds and the internal adjustment code now know about
    the 23rd leap second on 2005-12-31: the internal code uses a
    run-time test to see if the OS does.

    o   The 'col' argument of legend() now defaults to par("col")
    (which defaults to "black", the previous default), so that
    the lines/symbols are shown in the legend in the colour that
    is used on the plot.

    o   log2() and log10() call C functions of the same name if
    available, and will then be more likely to be precise to
    machine accuracy.

    o   new.packages() gains a ... argument to pass e.g. 'destdir' to
    install.packages().  (Wish of PR#8239.)

    o   nls() now supports 'weights'.

    o   The vector passed as the first argument of the 'fn' and 'gr'
    arguments of optim() has the names (if any) given to argument
    'par'.

    o   options(expressions) is temporarily increased by 500 during
    error-handling.   This enables e.g. traceback() to work when
    the error is reaching the limit on the nesting of expressions.

    o   page() accepts general R objects, not just names (and
    previously undocumented) character strings.  This allows the
    object to be specified as a call, for example.  More options
    are allowed in its '...' argument.

    o   pairs() allows a wider class of inputs, including data frames
    with date and date-time columns.

    o   par() and the in-line use of graphical parameters produce more
    informative error messages, distinguishing between
    non-existent pars and inappropriate use of valid pars.

    Graphical parameters 'family', 'lend', 'ljoin' and 'lmitre'
    can now be set in-line.

    There is no longer a warning if non-settable pars are used
    in-line, but there is an appropriate warning if unknown pars
    are passed.

    The length limit for the 'family' parameter has been increased
    to 200 bytes, to allow for the names of some CID-keyed fonts
    in multi-byte locales.

    o   The pdf() device now allows 'family' to be specified in the same
    generality as postscript().

    o   The pdf() device writes /FontDescriptor entries for all fonts
    except the base 14, and does not write font entries for unused
    fonts.

    o   Plotmath allows 'vartheta', 'varphi' and 'varsigma' (or 'stigma')
    as synonyms for 'theta1', 'phi1' and 'sigma1', and the help
    page has a note for TeX users.

    o   plot.xy() now takes its default arguments from the
    corresponding par() settings, so points(type="l") and
    lines(type="p") behave in the same way (and more obviously,
    also for type="b").

    o   poly() has a new argument 'raw', mainly for pedagogical purposes.

    o   The class "POSIXlt" now supports fractional seconds (as
    "POSIXct" has always done).  The printing of fractional seconds
    is controlled by the new option "digits.secs", and by default is off.

    o   postscript() supports family = "ComputerModernItalic" for
    Computer Modern with italic (rather than slanted) faces.

    o   The postscript()/pdf() font metrics for the 14 standard fonts
    (only, not the rest of the common 35) have been updated to
    versions from late 1999 which cover more glyphs.  There are
    also a few differences in the metrics and hence the output
    might be slightly different in some cases.

    o   The way families can be specified for postscript() and pdf()
    has been expanded to include CID-keyed fonts, with new
    functions Type1Font() and CIDFont() to set up such fonts
    families.

    o   prettyNum() has new arguments 'preserve.width' and 'zero.print'.
    When the former is not "none", as in calls from format() and
    formatC(), the resulting strings are kept at the desired width
    when possible even after adding of 'big.mark' or 'small.mark'.

    o   proc.time() and system.time() now record times to 1ms accuracy
    where available (most Unix-like systems).

    o   The initialization methods for the quasi() family have been
    changed to depend on the variance function, and in particular
    to work better for the "mu(1-mu)" variance function.  (PR#8486)

    o   read.table() gains a 'flush' argument passed to scan().

    o   require() now takes a 'lib.loc' argument.

    o   The second argument 'size' to sample() is required to have
    length 1, so that errors when supplying arguments are more
    easily detected.

    o   The default is now compress = !ascii in save() (but not save.image).

    o   scan() and write.table() now have some interruptibility, which
    may be useful when processing very large files.

    o   A new heuristic test, seemsS4Object() is supplied, along with a
    similar C-level test, R_seemsS4Object(object). The test
    detects probable S4 objects by their class's attribute. See
    the help page.

    o   S3 classes can now be made non-virtual S4 classes by supplying a
    prototype object in the arguments to setOldClass().

    o   splinefun() returns a function that now also has a 'deriv' argument
    and can provide up to the 3rd derivative of the interpolating
    spline, thanks to Berwin Turlach.
    
    o   stopifnot(A) now gives a better error message when A has NAs, and
    uses "not all TRUE" when A has length >= 2.

    o   str()'s default method has a new argument 'strict.width' which can
    be used to produce strict 'width' conforming output.  A new
    options(str = list(strict.width = *)) setting allows to control
    this for a whole session.

    o   summary.nls() has a new argument 'correlation' that defaults
    to FALSE (like summary.lm).

    o   Sys.sleep() has sub-millisecond resolution on Unix-alikes
    with gettimeofday().

    o   Sys.time() now has sub-millisecond accuracy on systems
    supporting the POSIX call gettimeofday, and clock-tick
    accuracy on Windows.

    o   The new function timestamp() adds a time stamp to the saved
    command history on consoles which support it.

    o   New function tcrossprod() for efficiently computing x %*% t(x)
    and x %*% t(y).

    o   The suffix used by tempfile() is now in hex on all platforms
    and guaranteed to be at least 6 hex digits (usually 8).

    o   trace() now works more consistently and more like its
    documentation, in particular the assertions about old tracing
    being removed for new.  For debugging purposes (of R) a
    mechanism for debugging the trace computations themselves was
    added.  See trace.R.

    o   The implementation of trace() has beem made more general by
    calling a function to do the trace interaction, and recover()
    now detects trace calls to trim the irrelevant code underneath.

    o   unserialize() can now also read a byte stream from a raw vector.

    o   The useDynLib() directive in the NAMESPACE file now accepts the
    names of the native/foreign symbols that are to be resolved in
    the DLL for use in .C/.Call/.Fortran/.External calls.  These
    can be used as regular R variables instead of the (routine
    name, PACKAGE) pairs currently recommended.  Alternative names
    can be given for the R variables mapping to these symbols.
    The native routine registration information can also be used
    directly via useDynLib(name, .registration = TRUE).  See the
    'Writing R Extensions' manual for more details.

    checkFF() (package 'tools') has been updated accordingly.

    o   validObject() has an option complete=TRUE that recursively
    checks the objects in the slots.  Not used when new(...)
    checks validity.

    o   New Vectorize() function, a wrapper for mapply().

    o   write.ftable() has gained an argument 'append = FALSE' (thanks to
    Stephen Weigand).

    o   On Unix-alikes, X11() now has arguments to request the initial
    position of the window, and 'gamma' defaults to the value of
    getOptions("gamma").  These changes are consistent with the
    windows() device.

    o   X11() and the Unix-alike data entry window can have properties
    (including geometry) set by X resources: see their help files.

    o   xy.coords() & xyz.coords() now have NULL defaults for their 'y' or
    'y' and 'z' arguments.  This is more consistent with their earlier
    documentation, and may be convenient for using them.


    o   Non-syntactic names of list elements are now printed quoted by
    backticks rather than double quotes.

    o   There is some basic checking for imminent C stack overflow (when
    the evaluation depth and the user interrupts are checked).
    On systems with suitable OS support (not Windows), segfaults
    from C stack overflow are caught and treated as an R error.

    New function Cstack_info() reports on stack size and usage.

        options(expressions) reverts to the default of 5000 now
    stack checking is in place.

    o   Package tcltk does not try to initialize Tk on Unix-alikes
    unless a DISPLAY variable is present.  This allows packages
    dependent on tcltk to be installed without access to an X server.

    o   The code used to guess timezone offsets where not supplied by
    the OS uses a different algorithm that is more likely to guess
    the summer-time transitions correctly.

    o   Package tools contains translation tables 'Adobe_glyphs' and
    'charset_to_Unicode'.

    o   Changed the environment tree to be rooted in an empty
    environment, available as emptyenv().  baseenv() has been
    modified to return an environment with emptyenv() as parent,
    rather than NULL.

    o   gettext has been updated to 0.14.5.

    o   PCRE has been updated to version 6.4.

    o   The method $.DLLInfo resolves the specified symbol in the DLL,
    returning a NativeSymbolInfo object.  Use [[ to access the actual
    values in the DLLInfo object.

    o   On systems with either vasprintf or both va_copy and a vsnprintf
    which reports the size of buffer required, connections such as
    gzfile() and bzfile() can now write arbitrarily long lines,
    not just 100000 chars.

    o   The R session temporary directory is now set in C code using
    the same algorithm whether or not the shell front-end is used
    and on all platforms.  This looks at environment variables
    TMPDIR, TMP and TEMP in turn, and checks if they point to a
    writable directory.

    o   Some of the classical tests put unnecessary restrictions on the
    LHS in the formula interface (e.g., t.test(x+y ~ g) was not
    allowed).

    o   On suitably equipped Unix-alike systems, segfaults, illegal
    operations and bus errors are caught and there is a simple
    error-handler which gives the user some choice as to what to
    do in interactive use. [Experimental.]

    On Windows access violations and illegal instructions are
    caught with a simple error handler.  [Experimental.]

    o   Tracebacks now include calls such as .C/.Fortran/.Call, which
    will help if errors occur in R code evaluated by compiled code
    and in tracebacks presented by the segfault etc handlers.

    o   Treatment of signature objects and method definition objects has
    been modified to give cleaner printing and more consistency in
    the treatment of signatures.  A sometimes useful utility,
    methodSignatureMatrix(), is now exported.

    o   R refrains from printing a final EOL upon exiting the main loop
    if the quiet flag is on and if the save action is known (e.g. this
    is true for --slave).


DEPRECATED & DEFUNCT

    o   The deprecated and undocumented use of atan() with two arguments
    has been removed: instead use atan2().

    o   write.table0() is defunct in favour of write.table().

    o   format.char() is defunct in favour of format.default().

    o   Support for the long-deprecated (and no longer documented)
    arguments --min-vsize --min-nsize --max-vsize --max-nsize
    --vsize --nsize of R CMD BATCH has been removed.

    o   The 'debian' subdirectory has been removed from the sources.

    o   The 'vfont' argument of axis() and mtext() has been removed:
    use par(family=) instead.

    o   The unused graphical parameter "type" has been removed: it
    invited confusion with the 'type' argument to default methods
    of plot(), points() and lines().

    o   nlsMethod() and profiler() are no longer exported from the stats
    namespace (and nlsMethod.plinear() is no longer registered as
    a method, as nlsMethod() was not generic).

    o   The re-named tcltk functions tkcmd, tkfile.tail, tkfile.dir,
    tkopen, tkclose, tkputs, tkread are now formally deprecated.

    o   Argument 'col' of bxp() is now formally deprecated.

    o   Use of NULL as an environment is deprecated and gives a warning.

    o   postscriptFont() is deprecated in favour of Type1Font() (which
    is just a change of name).

    o   La.chol() and La.chol2inv() are deprecated (they have since R
    1.7.0 been the same as the default options of chol() and chol2inv).

    o   La.svd(method = "dgesvd") is deprecated.

    o   The use of install.R and R_PROFILE.R files in packages is
    deprecated: use the DESCRIPTION file instead to arrange to
    save an image or to load dependent packages.

    The following command-line options to INSTALL are deprecated
    (use the fields in the DESCRIPTION file instead):
    -s --save --no-save --lazy --no-lazy --lazy-data --no-lazy-data

    o   Graphical parameter 'tmag' (which is long unused) is deprecated.


INTERNATIONALIZATION

    A set of patches supplied by Ei-ji Nakama has been incorporated.

    o   New postscript encodings for CP1253, CP1257 and Greek (ISO 8859-7).

    o   Support for East Asian CID-keyed fonts in pdf() and postscript().
    Although these usually contain Latin characters no accurate
    AFMs are available and so CID-keyed fonts are intended only
    for use with CJK characters.

    o   Wide-character width functions wc[s]width are provided that
    overcome problems found with OS-supplied ones (and those
    previously used by R on Windows).  This means that
    double-width CJK characters are now supported on all
    platforms.  It seems that the width of some characters (and
    not just CJK characters) depends on which CJK locale's fonts
    are in use and also on the OS.

    Revised wide-character classification functions are
    provided for use on Windows, AIX and MacOS X to replace
    deficient OS-supplied ones.

   o    There is support for MBCS charsets in the pictex() graphics
    device, and rotated (by 90 degrees) text may work better.

   o    The \u (and \U except on Windows) notation for characters which
    is supported by the parser in all MBCS charsets is now always
    interpreted as a Unicode point, even on platforms which do not
    encode wchar_t in Unicode.  These are now a syntax error in
    single-byte locales.

    o   The default encoding for postscript() and pdf() is chosen to
    be suitable for the current locale, if that is a single-byte
    locale which is supported.  This covers European (including
    Greek) and Cyrillic languages.

    In UTF-8 locales, a suitable single-byte encoding is chosen
    for postscript() and pdf(), and text translated to it.

    o   xfig() gains an 'encoding' argument.

    o   There are some message translations into Spanish.


INSTALLATION CHANGES

    o   The encoding files for pdf()/postscript() have been moved to
    directory 'enc' in package 'grDevices'.

    o   Support for MBCS is only enabled if iconv is found and it
    supports enough conversions.  (libiconv does.)

    o   In an MBCS locale, make check now translates the graphics
    examples from Latin-1.  This ensures that they will work
    correctly in UTF-8: it is possible that in other MBCS locales
    they will now fail (rather than work completely incorrectly).

    o   There is a new test, 'test-Docs', which as part of 'make
    check-devel' tests the code in the documentation.  Currently
    it runs doc/manual/R-{exts,intro}.R and the compiled code in
    R-exts.c.

    o   The workaround to allow an external LAPACK-containing BLAS
    such as libsunperf to be used with the internal LAPACK has
    been removed.  If you have such a library you may now need
    to use --with-lapack.  It is no longer possible to use some
    older versions of libsunperf, e.g. Forte 7 on 64-bit builds.

    o   A substitute for mkdtemp is provided, so it is now always
    used for R_TempDir.

    o   Most of the functions checked for by 'configure' also have
    declarations checked for in the appropriate header.

    o   The top-level documentation files AUTHORS COPYING.LIB COPYRIGHTS
    FAQ RESOURCES THANKS have been moved to doc, and COPYING and NEWS
    are installed there.  The file Y2K has been removed from the
    distribution.

    o   The extension .lo is no longer used in building R (only in
    the optional build of libRmath.so): this allows a considerable
    simplification of the Makefiles.

    o   Direct support for f2c has been removed: it can still be used
    via a script which makes it look like a Fortran compiler.
    (src/scripts/f77_f2c is an example of such a script.)

    o   There is a new flag SAFE_FFLAGS which is used for the
    compilation of dlamc.f.  It is set by configure for known
    problem cases (recent g77 and gfortran), but can be overridden
    by the user.

    o   The standard autoconf macros for large-file support are now used,
    and these are enabled unless --disable-largefile is specified.
    This replaces --enable-linux-lfs (and is now selected by default).

    o   Visibility attributes are used where supported (gcc4/gfortran on
    some platforms, also gcc3/g77 on FC3 and partially elsewhere).
    The main benefit should be faster loading (and perhaps better
    optimized code) in some of the dynamic shared objects (e.g.
    libR.so and stats.so).

    o   The *PICFLAGS are taken to be -fpic rather than -fPIC where
    possible.   This will make no difference on most platforms:
    -fPIC is needed on Sparc (and still used there), but -fpic
    should give slightly better performance on PowerPC (although
    -fPIC is used on PPC64 as it is needed to build libR.so there).

    o   More use is made of inlining for small utility functions such
    as isReal.  Because this can only be done portably with C99
    constructs (and we know of no actual implementation), this is
    only done for the GNU C compiler.

    o   There is an experimental feature to allow shared installations
    of sub-architectures.  See the R-admin manual.

    o   All platforms now use R's internal implementation of strptime,
    which allows fractional seconds.  (The major platforms were
    already using it.)

    o   The dlcompat work-around for old Mac OS X systems (<= 10.2)
    has been removed.  External dlcompat must be installed if needed.


UTILITIES

    o   R CMD check now uses an install log by default.

    o   R CMD check works for packages whose package name is different
    from the directory name in which it is located.

    o   R CMD INSTALL now uses more randomness in the temporary
    directory name even on systems without mktemp -d.

    o   R CMD f77 has been removed now f2c is no longer supported.

    o   The version string shown in the startup message and by
    "R --version", and that stored in variable R.version.string
    are now in exactly the same format.

    o   The base name of a help file needs to be valid as part of a file://
    URL, so R CMD check now checks the names are ASCII and do not
    contain % .

    o   R CMD check now warns about unknown sections in Rd files, and
    invalid names for help, demo and R files, as well as unlikely
    file names in the 'src' directory.  The latter is controlled
    by option --check-subdirs and by default is done if checking a
    tarball without a configure script.

    R CMD build excludes invalid files in the 'man', 'R' and 'demo'
    subdirectories.

    o   \usepackage[noae]{Sweave} in the header of an Sweave file
    supresses auto-usage of the ae package ("almost European"
    fonts) and T1 input encoding.


DOCUMENTATION

    o   Rd format now allows \var{} markup inside \code{} and \examples{}.

    o   Markup such as --, ---, < and > is handled better when
    converting .Rd files to [C]HTML.

    o   There is new markup \link[=dest]{name} to generate a link to topic
    'dest' which is shown as 'name', and \linkS4class{abc} which
    expands to \link[=abc-class]{abc}, for cross-referencing the
    recommended form of documentation for S4 classes.


PACKAGE INSTALLATION

    o   There is now some support for Fortran 90/95 code in packages:
    see `Writing R Extensions'.

    o   Installation of man sources and demos is now done by R code.
    The restrictions on the names of help files, R files and
    of demos are now enforced (see `Writing R Extensions').

    o   Packages which contain compiled code can now have more than
    one dot in their name even on Windows.

    o   The Meta/hsearch.rds database saved now contains LibPath="".
    This information is now always recreated when help.search() is
    run, but the field is retained for back-compatibility.

    o   update.packages() now has a '...' argument to be passed to
    install.packages(), including the formerly separate arguments
    'destdir' and 'installWithVers'.

    o   Make macros AR and RANLIB are now declared in etc/Makeconf for
    use by packages which wish to make static libraries.


C-LEVEL FACILITIES

    o   qgamma and rgamma in Rmath.h now check for non-positive arguments.

    o   The BLAS which ships with R now contains the complete set of
    double-complex BLAS routines, rather than just those used in R.

    <R_ext/BLAS.h> has been corrected to add the missing
    double-precision BLAS functions drotmg and drotm, and to
    exclude lsame (which is a Lapack auxiliary function and is now
    declared in <R_ext/Lapack.h>).  It also includes the double
    complex routines added for this release of R provided Fortran
    doublecomplex is usable on the platform.

    o   <R_ext/BLAS.h> and <R_ext/Lapack.h> now declare all the entry
    points as 'extern'.

    o   The flag SAFE_FFLAGS is made available to packages via
    etc/Makeconf and R CMD config.  It can be used where
    optimization needs to be defeated, e.g. in LAPACK setup.

    o   getNativeSymbolInfo has a withRegistrationInfo argument which
    causes the address field to be a reference to the registration
    information if it is available for that symbol.  If the
    registration information is not available, the address is a
    reference to the native symbol. The default is FALSE which is
    backward compatible, returning just the address of the symbol
    and ignoring registration information.

    o   errorcall and warningcall are now declared in <Rinternals.h>
    (they might be needed in front-ends).

    o   R_FlushConsole and R_ProcessEvents are now declared in <R.h>.

    o   The R_Sock* functions supporting socket connections are no
    longer declared in R-ftp-http.h as they are not loaded into R
    itself, and are now hidden in the module's DLL on suitable systems.


BUG FIXES

    o   Quoted arguments to the R script after --args are now
    passed quoted to the R executable and so will be shown as
    expected by commandArgs().  (They were previously split at
    whitespace even inside quotes on Unix-alikes but not on
    Windows.)

    o   axis() now supports pars 'xaxp'/'yaxp' as inline arguments.

    o   sort() now does not return inappropriate attributes such as
    "dim" and "tsp": it only returns names.

    sort(x, partial=) no longer returns unsorted names, and drops
    names (since it is supplied for efficiency).

    o   Use of non-central F in pf() gives accurate values for larger ncp.

    o   R CMD build --binary does a better job of cleaning up after
    failure to re-make vignettes.

    o   reg-test-1.R tested system(intern=TRUE) which depends on popen
    and so is not supported on all platforms.

    o   Changed apparent mis-spelling of "Gibraltar" in dataset 'eurodist'.

    o   sysconf() is now used to find the number of clock ticks/second:
    under some circumstances glibc reported CLK_TCK = 60 when the
    true value was 100.

    o   identical() was not allowing for embedded nuls in character
    strings. (NB: the comparison operators including == do not,
    and never will.)

    o   The profile() and profiler() methods for "nls" objects now
    support algorithm = "plinear" and algorithm = "port".

    o   The signal handlers for signals USR1 and USR2 where not
    restored if the signal arrived when interrupts were suspended.

    o   Certain combinations of S4 inheritance could cause inherited
    methods to override some directly specified methods.

    o   Some cases of named signatures in calls to setMethod() caused errors.

    o   all.equal() is now more consistent and "picky" about mismatching
    attributes, in particular names(); this is a part of the
    propositions by Andy Piskorkski (PR#8191).

    o   load() when applied to a connection leaves it open/not as it
    found it, and checks explicitly for having a binary readable
    connection.

    o   The p-values given by stat.anova() (called from several
    anova() methods) are now NA (rather than spurious) if
    non-nested models give rise to changes in deviance with a
    different sign from changes in degrees of freedom.

    o   Built-ins were reported as the relevant call in C-level error()s
    iff R profiling was in progress.  Now they are never reported.

    o   Too-long signatures (with no names) were not being caught
    in setMethod().

    o   Slot names in prototype() are being more thoroughly checked.

    o   signif() is more likely to follow the 'round to even' rule for
    exactly representable numbers, e.g. signif(0.25, 1).  (Related
    to PR#8452.)

    o   nls() now works correctly with some low-dimensional fits,
    e.g. with one or zero non-linear parameters.

    o   glm() could give an inappropriate error message if all
    possible coefficients were invalid (e.g. a log-linear binomial
    model with no intercept and a not all positive predictor).

    o   solve() gives clearer error messages for some incorrect usages.
    (PR#8494 and similar)

    o   The gaussian() family was missing the 'valideta' component
    (which could be needed for the "inverse" link function).

    The starting values supplied by the gaussian family could be
    invalid for the "log" and "inverse" link functions.  This is
    now reported.

    o   data.matrix() did not work correctly on zero-row data frames.
    (PR#8496 and other problems.)

    o   The DSC comments in the files from postscript(onefile=FALSE) now
    label all files as having page 1 of 1, as some other software
    seems to expect that.

    o   The axis labels chosen for logarithmic axis are now less
    likely to be linear and inappropriate (when the range is more
    than 10 and less than 100).  (PR#1235)

    o   Staircase lines (types "s" and "S") are now drawn
    continuously rather than a point at a time and so line types,
    mitring and so on work. (PR#2630)

    o   Calling par(mfg) before doing any plotting resulted in NewPage
    never being called on the device, which in turn resulted in
    incorrect output for postcript() and pdf() devices.  (Reported
    by Marc Schwartz in discussion of the non-bug PR#7820.)

    o   terms.formula needed to add parentheses to formulae with
    terms containing '|'.  (PR#8462)

    o   pbirthday() and qbirthday() now also work for very improbable
    events {those you are typically *not* interested in}.

    o   Only source help files starting with an upper- or lower-case
    letter or digit and extension .Rd or .rd are documented to be
    processed.  This is more liberal in that starting with a digit
    is now also allowed, but rule is now enforced.

    o   nls(algorthm="port") was always taking positive numeric
    differences and so could exceed the upper bounds.

    o   methods:::.asEnvironmentPackage() was not allowing for
    versioned installs.

    o   .find.package() now reports which package(s) it cannot find in
    the case it stops with an error.

    o   The standard Unix-alike version of file.show() gives an
    informative message if it cannot open a file rather than the
    (possibly incorrect) 'NO FILE'.

    o   window() did not allow non-overlapping ranges with
    extend = TRUE.  (PR#8545)

    o   pbinom(size = 0) now returns correct values (not NaN).  (PR#8560)

    o   [dp]binom(x, *) for x < 0 now always returns 0. (PR#8700)
    analogous change in pgeom(), pnbinom() and ppois().

    o   [dqpr]geom and [dpqr]nbinom() now all consistently accept prob = 1
    but not prob = 0.  qgeom(prob=1) now gives the correct values
    (not -1).

    o   INSTALL on Unix-alikes was not loading dependent packages when
    preparing for lazy-loading.

    o   qcauchy(1) now gives +Inf instead of just a very large number.

    o   df(0, f1, *) now properly returns Inf, 1, or 0 for f1 < , = , or > 2.

    o   qbinom(), qnbinom() and qpois() now use a better search and
    normally reach the answer very quickly when it is large
    (instead of being slow or infinite-looping).

    o   pt(x, df) lost accuracy in the far tails (when |x| > 1e154) for
    small df (like df = 0.001 for which such extremes are not unlikely).

    o   dbeta(x, a, b) underflowed internally and incorrectly gave 0
    for very small x and a.

    o   None of the warnings about convergence failures or loss of
    precision in nmath (distribution and special functions) were
    being reported to the R user.

    o   dnt was missing from standalone nmath (under Unix-alikes).

    o   split() now accepts factors with numeric (but not storage mode
    integer) codes.

    o   The utilities such as 'check' now report active version numbers
    again, as SVN 'last changed revision' numbers.

    o   addmargins() did not accept a name for 'FUN', only an expression.

    o   '+' for POSIXt objects now takes the tzone from whichever
    object has it, so date+x is the same as x+date if x is numeric.

    o   mean.default() and var() compute means with an additional pass
    and so are often more accurate, e.g. the variance of a
    constant vector is (almost) always zero and the mean of such a
    vector will be equal to the constant value to machine
    precision.  (PR#1228)

    sum(), prod(), mean(), rowSums() and friends use a long double
    accumulator where available and so may be more accurate.  (This
    is particularly helpful on systems such as Sparc and AMD64
    where long double gives considerably greater exponent range
    and precision than double.)

    o   read.dcf() now gives a warning on malformed lines.

    o   add1.[g]lm now try harder to use the environment of the
    formula in the orginal fit to look for objects such as the
    'data' and 'subset' arguments.

    o   gaussian()$aic was inconsistent with e.g. the lm results from
    AIC() and extractAIC() for weighted fits: it treated the weights
    as case weights and not variance factors.

    o   system() on Unix-alikes ignored non-logical values of 'intern' and
    treated 'intern = NA' as true.

    o   as.table() now produces non-NA rownames when converting a
    matrix of more than 26 rows.  (PR#8652)

    o   Partial sorting used an algorithm that was intended only for a
    few values of 'partial' and so could be far slower than a full
    sort.  It now switches to a barebones full sort for more than
    10 values of 'partial' and uses a more efficient recursive
    implementation for 2...10.

    o   summary.glm() returned an estimate of dispersion of Inf for a
    gaussian glm with zero residual degrees of freedom and then
    treated that as a known value.  It now uses the estimate NaN,
    which is consistent with summary.lm().

    o   Sys.sleep() on Unix-alikes was restricted to about 2147 seconds
    and otherwise might never have returned.  (PR#8678)

    o   is(obj, Cl) could wrongly report TRUE when Cl was a classUnion and
    multiple inheritance was involved.

    o   confint[.lm / .default] used label "100 %" for level = 0.999

    o   Empty entries (i.e., extraneous ",") in NAMESPACE files now give
    a better error message early at parsing time instead of a less
    comprehensible one later at load time.

    o   all.equal(n1, n2) could erroneously return NA when n1, n2
    contained large integers.

    o   anova.mlm() didn't handle multi-df effects properly in the
    single-model case (PR#8679)

    o   anova.mlm() had its colnames mangled by data.frame() (needed
    check.names=FALSE).

    o   summary.glm() gave an NA estimate of dispersion for fits with
    zero weights.  (PR#8720)

    o   qhyper() had too small a tolerance for right-continuity on
    some platforms so was not always an inverse to phyper().

    o   rownames<-.data.frame() and dimnames<-.data.frame() tested the
    length(s) of the replacement value(s) before coercion, which
    can change the length (e.g. for class "POSIXlt").

    o   max() and min() ignored the largest/smallest representable
    integer, as well as Inf/-Inf.  (PR#8731)

    o   write.table() assumed factors had integer codes: it now allows
    malformed factors with numeric codes (and otherwise throws an
    error).

    o   Worked around a Solaris restriction which meant that
    Sys.sleep() was only effective for times of up to one second.

    o   sink(, split=TRUE) now works correctly, but is allowed only on
        platforms that support va_copy or __va_copy.  (PR#8716)

    o   factanal(), prcomp() and princomp() now only check that columns
    in the model frame that will be used are numeric (they
    previously also checked columns which were part of negative terms
    in the formula).

    o   Misuse of $ in apply could corrupt memory.  (PR#8718)

    o   apply() could fail if the function returned NULL (e.g. if
    there was a single row).

    o   registerS3method() failed due to a typo. (It was almost never
    used.)

    o   Registering an S3 method for an S3 generic in another package
    that was converted to an S4 generic in the same package as the
    S3 method, registered the method in the wrong place.

    o   Recall() used lookup for the function in use and so could fail
    if that was an S3 method not on the search path.

    o   Rdconv -t Ssgm failed if it encountered \link[opt]{arg}.

    o   uniroot() did not give a warning (as documented) if it failed
    to converge in 'maxiter' steps.  (PR#8751)

    o   eapply (and as.list.environment) did not work for the base
    environment/namespace.  (PR#8761)

    o   Added protection in configure against systems for which using
    xmkmf fails to eport a C or C++ compiler.

    o   expand.grid() was constructing a data frame 'by hand' and so
    setting integer row.names (which are documented to be
    character).  It now sets character row names, and
    row.names.data.frame() coerces to character.

    o   qbeta() used == on volatile doubles for its convergence test,
    which failed with gcc 3.3.x on ix86 Linux.  We now use a less
    fragile test (and lose a negligible amount of accuracy).

    o   ls.str() was missing inherits=FALSE, and so could have
    reported on an object of the same name but a different mode in
    the enclosure of the given environment.

    o   logLik.nls assumed that sigma^2 had been estimated, but did
    not count this in the 'df' attribute.




    **************************************************
    *                        *
    *          2.2 SERIES NEWS           *
    *                        *
    **************************************************


        CHANGES IN R VERSION 2.2.1 patched


INSTALLATION CHANGES


    o   The macro SOCKLEN_T has been replaced by R_SOCKLEN_T to work
    around a problem with the headers of AIX 5.3.


BUG FIXES

    o   sub(fixed = TRUE) could get wrong the length of the character
    string for elements of the result after the first.

    o   legend() worked out which elements of 'lty' were valid before
    resizing 'lty', and so could fail if 'lty' was a different
    length from 'legend'.

    o   str(<dendrogram>) sometimes used much too many spaces (in 2.2.x).

    o   eigen(eispack=TRUE) accessed areas off the matrix in some
    circumstances (some asymmetric matrices with both complex
    conjugate pair and real eigenvalues).

    o   strptime() in 2.2.1 sometimes did not set $isdst when it was
    previously set.

    o   Another case of infinite influence has been worked around.
    (An addendum to PR#8367.)

    o   qr.coef() worked incorrectly with multiple rhs in the
    LAPACK-using cases. (PR#8476/8)

    o   rbind.data.frame() gave a corrupt data frame if one of the
    named arguments was a zero-row data frame. (PR#8506)

    o   Checks for NULL in the rho argument of the C-level findVar
    function have been added.

    o   The C-level substitute function was handling NULL in its 'rho'
    argument incorrectly.

    o   The code for pgamma() introduced in 2.1.0 failed for large
    values of 'shape' where the previous code was perfectly
    acceptable, despite the claim to be uniformly better.  For
    example, pgamma(0.9e100, 1e100) was NaN.  (PR#8528)

    o   There was no command 'ls' in browser() nor 'next' in debug(),
    despite the documentation (which has been corrected).
    Command 'where' in the browser() no longer changes to
    step-though mode.

    o   factor.scope() could report incorrectly that interaction terms
    were not in the upper scope when such terms in the model and
    the upper scope had different orders for the main effects.
    (Another manifestation of PR#7842.)

    o   The "lm" method of drop1() was giving incorrect results for
    weighted fits (since deviance.lm() was called on a non-"lm" object).

    o   dotchart() was miscalculating the space for the labels in the
    left margin.  (PR#8681)

    o   r <- glm(.....); all.equal(r,r) # now gives TRUE instead of an error
    
    o   plot.acf() with a multiple time series was sometimes
    miscalculating the 'ylim' value for the plot after the first.
    (PR#8705)



        CHANGES IN R VERSION 2.2.1


USER-VISIBLE CHANGES

    o   options("expressions") has been reduced to 1000: the limit
    of 5000 introduced in 2.1.0 was liable to give crashes from C
    stack overflow.


NEW FEATURES

    o   Use of 'pch' (e.g. in points) in the symbol font 5 is now
    interpreted in the single-byte encoding used by that font.
    Similarly, strwidth now recognizes that font 5 has a different
    encoding from that of the locale.  (These are likely to affect
    the answer only in MBCS locales such as UTF-8.)

    o   The URW font metrics have been updated to versions from late
    2002 which cover more glyphs, including Cyrillic.

    o   New postscript encodings for CP1250 (Windows East European),
    ISO Latin-7 (8859-13, Latvian, Lithuanian and Maori), Cyrillic
    (8859-5), KOI8-R, KOI8-U and CP1251.

    o   configure has more support for the Intel and Portland Group
    compilers on ix86 and x86_64 Linux.

    o   R CMD INSTALL will clean up if interrupted (e.g. by ctrl-C from
    the keyboard).

    o   There is now a comprehensive French translation of the messages,
    thanks to Philippe Grosjean.


DEPRECATED & DEFUNCT

    o   The undocumented use of atan() with two arguments is deprecated:
    instead use atan2() (as documented).

    o   The 'vfont' argument of axis() and mtext() is deprecated
    (it currently warns and does nothing).

    o   The function mauchley.test() is deprecated (was a misspelling)
    and replaced by mauchly.test()


BUG FIXES

    o   The malloc's of AIX and OSF/1 which return NULL for size 0
    are now catered for in src/main/regex.c.

    o   Names of list elements which are missing are now printed as
    $<NA> and not $"NA" (which is how the non-missing name "NA" is
    printed).  (Brought up in discussion of PR#8161.)

    o   help.start() was not linking R.css for use by its front page and
    immediate links (2.2.0 only).

    o   Indexing by character NA matched the name "NA".

    o   The arith-true test used random inputs and did not set the seed, so
    it could fail very occasionally.

    o   arima() with 'fixed' supplied and p=0 for the non-seasonal
    part could give spurious warnings about 'some AR parameters
    were fixed'.

    o   summary.matrix() could give an infinite recursion on some
    classed objects (e.g. those of class "Surv").

    o   The 255th character in an 8-bit character set was not handled
    correctly as a letter on some platforms where C char is
    signed: for example it was printed as \377 and not allowed in
    variable names.  (Spotted by Alexey Shipunov in Russian
    encodings.)

    o   Conversion from POSIXct to POSIXlt is done more accurately
    around the change of DST in years not supported by the OS
    (pre-1970 on Windows and some others, and in the far past or
    future).

    o   chisq.test(cbind(1:0, c(7,16)), simulate.p = TRUE) gave wrong
    P-values on some platforms. (PR#8224)

    o   pdf() was not writing details of the encoding to the file
    correctly.  (Spotted by Alexey Shipunov in Russian encodings.)

    o   image() was failing with an error when plotting a matrix
    of all NA values.  (PR#8228)

    image() could fail if called with add=FALSE (the default) and
    length(x)=1 for either x or y, as it uses the plot coordinates of
    the previous plot (if any).

    o   tools::checkMD5sums was not accepting file names with spaces in.

    o   The plot() method for TukeyHSD() needed updating after adding
    adjusted p-values.  (PR#8229)

    o   read.fwf() did not work for header = TRUE.  (PR#8226)

    o   diag() failed when its argument had NA values in its dimnames.

    o   [g]sub(pcre=TRUE) did not work correctly with \U and \L in a
    UTF-8 locale, even on the example on the help page.

    o   promptMethods() was failing if the "methods" argument was supplied.

    o   is.loaded() now finds Fortran symbols whether or not the
    registration mechanism has been used.

    o   ISODateTime() mistakenly corrected non-existent times (when
    DST was being started) in the current time zone.

    o   Some replacement operations on data frames gave incorrect
    answers, e.g. DF[3:4, "y"] if column "y" did not exist or was
    a matrix.

    o   getGraphicsEvent() would cause memory corruption if passed an
    empty prompt.

    o   qr() and chol() now pivot the colnames of the result when
    pivoting is used.  (PR#8258)

    o   example(points) omitted pch=0, although it was valid and
    said in the text to be illustrated.

    o   plot.default() had an unused 'lab' argument, thereby preventing
    the 'lab' graphics parameter being passed through '...' .

    o   Although polygon(col = NA) was the stated default, specifying
    NA was not equivalent to omitting the argument (but col=NULL
    was equivalent).

    o   Im(-1) was pi. (PR#8272, a side effect from all previous
    versions of R returning the same value for Im and Arg of
    non-complex numbers.)

    o   symbols(fg) defaulted to colour 1, not par("col") as documented.
    It does now defaults to par("col").

    o   par("family") did not check the length of the value (up to 49
    bytes) and so could segfault.

    o   aggregate.ts() did not allow for rounding in frequencies such
    as 1/5.

    o   prcomp(tol=) was not dropping the sdev's corresponding to
    dropped columns.

    o   Subassignment of a vector which increased the length of the
    vector _and_ had the wrong length of replacement could
    occasionally segfault.  (This has been there since at least
    mid 1997.)

    o   The registration of .Fortran symbols was broken: these could
    only be looked up if there were also .Call symbols registered!

    o   R CMD build was incorrectly rejecting the recommended form of
    name for a translation package, 'Translation-ll'.  (PR#8314)

    o   numericDeriv() gave nonsense results unless the variables were
    real, which was not checked.

    o   predict.prcomp() would sometimes give an error when predicting
    a single observation.  (PR#8324)

    o   mapply() could segfault if MoreArgs was not a list.  (PR#8332)

    o   The arith-true test used identical() on floating-point results,
    and this allowed a failure when the relative difference was
    less than .Machine$double.eps but non-zero.

    o   qbinom() was not accepting p = -Inf when log.p = TRUE, although
    it is a legitimate value.

    o   write.csv[2] only accepted logical constants for 'row.names', and
    now accepts variables.

    o   Conversion of .Rd files did not correctly match braces
    enclosing a whole argument, e.g. \eqn{{\bf a}}{a}.

    o   The C function pythag (used if hypot was not available) would
    infinite-loop on systems with effective optimizing compilers.

    o   Writing long formats (more than 1000 bytes) with connections
    that use dummy_vfprintf could fail on some systems.  The limit
    has been changed to 100000 bytes pending a more complete fix in R
    2.3.0.

    o   Making in src/nmath/standalone without making R was not
    making Rmath.h.

    o   Both the R front-end and INSTALL could find the attempted
    temporary directory name already in use on platforms without
    mktemp (and a genuine Bourne shell /bin/sh, not bash).  Now
    both the process ID and a timestamp are used to create the
    directory name.

    o   [dpqr]gamma now return NaN for an invalid 'shape' parameter
    (rather than throw an error), for consistency with other
    distribution functions.

    o   t() now longer drops dimnames 'list(NULL,NULL)' or 'list(NULL)'.

    o   Influence measures such as rstandard() and cooks.distance()
    could return infinite values rather than NaN for a case which
    was fitted exactly.  Similarly, plot.lm() could fail on such
    examples.  plot.lm(which = 5)  had to be modified to only plot
    cases with hat < 1.  (PR#8367)

    lm.influence() was incorrectly reporting 'coefficients' and
    'sigma' as NaN for cases with hat = 1, and on some platforms
    not detecting hat = 1 correctly.

    o   Rmath.h for standalone Rmath was not recording HAVE_WORKING_LOG,
    so R_log was not available on platforms defining it.

    o   HoltWinters() was using a slightly incorrect formula in the C code.

    o   dir.create() could be confused by a trailing slash on the
    path, and by paths containing drives on Windows.

    o   The search for tcl/tkConfig.sh looked in 'lib' before 'lib64'
    directories (and not at all in /usr/local/lib64) and so might
    prefer 32- to 64-bit versions if both are available.

    o   nlminb() used an uninitialized variable unless bounds were supplied,
    and so failed on 64-bit Solaris.



        CHANGES IN R VERSION 2.2.0


USER-VISIBLE CHANGES

    o   plot(<lm object>) uses a new default 'which = 5'
    for the fourth panel when 'which' is not specified.

    o   The SVN revision number will appear after the date in the
    welcome message.  The date shown is now the date of the last
    change to the sources rather than the date the sources were
    prepared.

    o   is.null(expression()) now returns FALSE.  Only NULL gives TRUE
    in is.null().

    o   graphics::xy.coords, xyz.coords and n2mfrow have been moved to
    the grDevices name space (to be available for grid as well).

    graphics::boxplot.stats, contourLines, nclass.*, and chull
    have been moved to the grDevices name space.  The C code
    underlying chull() has been moved to package grDevices.

    o   split(x, f), split<-() and unsplit() now by default split by all
    levels of a factor f, even when some are empty.
    Use split(x, f, drop = TRUE) if you want the old behavior of
    dropping empty levels.  split() and split<-() are S3 generic
    functions with new arguments 'drop' and '...' and all methods now
    should have 'drop' and '...' arguments as well.

    o   The default for 'allowEscapes' in both read.table() and scan()
    has been changed to FALSE.

    o   The default for 'gcFirst' in system.time() is now TRUE.


NEW FEATURES

    o   .Platform has a new component 'path.sep', the separator used
    between paths in environment variables such as PATH and TEXINPUTS.

    o   anova.mlm() now handles the single-model case.

    o   Hexadecimal values are now allowed for as.numeric() and
    as.integer() on all platforms, and as integer constants in R code.

    o   attach() now prints an information message when objects are
    masked on the search path by or from a newly attached database.

    o   axis() now returns 'at' positions.

    o   axis() has a new argument 'hadj' to control horizontal
    adjustment of labels.

    o   axis.Date() and axis.POSIXct() now accept a 'labels' argument
    (contributed by Gavin Simpson).

    o   barplot() now has arguments 'log = ""' and 'add = FALSE'
    (as in barplot2() from package 'gplots').

    o   baseenv() has been added, to return the base environment.  This
    is currently still NULL, but will change in a future release.

    o   boxplot() now responds to supplying 'yaxs' (via bxp()).
    (Wish of PR#8072.)

    o   capabilities() has a new component 'NLS'.

    o   cbind() and rbind() now react to 'deparse.level' = {0,1,2}
    (as in another system not unlike R).

    o   Experimental versions of cbind() and rbind() in methods package,
    based on new generic function cbind2(x,y) and rbind2().  This will
    allow the equivalent of S4 methods for cbind() and rbind() ---
    currently only after an explicit activation call, see ?cbind2.

    o   New functions cdplot() and spineplot() for conditional density
    plots and spine plots or spinograms.  Spine plots are now used
    instead of bar plots for x-y scatterplots where y is a factor.

    o   checkDocFiles() in package 'tools' now checks for bad \usage
    lines (syntactically invalid R code).

    o   The nonparametric variants of cor.test() now behave better in
    the presence of ties. The "spearman" method uses the asymptotic
    approximation in that case, and the "kendall" method likewise,
    but adds a correction for ties (this is not necessary in the
    Spearman case).

    o   The X11 dataentry() now has support for X Input Methods
    (contributed by Ei-ji Nakama).

    o   density() is now an S3 generic where density.default() {former
    density()} has new argument 'weights' for specifying observation
    masses different than the default 1/N -- based on a suggestion and
    code from Adrian Baddeley.

    o   download.packages() now carries on if it encounters a download
    error (e.g. a repository with a corrupt index).

    o   dump() now skips missing objects with a warning rather than
    throw an error.

    o   Added "POSIXlt" methods for duplicated() and unique().

    o   Function encoded_text_to_latex() in package tools translates
    Latin 1,2,9 and UTF-8 encoded character vectors to LaTeX
    escape sequences where appropriate.

    o   encodeString() allows justify = "none" for consistency with
    format.default().  Some argument names have been lengthened
    for clarity.

    o   file(), fifo() and pipe() now (if possible) report a reason
    if they fail to open a connection.

    o   format.default() now has a 'width' argument, and 'justify' can
    now centre character strings.

    format.default() has new arguments 'na.encode' to control
    whether NA character strings are encoded (true by default),
    and 'scientific' to control the use of fixed/scientific
    notation for real/complex numbers.

    How format() works on a list is now documented, and uses
    arguments consistently with their usage on an atomic vector.

    o   format.info() now has a 'digits' argument, and is documented
    to work for all atomic vectors (it used to work for all but
    raw vectors.).

    o   New function glob2rx() for translating `wildcard' aka `globbing'
    to regular expressions.

    o   There is a new function gregexpr() which generalizes regexpr()
    to search for all matches in each of the input strings (not
    just the first match).

    o   [g]sub() now have a 'useBytes' argument like grep() and regexpr().

    o   [g]sub(perl = TRUE) support \L and \U in the replacement.

    o   iconv() has been moved from 'utils' to 'base'.

    o   identify()'s default method has additional arguments 'atpen'
    and 'tolerance' (following S).

    o   KalmanForecast() and KalmanLike() now have an optional argument
    fast=FALSE to prevent their arguments being modified.

    o   Exact p-values are available in ks.test() for the one-sided and
    two-sided one-sample Kolmogorov-Smirnov tests.

    o   labels() now has a method for "dist" objects (replacing that
    for names() which was withdrawn in 2.1.0).

    o   library() now explicitly checks for the existence of
    directories in 'lib.loc': this avoids some warning messages.

    o   loadNamespace(keep.source=) now applies only to that namespace
    and not others it might load to satisfy imports: this is now
    consistent with library().

    o   match.arg() has a new argument 'several.ok = FALSE'.

    o   max.col() has a new argument for non-random behavior in the
    case of ties.

    o   memory.profile() now uses the type names returned by typeof()
    and no longer has two unlabelled entries.

    o   methods() now warns if it appears to have been called on a
    non-generic function.

    o   The default mosaicplot() method by default draws grey boxes.

    o   nlminb(), similar to that in S-PLUS, added to package 'stats'.

    o   New algorithm "port" (the nl2sol algorithm available in the
    Port library on netlib) added to the nls() function in the
    'stats' package.

    o   object.size() now supports more types, including external
    pointers and weak references.

    o   options() now returns its result in alphabetical order, and is
    documented more comprehensively and accurately.  (Now all
    options used in base R are documented, including
    platform-specific ones.)

    Some options are now set in the package which makes use of
    them (grDevices, stats or utils) if not already set when the
    package is loaded.

    o   New option("OutDec") to set the decimal point for output conversions.

    o   New option("add.smooth") to add smoothers to a plot, currently
    only used by plot.lm().

    o   pie() has new optional arguments 'clockwise' and 'init.angle'.

    o   plot.lm() has two new plots (for 'which' = 5 or 6), plotting
    residuals or cook distances versus (transformed) leverages - unless
    these are constant.  Further, the new argument 'add.smooth' adds a
    loess smoother to the point plots by default, and 'qqline = TRUE'
    adds a qqline() to the normal plot.
    The default for 'sub.caption' has been improved for long calls.

    o   R.home() has been expanded to return the paths to components
    (which can as from this version be installed elsewhere).

    o   readbin() and writeBin() now support raw vectors as well as
    filenames and connections.

    o   read.dcf() can now read gzipped files.

    o   read.table() now passes 'allowEscapes' to scan().

    o   sample(x, size, prob, replace = TRUE) now uses a faster
    algorithm if there are many reasonably probable values.  (This
    does mean the results will be different from earlier versions
    of R.)  The speedup is modest unless 'x' is very large _and_
    'prob' is very diffuse so that thousands of distinct values
    will be generated with an appreciable frequency.

    o   scatter.smooth() now works a bit more like other plotting
    functions (e.g., accepts a data frame for argument 'x').
    Improvements suggested by Kevin Wright.

    o   signif() on complex numbers now rounds jointly to give the
    requested number of digits in the larger component, not
    independently for each component.

    o   New generic function simulate() in the 'stats' package with
    methods for some classes of fitted models.

    o   smooth.spline() has a new argument 'keep.data' which allows to
    provide residuals() and fitted() methods for smoothing splines.

    o   Attempting source(file, chdir=TRUE) with a URL or connection
    for 'file' now gives a warning and ignores 'chdir'.

    o   source() closes its input file after parsing it rather than
    after executing the commands, as used to happen prior to
    2.1.0.  (This is probably only significant on Windows where
    the file is locked for a much shorter time.)

    o   split(), split<-(), unsplit() now have a new argument 'drop = FALSE',
    by default not dropping empty levels; this is *not* back compatible.

    o   sprintf() now supports asterisk `*' width or precision
    specification (but not both) as well as `*1$' to `*99$'.  Also the
    handling of `%' as conversion specification terminator is now
    left to the system and doesn't affect following specifications.

    o   The plot method for stl() now allows the colour of the range
    bars to be set (default unchanged at "light gray").

    o   Added tclServiceMode() function to the tcltk package to allow
    updating to be suspended.

    o   terms.formula() no longer allows '.' in a formula unless there
    is a (non-empty) 'data' argument or 'allowDotAsName = TRUE' is
    supplied.  We have found several cases where 'data' had not
    been passed down to terms() and so '.' was interpreted as a
    single variable leading to incorrect results.

    o   New functions trans3d(), the 3D -> 2D utility from persp()'s
    example, and extendrange(), both in package 'grDevices'.

    o   TukeyHSD() now returns p-values adjusted for multiple comparisons
    (based on a patch contributed by Fernando Henrique Ferraz P. da Rosa).

    o   New functions URLencode() and URLdecode(), particularly for use
    with file:// URLs.  These are used by e.g. browse.env(),
    download.file(), download.packages() and various help() print
    methods.

    o   Functions utf8ToInt() and intToUtf8() to work with UTF-8
    encoded character strings (irrespective of locale or OS-level
    UTF-8 support).

    o   [dqp]wilcox and wilcox.test work better with one very large sample
    size and an extreme first argument.

    o   write() has a new argument 'sep'.

    o   write.csv[2] now also support row.names = FALSE.



    o   The specification of the substitutions done when processing
    Renviron files is more liberal: see ?Startup.  It now
    accepts forms like R_LIBS=${HOME}/Rlibrary:${WORKGRP}/R/lib .

    o   Added recommendation that packages have an overview man page
    <pkg>-package.Rd, and the promptPackage() function to create a
    skeleton version.

    o   Replacement indexing of a data frame by a logical matrix index
    containing NAs is allowed in a few more cases, in particular
    always when the replacement value has length one.

    o   Conversion of .Rd files to latex now handles encoding more
    comprehensively, including some support for UTF-8.

    o   The internal regex code has been upgraded to glibc-2.3.5.
    Apart from a number of bug fixes, this should be somewhat
    faster, especially in UTF-8 locales.

    o   PCRE has been updated to version 6.2.

    o   zlib has been updated to version 1.2.3.

    o   bzip2 has been updated to version 1.0.3.

    o   Complex arithmetic is now done by C99 complex types where
    supported.  This is likely to boost performance, but is
    subject to the accuracy with which it has been implemented.

    o   The printing of complex numbers has changed, handling numbers
    as a whole rather than in two parts.  So both real and
    imaginary parts are shown to the same accuracy, with the
    'digits' parameter referring to the accuracy of the larger
    component, and both components are shown in fixed or
    scientific notation (unless one is entirely zero when it is
    always shown in fixed notation).

    o   Error messages from .C() and .Fortran(), and from parsing errors,
    are now more informative.

    o   The date and date-time functions work better with dates more
    than 5000 years away from 1970-01-01 (by making dubious
    assumptions about the calendar in use).

    o   There is now a traditional Chinese translation, and a much more
    extensive Russian translation.


DEPRECATED & DEFUNCT

    o   Capability "IEEE754" is defunct.

    o   loadURL() is defunct: use load(url()).

    o   delay() is defunct: use delayedAssign() instead.

    o   The 'CRAN' argument to update.packages(), old.packages(),
    new.packages(), download.packages() and install.packages() is
    defunct in favour of 'repos'.

    o   write.table0() is deprecated in favour of the much faster
    write.table().

    o   format.char() is deprecated in favour of format.default().

    o   R_HOME/etc/Rprofile is no longer looked for if
    R_HOME/etc/Rprofile.site does not exist.  (This has been
    undocumented since R 1.4.0.)

    o   CRAN.packages() is deprecated in favour of available.packages().

    o   Rd.sty no longer processes pre-2.0.0 conversions containing \Link.

    o   The stubs for the defunct device GNOME/gnome have been removed.

    o   print.matrix() (which has been identical to print.default since
    R 1.7.0) has been removed.


INSTALLATION

    o   LDFLAGS now defaults to -L/usr/local/lib64 on most Linux
    64-bit OSes (but not ia64).  The use of lib/lib64 can be
    overridden by the new variable LIBnn.

    o   The default installation directory is now ${prefix}/${LIBnn}/R,
    /usr/local/lib64/R on most 64-bit Linux OSes and /usr/local/lib/R
    elsewhere.

    o   The places where the doc, include and share directory trees are
    installed can be specified independently: see the R-admin manual.

    o   We now test for wctrans_t, as apparently some broken OSes have
    wctrans but not wctrans_t (which is required by the relevant
    standards) .

    o   Any external BLAS found is now tested to see if the complex
    routine zdotu works correctly: this provides a compatibility
    test of compiler return conventions.

    o   Installation without NLS is now cleaner, and does not install
    any message catalogues.

    o   src/modules/lapack/dlamc.f is now compiled with -ffloat-store
    if f2c/gcc are used, as well as if g77 is used.

    o   All the Fortran code has been checked to be fully F77
    compliant so there are no longer any warnings from F95
    compilers such as gfortran.

    o   The (not-recommended) options --with-system-zlib,
    --with-system-bzlib and -with-system-pcre now have 'system' in
    the name.

    o   If a Java runtime environment is detected at configure time
    its library path is appended to LD_LIBRARY_PATH or equivalent.
    New Java-related variables JAVA_HOME (path to JRE/JDK), JAVA_PROG
    (path to Java interpreter), JAVA_LD_PATH (Java library path)
    and JAVA_LIBS (flags to link against JNI) are made available
    in Makeconf.

    o   Ei-ji Nakama was contributed a patch for FPU control with the
    Intel compilers on ix86 Linux.


MAC OS X INSTALLATION

    o   --with-blas="-framework vecLib" --with-lapack and
    --with-aqua are now the default configure options.

    o   The default framework version name was changed to not contain
    the patch level (i.e. it is now 2.2 instead of 2.2.0).  Also
    it can be overridden at configure time by setting FW_VERSION
    to the desired name.

    o   The Rmath stand-alone library is now correctly installed inside
    the R.framework if R was configured as a framework.  In
    addition, make install-Rmath-framework will install a
    stand-alone Rmath framework in /Library/Frameworks (unless
    overridden by RMATH_FRAMEWORK_DIR specifying full framework
    path and name including the .framework extension).


PACKAGE INSTALLATION

    o   The encoding for a packages' 00Index.html is chosen from the
    Encoding: field (if any) of the DESCRIPTION file and from the
    \encoding{} fields of any Rd files with non-ASCII titles.
    If there are conflicts, first-found wins with a warning.

    o   R_HOME/doc/html/packages.html is now remade by R not Perl code.
    This may result in small changes in layout and a change in
    encoding (to UTF-8 where supported).

    o   The return value of new.packages() is now updated for any
    packages which may be installed.

    o   available.packages() will read a compressed PACKAGES.gz file in
    preference to PACKAGES if available on the repository: this
    will reduce considerably the download time on a dialup connection.

    The downloaded information about a repository is cached for the
    current R session.

    o   The information about library trees found by
    installed.packages() is cached for the current session, and
    updated only if the modification date of the top-level
    directory has been changed.

    o   A data index is now installed for a package with a 'data' dir
    but no 'man' dir (even though it will have undocumented data objects).

    o   contrib.url path for type="mac.binary" has changed from
    bin/macosx/<version> to bin/macosx/<arch>/contrib/<version>
    where <arch> corresponds to R.version$arch


UTILITIES

    o   checkFF() used by R CMD check has since R 2.0.0 not reported
    missing PACKAGE arguments when testing installed packages with
    namespaces.  It now

    - treats installed and source packages in the same way.

    - reports missing arguments unless they are in a function in
      the namespace with a useDynLib declaration (as the
      appropriate DLL for such calls can be searched for).

    o   Rd2dvi sets the encoding(s) used appropriately.  If UTF-8
    encoding is used, latex >= 2003/12/01 is required.

    o   codoc() allows help files named pkg_name-defunct.Rd to have
    undocumented arguments (and not just base-defunct.Rd).


C-LEVEL FACILITIES

    o   C function massdist() {called from density()} has new argument
    'xmass' (= weights).

    o   Raw vectors passed to .C() are now passed as unsigned char *
    rather than as SEXPs.  (Wish of Keith Frost, PR#7853)

    o   The search for symbols in a .C/.Call/... call without a
    package argument now searches for an enclosing namespace and
    so finds functions defined within functions in a namespace.

    o   R_max_col() has new (5th) argument '*ties_meth' allowing
    non-random behavior in the case of ties.

    o   The header files have been rationalized: the BLAS routine
    LSAME is now declared in BLAS.h not Linpack.h, Applic.h no
    longer duplicates routines from Linpack.h, and Applic.h is
    divided into API and non-API sections.

    o   memory.c has been instrumented so that Valgrind can track R's
    internal memory management.  To use this, configure using
           --with-valgrind-instrumentation=level
    where level is 1 or 2.  Both levels will find more bugs with
    gctorture(TRUE).  Level 2 makes Valgrind run extremely slowly.

    o   Some support for raw vectors has been added to Rdefines.h.

    o   R_BaseEnv has been added, to refer to the base environment.
    This is currently equal to R_NilValue, but it will change in
    a future release.


BUG FIXES

    o   %/% has been adjusted to make x == (x %% y) + y * ( x %/% y )
    more likely in cases when extended-precision registers were
    interfering.

    o   Operations on POSIXct objects (such as seq(), max() and
    subsetting) try harder to preserve time zones and warn if
    inconsistent time zones are used.

    o   as.function.default() no longer asks for a bug report when
    given an invalid body. (PR#1880, PR#7535, PR#7702)

    o   Hershey fonts and grid output (and therefore lattice output)
    now rescale correctly in fit-to-window resizing on a Windows
    graphics device.  Line widths also scale now.

    o   Plotmath has more support for multibyte characters (contributed
    by Ei-ji Nakama).

    o   The X11() device now hints the window manager so that decorations
    appear reliably under e.g. the GNOME WM  (contributed
    by Ei-ji Nakama).

    o   Subsetting a matrix or an array as a vector used to attempt to
    use the row names to name the result, even though the
    array might be longer than the row names.  Now this is only
    done for 1D arrays when it is done in all cases, even matrix
    indexing.  (Tidies up after the fix to PR#937.)

    o   Constants in mathlib are declared 'const static double' to
    avoid performance issues with the Intel Itanium compiler.

    o   The parser checks the format of numeric constants more
    thoroughly so for example '123E-' is no longer valid.

    o   contourLines() no longer requires an open device (used to
    start a device unnecessarily).  Fix suggested by Barry Rowlingson.

    o   capabilities() used partial matching but was not documented
    to: it no longer does so.

    o   kernel(1,0) printed wrongly;  kernel(<name-string>, *) now returns
    a named kernel in all cases; plot(kernel(.),..) is more flexible.

    o   qgamma(1,s) didn't give +Inf for some s.

    o   installed.packages() and download.packages() now always
    return a matrix as documented, possibly with 0 rows (rather than
    a 0-length character vector or NULL).

    o   Arithmetic operations on data frames no longer coerce the
    names to syntatically valid names.

    o   Units are now properly recycled in grid layouts
    when 'widths' or 'heights' are shorter than the number of
    columns or rows (PR#8014).

    o   DF <- data.frame(A=1:2, B=3:4); DF[1, 1:3] <- NULL gave a wrong
    error message.

    o   spline()/spinefun()'s C code had a memory access buglet which
    never lead to incorrect results.  (PR#8030)

    o   sum() was promoting logical arguments to double not integer
    (as min() and other members of its group do).

    o   loess() had a bug causing it to occasionally miscalculate
    standard errors (PR#7956).  Reported by Benjamin Tyner, fixed
    by Berwin Turlach.

    o   library(keep.source=) was ignored if the package had a
    namespace (the setting of options("keep.source.pkgs") was
    always used).

    o   hist.POSIXct() and hist.Date() now respect par("xaxt").

    o   The 'vfont' argument was not supported correctly in title(),
    mtext(), and axis().  The 'vfont' argument is superseded by
    the par(family=) approach introduced in 2.0.0.  This bug-fix
    just updates the warning messages and documentation to
    properly reflect the new order of things.

    o   The C-level function PrintGenericVector could overflow if
    asked to print a length-1 character vector of several thousand
    characters.  This could happen when printing a list matrix,
    and was fatal up to 2.1.1 and silently truncated in 2.1.1 patched.

    o   What happened for proc.time() and system.time() on
    (Unix-alike) systems which do not support timing was
    incorrectly documented.  (They both exist but throw an error.)
    Further, systen.time() would give an error in its on.exit
    expression.

    o   weighted.residuals() now does sensible things for glm() fits:
    in particular it now agrees with an lm() fit for a Gaussian glm()
    fit.  (PR#7961).

    o   The 'lm' and 'glm' methods for add1() took the weights and
    offset from the original fit, and so gave errors in the
    (dubious) usage where the upper scope resulted in a smaller
    number of cases to fit (e.g. by omitting missing values in new
    variables).  (PR#8049)

    o   demo() had a 'device' argument that did nothing (although it
    was documented to): it has been removed.

    o   Setting new levels on a factor dropped all existing
    attributes, including class "ordered".

    o   format.default(justify="none") now by default converts NA
    character strings, as the other values always did.

    o   format.info() often gave a different field width from format()
    for character vectors (e.g. including missing values or
    non-printable characters).

    o   axis() now ensures that if 'labels' are supplied as character
    strings or expressions then 'at' is also supplied (since the
    calculated value for 'at' can change under resizing).

    o   Defining S4 methods for "[" had resulted in changed behavior of S3
    dispatch in a very rare case which no longer happens.

    o   Fixed segfault when PostScript font loading fails, e.g., when
    R is unable to find afm files (reported by Ivo Welch).

    o   R CMD BATCH <file> now also works when <file> does not end in a
    newline on Unix-alike platforms.

    o   terms.formula() got confused if the 'data' argument was a list with
    non-syntactic names.

    o   prompt() and hence package.skeleton() now produce *.Rd files that
    give no errors (but warnings) when not edited, much more often.

    o   promptClass() and promptMethods() now also escape "%" e.g. in '%*%'
    and the latter gives a message about the file written.

    o   wilcox.test() now warns when conf.level is set higher than
    achievable, preventing errors (PR#3666) and incorrect answers
    with extremely small sample sizes.

    o   The default (protection pointer) stack size (the default for
    '--max-ppsize') has been increased from 10000 to 50000 in order to
    match the increased default options("expressions") (in R 2.1.0).

    o   The R front-end was expecting --gui=tk not Tk as documented,
    and rejecting --gui=X11.

    o   Rdconv -t latex protected only the first << and >> in a chunk
    against conversion to guillemets.

    o   callNextMethod() and callGeneric() have fixes related to
    handling arguments.

    o   ls.diag() now works for fits with missing data. (PR#8139)

    o   window.default() had an incorrect tolerance and so sometimes
    created too short a series if 'start' or 'end' were zero.

    o   Some (fairly pointless) cases of reshape left a
    temporary id variable in the result (PR#8152)

    o   R CMD build used 'tar xhf' which is invalid on FreeBSD systems
    (and followed tar chf, so there could be no symbolic links in
    the tarball).

    o   Subassignment of length zero vectors to NULL gave garbage
    answers. (PR#8157)

    o   Automatic coercion of raw vectors to lists was missing, so for a
    list (or data frame) z, z[["a"]] <- raw_vector did not work
    and now does.  This also affected DF$a <- raw_vector for a
    data frame DF.

    o   The internal code for commandArgs() was missing PROTECTs.

    o   The width for strwrap() was used as one less than specified.

    o   R CMD INSTALL was not cleaning up after an unsuccessful
    install of a non-bundle which was not already installed.




    **************************************************
    *                        *
    *          2.1 SERIES NEWS           *
    *                        *
    **************************************************


        CHANGES IN R VERSION 2.1.1 patched


BUG FIXES

    o   runmed(x, k = -1) now gives an error instead of a seg.fault.

    o   File creation errors in pdf(), postscript(), xfig() resulted
    in a pointer being freed twice.  (Reported by Matt McCall)

    o   model.matrix(~ .^2, data=foo) now works as most people would
    expect (it used to expand '.' after using the a^2 = a rule).

    o   ftable() and xtabs() had a check for interactions that would
    not work correctly with '.' in the formula.

    o   The formula method for pairs() was ignoring the na.action argument.

    o   scan() with the default separator (only) was stripping backslashes
    inside quoted string inputs even if allowEscapes = FALSE.

    o   The "col" parameter to pairs() is now treated consistently with
    plot():  it affects the data, not the axes.  (Patch submitted
    by Olaf Mersmann)

    o   Sweave failed for \Sexpr{character(0)}.  Sweave-test-1.Rnw
    contained a print() statement that is no longer needed.

    o   Typo meant that R_alloc was limited to 2^31 not 2^34 on 64-bit
    builds of R.

    o   pgamma(Inf, shape) did not terminate for shape = 1.1 and some
    other values (but not all) (PR#8001).  This affected
    pchisq(Inf, df1) and pf(Inf, df1, Inf) for some values of df1.

    o   regexpr("[a-z]", ...) could cause a buffer overrun with multi-byte
    character sets, leading to random errors later.

    o   Installing a package with a 'data' directory which contains
    files but those files generate no objects (e.g. the BioC
    package makecdfenv) created an incorrectly formatted data
    index that data(package="pkg") could not read.

    o   density(1/(0:2)) now works again (PR#8033).

    o   make.names() was not respecting the allow_=FALSE argument.

    o   Arg(-1) now gives pi, not 0; Arg(0i + -1) always worked.

    o   --enable-linux-lfs had been broken at 2.1.0.

    o   Printing was not allowing for double-width characters in its
    layout.

    o   axTicks() is now also correct for reverse axis.  (PR#7973)

    o   signif() rounded some numnbers near 1e-308 to the wrong
    number of places (this showed up in the print-tests.R), and made
    unnecessary rounding errors on some platforms on e.g. signif(18000, 3).

    o   window() was sometimes failing incorrectly due to representation
    errors when the new and old deltat were not both integers
    (e.g. multiples of 0.1).

    o   The 'lm' methods for add1() and drop1() ignored offsets (which
    were added for lm() after they written).  (PR#8049)

    o   atan2(0+1i, 0+0i) was incorrectly NA (from a typo in complex.c).

    o   The POSIXct method for as.Date() was rounding part days
    before 1970-01-01 upwards rather than discarding them.

    o   qpois() was using an incorrect starting point and so could be
    unnecessarily slow for large lambda.  (PR#8058)

    o   Formatting of complex numbers with nsmall > 0 could be
    incorrect (and was in print-tests.Rout) because of a typo.

    o   The test for new levels when predicting using model.frame()
    sometimes reported levels that were not actually used.

    o   order(c("5","6",NA,"4",NA), na.last=FALSE) was incorrect.

    o   Coercion to raw could give spurious messages about discarding
    imaginary parts.

    Coercion of a list to raw was behaving inconsistently for
    out-of-range values (and not warning).

    o   cor.test(method = "spearman") gave NA p-values for _very_ long
    vectors. (PR#8087)

    o   Switching to the Mersenne-Twister RNG could cause a segfault on
    first use.

    A user-supplied RNG without user_unif_{nseed,seedloc} was
    being re-initialized at each call.

    o   Reading very short tables from stdin() with read.table would
    fail because of a typo.




        CHANGES IN R VERSION 2.1.1


NEW FEATURES

    o   bug.report() now reports the locale in use.

    o   upgrade.packageStatus() allows user input "c" to cancel the
    upgrade, just as update.packages() does.

    o   glm() now accepts 1D arrays (e.g. tables) as a response,
    dropping them to a vector whilst preserving names.

    o   df() with one infinite df now works (to match pf()).

    o   Added tclServiceMode() function to the tcltk package to allow
    updating to be suspended.

    o   The Encoding: field of a DESCRIPTION file is now documented,
    and used by packageDescription() and library(help=).

    o   There has been progress on translations: existing translations
    have been revised and expanded, and French and Korean have
    been added.

    The Windows installer supports a wide range of languages for
    installation.


BUG FIXES

    o   lm(qr=FALSE) now works.

    o   predict.glm() not longer loses names for "response" predictions.
    (PR#7792)

    o   Typo in menu(graphics=TRUE) meant it failed on Unix if tcltk
    was not available.

    o   When names.dist() was removed, the result of cmdscale() lost
    its rownames.  The example also lost the labels.

    o   R CMD check assumed 'tar' was GNU tar and so supported -z.

    o   read.table() was not handing escaped quotes inside quoted fields
    in the first five lines of the file.  (PR#7789)

    It was also not handling correctly EOF in the first five lines
    when reading from stdin().  (PR#7772)

    o   'make uninstall' was incomplete.

    o   make.packages.html() called by help.start() was failing if
    there were installed packages with help titles invalid in the
    current locale.

    o   printCoefmat(signif.legend = FALSE) was non-functional. (PR#7802)

    o   Some as.date.frame() methods failed because the expression
    deparsed into multiple lines. (PR#7808)

    o   setRepositories() had a typo. (PR#7810)

    o   Printing arrays/data frames with multibyte characters in the
    column labels was sometimes misaligned or using excessive space.
    (PR#7803)

    o   The Tcl/Tk console did not support multibyte characters.

    o   as.POSIXlt() could give infinite recursion if passed a corrupt
    "POSIXct" object (generated by an incorrect call to c.POSIXct,
    PR#7826).

    o   update.packages() was not passing 'type' correctly to
    install.packages().

    o   Printing the result of an unbalanced model.tables() call
    sometimes got confused if terms() had rearranged interaction
    terms.  (PR#7829)

    o   .Platform$pkgType was wrong on the CRAN MacOS X build, and
    .install.macbinary() was missing.

    o   as.personList() as used by citation() got confused by names
    containing "and".  (PR#7797)

    o   Subscripting an array by a matrix containing zero or negative
    values or the wrong number of columns was not handled
    consistently. (PR#7824)

    o   select.list(multiple=TRUE) now detects and tries again for invalid
    text input.

    o   add1.[g]lm could give strange results with interaction terms
    when the model and the upper scope had different orders for
    the main effects.  (PR#7842)

    o   A bug had sneaked into the anova.mlmlist() code, affecting the
    Greenhouse-Geisser epsilon. Code wrongly assumed a matrix to
    be symmetric. (Thanks to Bela Bauer.)

    o   anova.mlmlist() and mauchley.test() are now more tolerant to rank
    deficiency in the M and X matrices (also when they are implicitly
    generated via model.matrix()).

    o   anova.mlm had a scoping issue (PR#7898)

    o   pf() with infinite df is allowed again.  It is now more accurate
    for extreme ratios of dfs, especially when there is a
    non-centrality parameter.

    o   df() was inaccurate for large df (1e16 or greater).

    o   dt() was inaccurate for large df (1e9 or greater) with a
    non-centrality parameter.

    o   runmed(*, algorithm="Turlach") seg.faulted in rare cases.

    o   strwrap() now makes a reasonable job of text that is invalid in the
    current locale.

    o   Reading with encoding "UCS-2LE" will remove any Byte Order
    Mark, as most implementations of iconv fail to handle BOMs
    (which are present in 'Windows Unicode' files).

    o   unique() for a list was incorrectly reporting `unimplemented'.

    o   The parser's contextstack was not protected against overflow,
    e.g. more than 50 unmatched '('.  (PR#7859)

    o   source(file, chdir = TRUE) was not checking that 'file' was a
    filepath (rather than a URL).  For 2.1.0 only, it did not work
    even if 'file' was a filepath.

    o   Hershey fonts were being sized based on pixels not points so came
    out too small on devices where pixels were noticeably different
    from points (e.g., win.printer() and high-resolution screens).

    Fix means that default size of Hershey fonts may be slightly
    different, for example, smaller by default on PostScript and PDF.

    o   The branch cuts in the complex versions of the inverse
    trigonometric and hyperbolic functions were non-standard.
    (PR#7871)

    o   truncate() on file() connections was limited to files < 2Gb.  It
    now works for larger files at least on 64-bit OSes and others
    where ftruncate supports such files.  (Related to PR#7879)

    o   proj.aovlist() did not work correctly on objects fitted from a
    data frame with row names.

    o   The coding standards recommendations had
    nuke-trailing-whitespace where newer versions of ESS need
    ess-nuke-trailing-whitespace.  (PR#7888)

    o   package.skeleton() missed the first newline in the DESCRIPTION file.

    o   pbirthday() reported p = 1 too often when coincident > 2.

    o   plot(1:3, exp(1:3), log = "y", ylim = c(30,1)) {reversed
    log-scale axis} now works, based on Uwe Ligges' suggestions.
    (PR#7894)

    o   install.packages() was aborting when a package in a bundle was
    chosen from a menu.  It failed if more than one package in a
    bundle was chosen from the command line.

    o   qcauchy() suffered from underflow in the extreme tails.  (PR#7902)

    o   Printing of raw matrices/arrays was not implemented. (PR#7912)

    o   getCallingDLL()'s default first argument did not correspond to
    its description and has been changed.  The mismatch caused
    symbols in .C/.Call/.Fortran calls without a PACKAGE= argument
    to be potentially looked up in the wrong namespace.

    o   Binary save() of raw vectors was not working correctly on
    big-endian platforms.  (PR#7812)

    o   as.Date.factor() now accepts a format argument.

    o   Workaround added for FreeBSD which does not have alloca.h _and_
    does not allow alloca() to be declared.

    o   identify() now respects 'cex'.  (PR#660)

    Warnings from identify() are now printed immediately even on
    consoles with delayed printing.



        CHANGES IN R VERSION 2.1.0


USER-VISIBLE CHANGES

    o   box plots {by boxplot() or bxp()} now have the median line three
    times the normal line width in order to distinguish it from the
    quartile ones.

    o   Unix-alike versions of R can now be used in UTF-8 locales on
    suitably equipped OSes.  See the internationalization section
    below.

    o   The meaning of 'encoding' for a connection has changed: See the
    internationalization section below.

    o   There has been some rationalization of the format of
    warning/error messages, to make them easier to translate.
    Generally names of functions and arguments are single-quoted,
    and classes double-quoted.

    o   Reading text files with embedded "\" (as in Windows file names)
    may now need to use scan(* , allowEscapes = FALSE), see also below.


NEW FEATURES

    o   %% now warns if its accuracy is likely to be affected by lack
    of precision (as in 1e18 %% 11, the unrealistic expectation of
    PR#7409), and tries harder to return a value in range when it is.

    o   abbreviate() now warns if used with non-ASCII chars, as the
    algorithm is designed for English words.

    o   The default methods for add1() and drop1() check for changes
    in the number of cases in use.

    The "lm" and "glm" methods for add1() quoted the <none> model
    on the original fitted values when using (with a warning) a
    smaller set of cases for the expanded models.

    o   Added alarm() function to generate a bell or beep or visual alert.

    o   all/any() now attempt to coerce their arguments to logical, as
    documented in the Blue Book.  This means e.g. any(list()) works.

    o   New functions for multivariate linear models: anova.mlm(),
    SSD(), estVar(), mauchley.test() (for sphericity).

    vcov() now does something more sensible for "mlm" class objects.

    o   as.data.frame.table() has a new argument 'responseName'
    (contributed by Bill Venables).

    o   as.dist() and cophenetic() are now generic, and the latter has a
    new method for objects of class "dendrogram".

    o   as.ts() is now generic.

    o   binomial() has a new "cauchit" link (suggested by Roger Koenker).

    o   chisq.test() has a new argument 'rescale.p'.  It is now possible
    to simulate (slowly) the P value also in the 1D case
    (contributed by Rolf Turner).

    o   choose(n,k) and lchoose(.) now also work for arbitrary (real) n
    in accordance with the general binomial theorem.  choose(*,k)
    is more accurate (and faster) for small k.

    o   Added colorRamp() and colorRampPalette() functions for color
    interpolation.

    o   colSums()/rowSums() now allow arrays with a zero-length extent
    (requested by PR#7775).

    o   confint() has stub methods for classes "glm" and "nls" that
    invoke those in package MASS.  This avoids using the "lm"
    method for "glm" objects if MASS is not attached.

    confint() has a default method using asymptotic normality.

    o   contr.SAS() has been moved from the 'nlme' package to the
    'stats' package.

    o   New function convertColors() maps between color spaces.
    colorRamp() uses it.

    o   The cov() function in the non-Pearson cases now ranks data after
    removal of missing values, not before.  The pairwise-complete
    method should now be consistent with cor.test.  (Code
    contributed by Shigenobu Aoki.)

    o   Added delayedAssign() function to replace delay(), which is now
    deprecated.

    o   dir.create() has a new argument 'recursive' serving the same
    purpose as Unix's mkdir -p.

    o   do.call() now takes either a function or a character string as
    its first argument.  The supplied arguments can optionally be
    quoted.

    o   duplicated() and unique() now accept "list" objects, but are
    fast only for simple list objects.

    o   ecdf() now has jumps of the correct size (a multiple of 1/n)
    if there are ties.  (Wished by PR#7292).

    o   eff.aovlist() assumed orthogonal contrasts for any term
    with more than one degree of freedom: this is now documented
    and checked for.  Where each term only occurs in only one
    stratum the efficiencies are all one: this is detected and
    orthogonal contrasts are not required.

    o   New function encodeString() to encode character strings in the
    same way that printing does.

    o   file("clipboard") now work for reading the primary selection on
    Unix-alikes with an active X11 display.  (It has long worked
    for reading and writing under Windows.)  The secondary
    selection can also be read: see ?file.

    file() now allows mode "w+b" as well as "w+".

    o   file.append() has been tuned, including for the case of
    appending many files to a single file.

    o   Functions flush.console() and select.list() are now available
    on all platforms.  There is a Tcl/Tk-based version of
    select.list() called tk_select.list() in package tcltk.

    o   gc() now reports maximum as well as current memory use.

    o   A new function getGraphicsEvent() has been added which will allow
    mouse or keyboard input from a graphics device. (NB: currently
    only the Windows screen device supports this function.  This
    should improve before the 2.1.0 release.)

    o   New functions gray.colors()/grey.colors() for gray color
    palettes.

    o   grep(), gsub(), sub() and regexpr() now always attempt to
    coerce their 'pattern', 'x', 'replacement' and 'text'
    arguments to character.  Previously this was undocumented but
    done by [g]sub() and regexpr() for some values of their
    other arguments.  (Wish of PR#7742.)

    o   gsub/sub() have a new 'fixed' method.

    o   New function hcl() for creating colors for a given hue,
    chroma and luminance (i.e. perceptual hsv).

    o   isTRUE() convenience function to be used for programming.

    o   kmeans() now returns an object of class "kmeans" which has a
    print() method.

    Two alternative algorithms have been implemented.

    If the number of centres is supplied, it has a new option of
    multiple random starts.

    o   The limits on the grid size in layout() are now documented, and
    have been raised somewhat by using more efficient internal
    structures.

    o   legend() now accepts positioning by keyword, e.g. "topleft",
    and can put a title within the legend.  (Suggested by Elizabeth
    Purdom in PR#7400.)

    o   mahalanobis() now has a '...' argument which is passed to solve()
    for computing the inverse of the covariance matrix, this replaces
    the former 'tol.inv' argument.

    o   menu() uses a multi-column layout if possible for more than
    10 choices.

    menu(graphics = TRUE) is implemented on most platforms via
    select.list() or tk_select.list().

    o   New function message() in 'base' for generating "simple"
    diagnostic messages, replacing such a function in the
    'methods' package.

    o   na.contiguous() is now (S3) generic with first argument
    renamed to 'object'.

    o   New function normalizePath() to find canonical paths (and on
    Windows, canonical names of components).

    o   The default in options("expressions") has been increased to 5000,
    and the maximal settable value to 500000.

    o   p.adjust() has a new method "BY".

    o   pbeta() now uses a different algorithm for large values of at
    least one of the shape parameters, which is much faster and is
    accurate and reliable for very large values.  (This affects
    pbinom(), pf(), qbeta() and other functions using pbeta at C
    level.)

    o   pch="." now by default produces a rectangle at least 0.01" per
    side on high-resolution devices.  (It used to be one-pixel
    square even on high-resolution screens and Windows printers,
    but 1/72" on postscript() and pdf() devices.)  Additionally,
    the size is now scalable by 'cex'; see ?points and note that
    the details are subject to change.

    o   pdf() now responds to the 'paper' and 'pagecentre'
    arguments.  The default value of 'paper' is "special"
    for backward-compatibility (this is different from the
    default for postscript()).

    o   plot.data.frame() tries harder to produce sensible plots for
    non-numeric data frames with one or two columns.

    o   The predict() methods for "prcomp" and "princomp" now match
    the columns of 'newdata' to the original fit using column
    names if these are available.

    o   New function recordGraphics() to encapsulate calculations
    and graphics output together on graphics engine display list.
    To be used with care.

    o   New function RSiteSearch() to query R-related resources
    on-line (contributed by Jonathan Baron and Andy Liaw).

    o   scan() arranges to share storage of duplicated character
    strings read in: this can dramatically reduce the memory
    requirements for large character vectors which will
    subsequently be turned into factors with relatively few
    levels.  For a million items this halved the time and reduced
    storage by a factor of 20.

    scan() has a new argument 'allowEscapes' (default TRUE) that
    controls when C-style escapes in the input are interpreted.
    Previously only \n and \r were interpreted, and then only
    within quoted strings when no separator was supplied.

    scan() used on an open connection now pushes back on the
    connection its private `ungetc' and so is safer to use to
    read partial lines.

    o   scatter.smooth() and loess.smooth() now handle missing values
    in their inputs.

    o   seq.Date() and seq.POSIXt() now allow 'to' to be before 'from'
    if 'by' is negative.

    o   sprintf() has been enhanced to allow the POSIX/XSI specifiers
    like "%2$6d", and also accepts "%x" and "%X".

    sprintf() does limited coercion of its arguments.

    sprintf() accepts vector arguments and operates on them in
    parallel (after re-cycling if needed).

    o   New function strtrim() to trim character vectors to a display
    width, allowing for double-width characters in multi-byte
    character sets.

    o   subset() now has a method for matrices, similar to that for
    data frames.

    o   Faster algorithm in summaryRprof().

    o   sunflowerplot() has new arguments 'col' and 'bg'.

    o   sys.function() now has argument 'which' (as has long been
    presaged on its help page).

    o   Sys.setlocale("LC_ALL", ) now only sets the locale categories
    which R uses, and Sys.setlocale("LC_NUMERIC", ) now gives a
    warning (as it can cause R to malfunction).

    o   unclass() is no longer allowed for environments and external
    pointers (since these cannot be copied and so unclass() was
    destructive of its argument).  You can still change the
    "class" attribute.

    o   File-name matching is no longer case-insensitive with unz()
    connections, even on Windows.

    o   New argument 'immediate.' to warning() to send an immediate
    warning.

    o   New convenience wrappers write.csv() and write.csv2().

    o   There is a new version for write.table() which is implemented in C.
    For simple matrices and data frames this is several times
    faster than before, and uses negligible memory compared to the
    object size.

    The old version (which no longer coerces a matrix to a data
    frame and then back to a matrix) is available for now as
    write.table0().

    o   The functions xinch(), yinch(), and xyinch() have been moved
    from package 'grDevices' into package 'graphics'.


    o   Plotmath now allows underline in expressions.  (PR#7286,
    contributed by Uwe Ligges.)

    o   BATCH on Unix no longer sets --gui="none" as the X11 module
    is only loaded if needed.

    o   The X11 module (and the hence X11(), jpeg() and png() devices
    and the X-based dataentry editor) is now in principle
    available under all Unix GUIs except --gui="none", and this is
    reflected in capabilities().

    capabilities("X11") determines if an X server can be accessed,
    and so is more likely to be accurate.

    o   Printing of arrays now honours the 'right' argument if there
    are more than two dimensions.

    o   Tabular printing of numbers now has headers right-justified, as
    they were prior to version 1.7.0 (spotted by Rob Baer).

    o   Lazy-loading databases are now cached in memory at first use:
    this enables R to run much faster from slow file systems such
    as USB flash drives.  There is a small (less than 2Mb)
    increase in default memory usage.

    o   The implicit class structure for numeric vectors has been
    changed, so that integer/real vectors try first methods for
    class "integer"/"double" and then those for class "numeric".

    The implicit classes for matrices and arrays have been changed
    to be "matrix"/"array" followed by the class(es) of the
    underlying vector.

    o   splines::splineDesign() now allows the evaluation of a B-spline
    basis everywhere instead of just inside the "inner" knots, by
    setting the new argument `outer.ok = TRUE'.

    o   Hashing has been tweaked to use half as much memory as before.

    o   Readline is not used for tilde expansion when R is run with
    --no-readline, nor from embedded applications.  Then "~name"
    is no longer expanded, but "~" still is.

    o   The regular expression code is now based on that in glibc 2.3.3.
    It has stricter conformance to POSIX, so metachars such as
    { } + * may need to be escaped where before they did not
    (but could have been).

    o   New encoding 'TeXtext.enc' improves the way postscript() works
    with Computer Modern fonts.

    o   Replacement in a non-existent column of a data frame tries
    harder to create a column of the correct length and so avoid a
    corrupt data frame.

    o   For Windows and readline-based history, the saved file size is
    re-read from R_HISTSIZE immediately before saving.

    o   Collected warnings during start-up are now printed before the
    initial prompt rather than after the first command.

    o   Changes to package 'grid':

    - preDrawDetails(), drawDetails(), and postDrawDetails()
      methods are now recorded on the graphics engine
      display list.   This means that calculations within these
      methods are now run when a device is resized or
      when output is copied from one device to another.

    - Fixed bug in grid.text() when 'rot' argument has length 0.
      (privately reported by Emmanuel Paradis)

    - New getNames() function to return just the names of all top-level
      grobs on the display list.

    - Recording on the grid display list is turned off within
      preDrawDetails(), drawDetails(), and postDrawDetails() methods.

    - Grid should recover better from errors or user-interrupts
      during drawing (i.e., not leave you in a strange viewport
      or with strange graphical parameter settings).

    - New function grid.refresh() to redraw the grid display list.

    - New function grid.record() to capture calculations
      with grid graphics output.

    - grobWidth and grobHeight ("grobwidth" and "grobheight" units)
      for primitives (text, rects, etc, ...) are now
      calculated based on a bounding box for the relevant grob.

      NOTE: this has changed the calculation of the size of a scalar
      rect (or circle or lines).

    - New arguments 'warn' and 'wrap' for function grid.grab()

    - New function grid.grabExpr() which captures the output from
      an expression (i.e., not from the current scene) without
      doing any drawing (i.e., no impact on the current scene).

    - upViewport() now (invisibly) returns the path that it goes up
      (suggested by Ross Ihaka).

    - The 'gamma' gpar has been deprecated (this is a device property
      not a property of graphical objects;  suggested by Ross Ihaka).

    - New 'lex' gpar;  a line width multiplier.

    - grid.text() now handles any language object as mathematical
      annotation (instead of just expressions).

    - plotViewport() has default value for 'margins' argument (that match
      the default value for par(mar)).

    - The 'extension' argument to dataViewport() can now be vector,
      in which case the first value is used to extend the xscale and
      the second value is used to extend the y scale.
      (suggested by Ross Ihaka).

    - All 'just' arguments (for viewports, layouts, rectangles, text)
      can now be numeric values (typically between 0 [left] and 1 [right])
      as well as character values ("left", "right", ...).

      For rectangles and text, there are additional 'hjust' and 'vjust'
      arguments which allow numeric vectors of justification in
      each direction (e.g., so that several pieces of text can have
      different justifications).
      (suggested by Ross Ihaka)

    - New 'edits' argument for grid.xaxis() and grid.yaxis() to
      allow specification of on-the-fly edits to axis children.

    - applyEdit(x, edit) returns x if target of edit (i.e., child
      specified by a gPath) cannot be found.

    - Fix for calculation of length of max/min/sum unit.  Length is
      now (correctly) reported as 1 (was reported as length of first arg).

    - Viewport names can now be any string (they used to have to be a
      valid R symbol).

    - The 'label' argument for grid.xaxis() and grid.yaxis() can now
      also be a language object or string vector, in which case it
      specifies custom labels for the tick marks.


INTERNATIONALIZATION

    o   Unix-alike versions of R can now be used in UTF-8 and other
    multi-byte locales on suitably equipped OSes if configured
    with option --enable-mbcs (which is the default).  [The
    changes to font handling in the X11 module are based on the
    Japanization patches of Ei-ji Nakama.]

    Windows versions of R can be used in `East Asian' locales on
    suitable versions of Windows.

    See the 'Internationalization' chapter in the 'Installation
    and Administration' manual.

    o   New command-line flag --encoding to specify the encoding to
    be assumed for stdin (but not for a console).

    o   New function iconv() to convert character vectors between
    encodings, on those OSes which support this.  See the new
    capabilities("iconv").

    o   The meaning of 'encoding' for a connection has changed: it now
    allows any charset encoding supported by iconv on the
    platform, and can re-encode output as well as input.

    As the new specification is a character string and the old was
    numeric, this should not cause incorrect operation.

    o   New function localeToCharset() to find/guess encoding(s) from
    the locale name.

    o   nchar() returns the true number of bytes stored (including any
    embedded nuls), this being 2 for missing values.  It has an
    optional argument 'type' with possible non-default values
    "chars" and "width" to give the number of characters or the
    display width in columns.

    o   Characters can be entered in hexadecimal as e.g. \x9c, and in
    UTF-8 and other multibyte locales as \uxxxx, \u{xxxx},
    \Uxxxxxxxx or \U{xxxxxxxx}.  Non-printable Unicode characters
    are displayed C-style as \uxxxx or \Uxxxxxxxx.

    o   LC_MONETARY is set to the locale, which affects the result of
    Sys.localeconv(), but nothing else in R itself.  (It could
    affect add-on packages.)

    o   source() now has an 'encoding' argument which can be used to
    make it try out various possible encodings.  This is made use
    of by example() which will convert (non-UTF-8) Latin-1 example
    files in a UTF-8 locale.

    o   read/writeChar() work in units of characters, not bytes.

    o   .C() now accepts an ENCODING= argument where re-encoding is
    supported by the OS.  See `Writing R Extensions'.

    o   delimMatch (tools) now reports match positions and lengths in
    units of characters, not bytes.  The delimiters can be
    strings, not just single ASCII characters.

    o   .Rd files can indicate via a \encoding{} argument the encoding
    that should be assumed for non-ASCII characters they contain.

    o   Phrases in .Rd files can be marked by \enc{}{} to show a
    transliteration to ASCII for use in e.g. text help.

    o   The use of 'pch' in points() now allows for multi-byte character
    sets: in such a locale a glyph can either be specified as a
    multi-byte single character or as a number, the Unicode point.

    o   New function l10n_info() reports on aspects of the
    locale/charset currently in use.

    o   scan() is now aware of double-byte locales such as Shift-JIS
    in which ASCII characters can occur as the second ('trail')
    byte.

    o   Functions sQuote() and dQuote() use the Unicode directional
    quotes if in a UTF-8 locale.

    o   The infrastructure is now in place for C-level error and warning
    messages to be translated and used on systems with Native
    Language Support.  This has been used for the startup message
    in English and to translate Americanisms such as 'color' into
    English: translations to several other languages are under
    way, and some are included in this release.

    See 'Writing R Extensions' for how to make use of this in a
    package: all the standard packages have been set up to do
    translation, and the 'language' 'en@quot' is implemented to
    allow Unicode directional quotes in a UTF-8 locale.

    o   R-level stop(), warning() and message() messages can be
    translated, as can other messages via the new function
    gettext(). Tools xgettext() and xgettext2pot() are provided in
    package tools to help manage error messages.

    gettextf() is a new wrapper to call sprintf() using
    gettext() on the format string.

    o   Function ngettext() allows the management of singular and
    plural forms of messages.


UTILITIES

    o   New functions mirror2html() and checkCRAN().

    o   R CMD check has a new option '--use-valgrind'.

    o   R CMD check now checks that Fortran and C++ files have LF
    line endings, as well as C files.  It also checks Makevars[.in]
    files for portable compilation flags.

    o   R CMD check will now work on a source tarball and prints out
    information about the version of R and the package.

    o   tools:::.install_package_code_files() (used to collate R files
    when installing packages) ensures files are separated by a
    line feed.

    o   vignette() now returns an object of class "vignette" whose
    print() method opens the corresponding PDF file.  The edit()
    method can be used to open the code of the vignette in an
    editor.

    o   R CMD INSTALL on Unix has a new option '--build' matching
    that on Windows, to package as tarball the installed package.

    o   R CMD INSTALL on Unix can now install binary bundles.

    o   R CMD build now changes src files to LF line endings if necessary.

    o   R CMD build now behaves consistently between source and binary
    builds: in each case it prepares a source directory and then
    either packages that directory as a tarball or calls R CMD
    INSTALL --build on the prepared sources.

    This means that R CMD build --binary now respects
    .Rbuildignore and will rebuild vignettes (unless the option
    --no-vignettes is used).  For the latter, it now installs the
    current sources into a temporary library and uses that version
    of the package/bundle to rebuild the vignettes.

    o   R CMD build now reports empty directories in the source tree.

    o   New function write_PACKAGES() in package 'tools' to help with
    preparing local package repositories.  (Based on a contribution
    by Uwe Ligges.)  How to prepare such repositories is
    documented in the 'R Installation and Administration' manual.

    o   package.skeleton() adds a bit more to DESCRIPTION.

    o   Sweave changes:

    - \usepackage[nogin]{Sweave} in the header of an Sweave file
      supresses auto-setting of the graphical parameter like width
      of graphics.

    - The new \SweaveInput{} command works similar to LaTeX's
      \input{} command.

    - Option value strip.white=all strips all blank lines from the
      output of a code chunk.

    - Code chunks with eval=false are commented out by Stangle() and
      hence no longer tested by R CMD check.


DOCUMENTATION

    o   File doc/html/faq.html no longer exists, and doc/manual/R-FAQ.html
    (which has active links to other manuals) is used instead.
    (If makeinfo >= 4.7 is not available, the version on CRAN is
    linked to.)

    o   Manual 'Writing R Extensions' has further details on writing
    new front-ends for R using the new public header files.

    o   There are no longer any restrictions on characters in the
    \name{} field of a .Rd file: in particular _ is supported.


C-LEVEL FACILITIES

    o   There are new public C/C++ header files Rinterface.h and
    R_ext/RStartup.h for use with external GUIs.

    o   Added an onExit() function to graphics devices, to be executed
    upon user break if non-NULL.

    o   ISNAN now works even in C++ code that undefines the 'isnan' macro.

    o   R_alloc's limit on 64-bit systems has been raised from just
    under 2^31 bytes (2Gb) to just under 2^34 (16Gb), and is now checked.

    o   New math utility functions  log1pmx(x), lgamma1p(x),
    logspace_add(logx, logy), and logspace_sub(logx, logy).


DEPRECATED & DEFUNCT

    o   The aqua module for MacOS X has been removed: --with-aqua now
    refers to the unbundled Cocoa GUI.

    o   Capabilities "bzip2", "GNOME, "libz" and "PCRE" are defunct.

    o   The undocumented use of UseMethod() with no argument was
    deprecated in 2.0.1 and is now regarded as an error.

    o   Capability "IEEE754" is deprecated.

    o   The 'CRAN' argument to update.packages(), old.packages(),
    new.packages(), download.packages() and install.packages() is
    deprecated in favour of 'repos', which replaces it as a
    positional argument (so this is only relevant for calls with
    named args).

    o   The S3 methods for getting and setting names of "dist" objects
    have been removed (as they provided names with a different
    length from the "dist" object itself).

    o   Option "repositories" is no longer used and so not set.

    o   loadURL() is deprecated in favour of load(url()).

    o   delay() is deprecated.  Use delayedAssign() instead.


INSTALLATION CHANGES

    o   New configure option --enable-mbcs to enable support for
    UTF-8 locales, on by default.

    o   R_XTRA_[CF]FLAGS are now used during the configuration tests,
    and [CF]PICFLAGS if --enable-R-shlib was specified.  This
    ensures that features such as inlining are only used if the
    compilation flags specified support them.  (PR#7257)

    o   Files FAQ, RESOURCES, doc/html/resources.html are no longer in
    the SVN sources but are made by 'make dist'.

    o   The GNOME GUI is unbundled, now provided as a package on CRAN.

    o   Configuring without having the recommended packages is now an
    error unless --with-recommended-packages=no (or equivalent) is used.

    o   Configuring without having the X11 headers and libraries is now
    an error unless --with-x=no (or equivalent) is used.

    o   Configure tries harder to find a minimal set of FLIBS.  Under
    some circumstances this may remove from R_LD_LIBRARY_PATH
    path elements that ought to have specified in LDFLAGS (but
    were not).

    o   The C code for most of the graphics device drivers and their
    afm files are now in package grDevices.

    o   R is now linked against ncurses/termlib/termcap only if
    readline is specified (now the default) and that requires it.

    o   Makeinfo 4.7 or later is now required for building the HTML and
    Info versions of the manuals.


PACKAGE INSTALLATION CHANGES

    o   There are new types of packages, identified by the Type field
    in the DESCRIPTION file.  For example the GNOME console is now
    a separate package (on CRAN), and translations can be
    distributed as packages.

    o   There is now support of installing from within R both source and
    binary packages on MacOS X and Windows.  Most of the R
    functions now have a 'type' argument defaulting to
    getOption("pkgType") and with possible values "source",
    "win.binary" and "mac.binary".  The default is "source" except
    under Windows and the CRAN GUI build for MacOS X.

    o   install.packages() and friends now accept a vector of URLs for
    'repos' or 'contriburl' and get the newest available version of
    a package from the first repository on the list in which it is
    found.  The argument 'CRAN' is still accepted, but deprecated.

    install.packages() on Unix can now install from local .tar.gz
    files via repos = NULL (as has long been done on Windows).

    install.packages() no longer asks if downloaded packages
    should be deleted: they will be deleted at the end of the
    session anyway (and can be deleted by the user at any time).

    If the repository provides the information, install.packages()
    will now accept the name of a package in a bundle.

    If 'pkgs' is omitted install.packages() will use a listbox to
    display the available packages, on suitable systems.

    'dependencies' can be a character vector to allow only some
    levels of dependencies (e.g. not "Suggests") to be requested.

    o   There is a new possible value update.packages(ask="graphics")
    that uses a widget to (de)select packages, on suitable systems.

    o   The option used is now getOption("repos") not getOption("CRAN")
    and it is initially set to a dummy value.  Its value can be a
    character vector (preferably named) giving one or several
    repositories.

    A new function chooseCRANmirror() will select a CRAN mirror.
    This is called automatically if the contrib.url() encounters
    the initial dummy value of getOption("repos")

    A new function setRepositories() can be used to create
    getOption("repos") from a (platform-specific) list of known
    repositories.

    o   New function new.packages() to report uninstalled packages
    available at the requested repositories.  This also reports
    incomplete bundles.  It will optionally install new packages.

    o   New function available.packages(), similar to CRAN.packages()
    but for use with multiple repositories.  Both now only report
    packages whose R version requirements are met.

    o   update.packages() and old.packages() have a new option
    'checkBuilt' to allow packages installed under earlier
    versions of R to be updated.

    o   remove.packages() can now remove bundles.

    o   The Contains: field of the DESCRIPTION file of package bundles
    is now installed, so later checks can find out if the bundle
    is complete.

    o   packageStatus() is now built on top of *.packages, and gains a
    'method' argument.  It defaults to the same repositories as
    the other tools, those specified by getOption("repos").


BUG FIXES

    o   Configuring for Tcl/Tk makes use of ${TK_LIB_SPEC} ${TK_LIBS}
    not ${TK_LIB_SPEC} ${TK_XLIBSW}, which is correct for
    recent versions of Tk, but conceivably not for old
    tkConfig.sh files.

    o   detach() was not recomputing the S4 methods for primitives
    correctly.

    o   Methods package now has class "expression" partly fixed in basic
    classes, so S4 classes can extend these (but "expression" is
    pretty broken as a vector class in R).

    o   Collected warnings had messages with unneeded trailing space.

    o   S4 methods for primitive functions must be exported from
    namespaces; this is now done automatically.
    Note that is.primitive() is now in "base", not "methods".

    o   Package grid:

    - Fixed bug in grid.text() when "rot" argument has length 0.
      (reported by Emmanuel Paradis)

    o   .install_package_vignette_index() created an index even in an
    empty 'doc' directory.

    o   The print() method for factors now escapes characters in the
    levels in the same way as they are printed.

    o   str() removed any class from environment objects.

    str() no longer interprets control characters in character
    strings and factor levels; also no longer truncates factor
    levels unless they are longer than 'nchar.max'.
    Truncation of such long strings is now indicated ''outside''
    the string.

    str(<S4.object>) was misleading for the case of a single slot.

    str() now also properly displays S4 class definitions (such as
    returned by getClass().

    o   print.factor(quote=TRUE) was not quoting levels, causing
    ambiguity when the levels contained spaces or quotes.

    o   R CMD check was confused by a trailing / on a package name.

    o   write.table() was writing incorrect column names if the data
    frame contained any matrix-like columns.

    o   write.table() was not quoting row names for a 0-column x.

    o   t(x)'s default method now also preserves names(dimnames(x)) for
    1D arrays 'x'.

    o   r <- a %*% b no longer produces names(dimnames(r)) == c("", "")
    unless one of a or b has named dimnames.

    o   Some .Internal functions that were supposed to return invisibly
    did not. This was behind PR#7397 and PR#7466.

    o   eval(expr, NULL, encl) now looks up variables in encl, as
    eval(expr, list(), encl) always did

    o   Coercing as.data.frame(NULL) to a pairlist caused an error.

    o   p.adjust(p, ..) now correctly works when `p' contains NAs (or when
    it is of length 0 or length 2 for method = "hommel").

    o   'methods' initialization was calling a function intended for
    .Call() with .C().

    o   optim() needed a check that the objective function returns a
    value of length 1 (spotted by Ben Bolker).

    o   X11() was only scaling its fonts to pointsize if the dpi
    was within 0.5 of 100dpi.

    o   X11() font selection was looking for any symbol font, and
    sometimes got e.g. bold italic if the server has such a font.

    o   dpois(*, lambda=Inf) now returns 0 (or -Inf for log).

    o   Using pch="" gave a square (pch=0)!  Now it is regarded as the
    same as NA, which was also undocumented but omits the point.

    o   Base graphics now notices (ab)lines which have a zero
    coordinate on log scale, and omits them.  (PR#7559)

    o   stop() and warning() now accept NULL as they are documented
    to do (although this seems of little use and is equivalent to "").

    o   weighted.mean() now checks the length of the weight vector w.

    o   getAnywhere() was confused by names with leading or trailing dots
    (spotted by Robert McGehee)

    o   eval() was not handling values from return() correctly.

    o   par(omd) is now of the form c(x1, x2, y1, y2) to match the
    documentation and for S-PLUS compatibility.

    [Previously, par(omd) was of the form c(bottom, left, top, right)
     like par(oma) and par(omi)]

    o   formatC() did not check its 'flag' argument, and could
    segfault if it was incorrect. (PR#7686)

    o   Contrasts needed to be coerced to numeric (e.g. from integer)
    inside model.matrix.  (PR#7695)

    o   socketSelect() did not check for buffered input.

    o   Reads on a non-blocking socket with no available data were
    not handled properly and could result in a segfault.

    o   The "aovlist" method for se.contrast() failed in some very
    simple cases that were effectively not multistratum designs,
    e.g. only one treatment occurring in only one stratum.

    o   pgamma() uses completely re-written algorithms, and should work
    for all (even very extreme) arguments; this is based on Morten
    Welinder's contribution related to PR#7307.

    o   dpois(10, 2e-308, log=TRUE) and similar cases gave -Inf.

    o   x <- 2^(0:1000);    plot(x, x^.9, type="l", log="xy")# and
    x <- 2^-(1070:170); plot(x, x^.9, type="l", log="xy")# now both work

    o   summary.lm() asked for a report on a reasonable occurrence, but
    the check failed to take account of NAs.

    o   lm() was miscalculating 'df.residual' for empty models with a
    matrix response.

    o   summary.lm() now behaves more sensibly for empty models.

    o   plot.window() was using the wrong sign when adjusting
    xlim/ylim for positive 'asp' and a reversed axis.

    o   If malloc() fails when allocating a large object the allocator now
    does a gc and tries the malloc() again.

    o   packageSlot() and getGroupMembers() are now exported from the
    'methods' package as they should from documentation and the
    Green Book.

    o   rhyper() was giving numbers slightly too small, due to a bug in the
    original algorithm.  (PR#7314)

    o   gsub() was sometimes incorrectly matching ^ inside a string,
    e.g.  gsub("^12", "x", "1212") was "xx".

    o   [g]sub(perl = TRUE) was giving random results for a 0-length
    initial match.  (PR#7742)

    o   [g]sub was ignoring most 0-length matches, including all initial
    ones.  Note that substitutions such as gsub("[[:space:]]*", "
    ", ...) now work as they do in 'sed' (whereas the effect was
    previously the same as gsub("[[:space:]]+", " ", ...)).
    (In part PR#7742)

    o   Promises are now evaluated when extracted from an environment
    using '$' or '[[ ]]'.

    o   reshape(direction="wide") had some sorting problems when
    guessing time points (PR#7669)

    o   par() set 'xaxp' before 'xlog' and 'yaxp' before 'ylog',
    causing PR#831.

    o   The logic in tclRequire() to check the availability of a Tcl
    package turned out to be fallible.  It now uses a try()-and-see
    mechanism instead.

    o   Opening a unz() connection on a non-existent file left a file
    handle in use.

    o   "dist" objects of length 0 failed to print.

    o   INSTALL and the libR try harder to find a temporary directory
    (since there might be one left over with the same PID).

    o   acf() could cause a segfault with some datasets.  (PR#7771)

    o   tan(1+LARGEi) now gives 0+1i rather than 0+NaNi (PR#7781)

    o   summary(data.frame(mat = I(matrix(1:8, 4)))) does not go into
    infinite recursion anymore.

    o   writeBin() performed byte-swapping incorrectly on complex
    vectors, also swapping real and imaginary parts. (PR#7778)

    o   read.table() sometimes discarded as blank lines containing
    only white space, even if sep=",".



    **************************************************
    *                        *
    *          2.0 SERIES NEWS           *
    *                        *
    **************************************************


        CHANGES IN R VERSION 2.0.1 patched



NEW FEATURES

    o   warnings() now looks only in the workspace for `last.warning'
    (suggested by PR#7363).

    o   The search for browsers now starts with firefox, and has mozilla
    ahead of netscape.


PACKAGE INSTALLATION CHANGES

    o   A package DESCRIPTION file which contains a Built field (it
    should not!) is now worked around, with loud warnings.


BUG FIXES

    o   split() was accepting raw and list vectors as input, but
    not populating the output correctly.

    split() now handles vectors with names internally and so is
    almost as fast as on vectors without names (and maybe 100x
    faster than before).

    o   subset() now throws an error if its 'subset' argument is not
    logical whereas it could appear to work and give wrong answers
    with e.g. a numeric 'subset' argument.

    o   sum(), max(), min(), prod(), any() and all() were incorrectly
    using partial matching for their na.rm argument.

    o   kmeans() now ensures that the initial cluster centers it chooses
    are distinct.

    o   text()'s default method could segfault if passed 0-length coordinates.

    o   R CMD INSTALL (Unix) was sometimes leaving a temporary dir
    behind.  (PR#7230)

    o   read.table() could fail when the row.names were looking like numbers.

    o   seq(length= <n>) now always returns "integer" storage.

    o   labels.lm was broken. (PR#7417)

    o   The hashing used for character vectors in object.size() was
    inefficient for vectors with thousands of identical values not
    sharing the same storage (an unusual case).

    o   data.matrix() now warns if applied to a data frame with
    classed columns.

    o   Plotting histograms where the expression used to deparse to
    multiple lines now gives a sensible default title.  (PR#7421)

    o   The print method for getDLLRegisteredRoutines() was badly
    designed, and failed for all the standard packages' DLLs.

    o   getDLLRegisteredRoutines.character() was broken.

    o   write.table(x, row.names=FALSE) was incorrect for a 0-column x.

    o   write.table() assumed dec = "," if it was not ".".

    o   morley.tab used by R-intro was not installed on Unix since 2.0.0
    (it was on Windows).

    o   gsub(perl=TRUE) returned a string which printed with trailing
    garbage if there was a match at the beginning whose
    replacement was shorter.  (PR#7479)

    Similarly, the result was truncated if a replacement at the
    beginning was longer.

    o   Some PDF readers do not define PDFDocEncoding, so pdf()'s
    ISOLatin1 encoding is now derived from WinAnsi rather than
    PDFDocEncoding.

    o   xfig() had not been updated for the 2.0.0 alpha changes.
    Using more than one plot with a non-white background and with
    onefile=FALSE could segfault.

    o   sprintf() did not check for buffer overflow on character
    strings.  (PR#7554)

    o   The error message when evaluation depth was exceeded itself
    caused an error in deparsing and so was not shown.

    o   The 'datalist' file was not being used during installation
    (2.0.1 only).

    o   replications() was wrongly reporting lack of balance in
    designs with interactions (and had since unique() gained a
    matrix method).



        CHANGES IN R VERSION 2.0.1


NEW FEATURES

    o   Platform equivalence in library() is tested by a new function
    testPlatformEquivalence() which ignores the 'vendor' field and
    can be customized by cognescenti.

    o   The assignment form of split() allows recycling of vectors
    within the value list. In particular, things like
        split(x, g) <- lapply(split(x, g), mean)
    now work


DOCUMENTATION

    o   Manual `Writing R Extensions' has new sections on writing
    portable packages and on writing new front-ends for R -- the
    latter will be more comprehensive in R 2.1.0 which has new
    public header files.


DEPRECATED & DEFUNCT

    o   The aqua module in MacOS X is deprecated.

    o   Capabilities "bzip2", "GNOME, "libz" and "PCRE" are deprecated.

    o   The GNOME GUI on Unix-alikes is deprecated as part of R;
    it will be available in another form as from R 2.1.0.

    o   The undocumented use of UseMethod() with no argument is now
    formally deprecated.


INSTALLATION CHANGES

    o   Building on Alpha OSF/1 no longer forces the C flag -std1,
    which appears to be no longer needed.  (PR#7257)

    o   The compiler flag -mieee-fp is no longer used on i386 Linux
    (these days it is only passed to the linker and was only
    invoked for compilation steps).

    o   -D__NO_MATH_INLINES is only used on older ix86 glibc-based
    systems which need it (tested at configure time).  This leads to
    small improvements in speed and accuracy on modern systems.

    o   If makeinfo >= 4.5 is not available, warnings are given that
    some of the HTML manuals will be missing, and the index page
    given by help.start() will link to CRAN versions of those manuals.

    o   Files aclocal.m4 and acinclude.m4 used in maintainer builds
    are not longer included in the distribution.


C-LEVEL FACILITIES

    o   It was not clear in 'Writing R Extensions' that some of the
    entry points in the 'Utilities' section were not declared in
    <R.h> (they were in <R_ext/Applic.h>).  Now all the entry
    points in that section are declared in <R_ext/Utils.h>,
    included by <R.h>.


BUG FIXES

    o   The grid.grab() function in package grid would throw an error
    if there were no viewports pushed (now returns NULL).

    o   model.frame.default() takes row names from the response
    variable if that has suitable names and there is no 'data'
    argument.  (This follows S but was not previously implemented
    in R.)

    o   write.table() was not respecting the 'dec' argument for complex
    numbers.

    o   write.table() printed a mixture of numeric and complex numbers
    as all complex.  (PR#7260)

    o   R CMD INSTALL failed with versioned installs on packages which
    save images (only).

    o   dlogis() gave NaN not 0 for large negative arguments.

    o   Importing from another namespace was broken for versioned
    installs, incorrectly reporting something like
    "package 'imported_from' does not have a name space".

    o   The GNOME interface under Linux/Unix was broken. (PR#7276)

    o   For the jpeg/png devices under Linux/Unix, under certain rare
    circumstances clipping needed to be cleared before starting a
    new page.  (PR#7270, which has been the case since the devices
    were introduced in 1.1.0.)

    o   First lattice plot (first grid.newpage() call) did not start
    a new page IF there had been a previous traditional graphics
    plot (on the same device).

    o   Using install.packages() to install the same package to more
    than one library gave an incorrect warning message.  (If there
    were two or more such packages it might give an error.)

    o   .packages(all.available=TRUE) returned packages with an invalid
    version field in their DESCRIPTION whereas .find.packages() and
    packageDescription() did not.  Now all do not.

    o   packageDescription() now correctly reports that a package does
    not exist, rather than that its DESCRIPTION file is 'missing
    or broken'.

    o   'make dist' from builddir != sourcedir was copying not linking
    recommended packages to *.tgz.

    o   Slots in prototype objects can inherit from locally defined
    classes (which were not being found correctly before).

    o   Several fixes to the behavior of as() when there are either
    coerce= or replace= methods supplied in a call to
    setIs(). Related fixes to setIs() to handle correctly previous
    methods, if there were any.

    o   splinefun(1[0], 1[0])(1) doesn't segfault anymore (PR#7290).
    spline() and splinefun() now also work with missing values by
    omiting them.

    o   ecdf() was failing on inputs containing NAs. (Part of PR#7292)

    o   tools:::.install_package_description was splitting the Built:
    field across lines on platforms with very long names.

    o   capabilities() was wrong for the Aqua GUI on MacOS X.

    o   Using Rprof() with a non-writable 'file' argument is now a
    non-fatal error and does not abort R.

    o   binom.test() did not deparse its arguments early enough such
    that the reported data were ugly if x was a table.

    o   Systems based on glibc, including those using R's substitute for
    strptime, were handling strptime("2001", "%Y") incorrectly, in
    some cases crashing.  R's substitute code has been corrected
    (but problems may remain if glibc is used).  See the ?strptime
    for what should happen (which is system-specific).

    o   untrace() after trace() failed if package 'methods' was attached.
    (PR#7301)

    o   summary.stepfun() was reporting for n > 6 summaries of the
    knots and levels as the actual values.  Both print() and
    summary() methods called the constant values "step heights",
    although they were not the heights of the steps.

    o   is.na/is.nan() were giving spurious warnings if applied to a
    raw vector.

    o   is.atomic() gave incorrect result (false) for a raw vector.

    o   rank() and order() accepted raw and list inputs, but did not
    give a sensible answer (always 1:n).  Similarly, partial sorts
    of a raw vector were accepted but did nothing.

    o   require() without a version argument tried for an unversioned
    load of a package even though a versioned install was already
    loaded.  This often led to a message that a required package
    was being loaded when it was not actually being loaded.

    o   str(<S4.object>) made use of attributes() instead of slot(),
    and hence didn't properly print NULL slots.

    o   contrib.url() now handles URLs ending in '/' correctly.

    o   str() removed any class from externalptr objects.

    o   logLik() and hence AIC() failed or gave incorrect answers
    on "lm" fits with na.action = na.exclude (and perhaps other
    na.actions's except na.omit and na.fail).

    o   pmax() and pmin() sometimes used NAs in internal subassignments,
    and sometimes these failed.

    o   Subassigning an expression, e.g. expr[2] <- 1, could leave an
    invalid object and so cause a segfault. (PR#7326)

    o   download/install.packages() would misbehave if there was more
    than one version of a package in a repository.

    o   sort(partial=) silently ignored some other arguments: using
    'decreasing' or 'index.return' or supplying a factor are now
    errors.

    o   The ave() function had trouble if the grouping contained
    unused levels.

    o   read.fwf() got confused by skip > 0 and could infinite loop
    under some circumstances.  (PR#7350)

    o   upgrade(x, ask = FALSE) was broken for a "packageStatus" object.

    o   Class "raw" had been omitted from the list of basic classes in
    the "methods" package and so could not be used in S4 classes.

    o   Function getGroupMembers(), part of the definition of S4
    classes, had been promised for release 2.0, but slipped through.

    o   toLatex(sessionInfo()) produced incorrect LaTeX on some
    platforms due to special characters in the platform
    identifier.




    *********************************************************
    *                           *
    *   News of 1.x.y and 2.0.0 is in file `ONEWS'  *
    *   News of 1.0.0 and earlier is in file `OONEWS'   *
    *                           *
    *********************************************************