The R Project SVN R

Rev

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

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


        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 Eiji 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 delayAssign() instead.


INSTALLATION CHANGES

    o   New configure option --enable-utf8 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'   *
    *                           *
    *********************************************************