How would you guys like to drive forward here? -------- Forwarded Message -------- From: Peter Dalgaard <p.dalgaard@xxxxxxxxxxxxx> To: r-announce@xxxxxxxxxxxxxxxxx Subject: [R] R-2.4.0 is released Date: 03 Oct 2006 12:30:47 +0200 I've rolled up R-2.4.0.tar.gz a short while ago. This version contains several changes and additions, mostly incremental, but some larger changes to S4 methods have been added, as well as namespace sealing. See the full list of changes below. You can get it (in a short while) from http://cran.r-project.org/src/base/R-2/R-2.4.0.tar.gz or wait for it to be mirrored at a CRAN site nearer to you. Binaries for various platforms will appear in due course. There is no longer a version split for floppies. For the R Core Team Peter Dalgaard These are the md5sums for the freshly created files, in case you wish to check that they are uncorrupted: a8efde35b940278de19730d326f58449 AUTHORS eb723b61539feef013de476e68b5c50a COPYING a6f89e2100d9b6cdffcea4f398e37343 COPYING.LIB bdb43ae25511ed02c58bce1ff0e93337 FAQ 70447ae7f2c35233d3065b004aa4f331 INSTALL 4426b6244f014353965fa09f85d8fd5b NEWS 88bbd6781faedc788a1cbd434194480c ONEWS 4f004de59e24a52d0f500063b4603bcb OONEWS f32379469d8712e9f5dd6435d30127d3 R-2.4.0.tar.gz 433182754c05c2cf7a04ad0da474a1d0 README 020479f381d5f9038dcb18708997f5da RESOURCES 4eaf8a3e428694523edc16feb0140206 THANKS This is the relevant part of the NEWS file CHANGES IN R VERSION 2.4.0 USER-VISIBLE CHANGES o The startup message now prints first the version string and then the copyright notice (to be more similar to R --version). o save() by default evaluates promise objects. The old behaviour (to save the promise and its evaluation environment) can be obtained by setting the new argument 'eval.promises' to FALSE. (Note that this does not apply to promises embedded in objects, only to top-level objects.) o The functions read.csv(), read.csv2(), read.delim(), read.delim2() now default their 'comment.char' argument to "". (These functions are designed to read files produced by other software, which might use the # character inside fields, but are unlikely to use it for comments.) o The bindings in the base environment/namespace (currently the same thing) are now locked. This means that the values of base functions cannot be changed except via assignInNamespace() and similar tricks. o [[ on a factor now returns a one-element factor (and not an integer), as.list() on a factor returns a list of one-element factors (and not of character vectors), and unlist() on a list of factors returns a factor (and not an integer vector). These changes may affect the results of sapply() and lapply() applied to factors. o mauchly.test() now returns the W statistic (for comparability with SAS and SPSS), rather than the z (which was accidentally not named in the output) o sort(x, decreasing = FALSE, ...) is now a generic function. This means that 'partial' is no longer the second argument, and calls which used positional matching may be incorrect: we try to detect them. o See the section on 'Changes to S4 methods': all packages depending on 'methods' need to be re-installed. NEW FEATURES o agrep(), grep(), strwrap(), strtrim(), substr() and related functions now coerce arguments which should be character via as.character() rather than internally (so method dispatch takes place, e.g. for factors). chartr(), charfold(), tolower() and toupper() now coerce their main argument if necessary to a character vector via as.character(). Functions which work element-by-element on character vectors to give a character result now preserve attributes including names, dims and dimnames (as suggested by the Blue Book p. 144). Such functions include charfold(), chartr(), gsub(), strtrim(), sub(), substr(), tolower() and toupper(). (Note that coercion of a non-character argument may lose the attributes.) agrep(value = TRUE) preserves names for compatibility with grep(). nchar() has always preserved dims/dimnames (undocumented before) and now also preserves names. o .Deprecated and .Defunct take a new parameter, msg, that allows for the specification of the message printed and facilitates deprecation of calling sequences etc. o .Fortran() will map 'name' to lower case, and will work with 'name' containing underscores. o The default is now .saveRDS(compress = TRUE) o The :: operator now also works for packages without name spaces that are on the search path. o [[ on a list does not duplicate the extracted element unless necessary. (It did not duplicate in other cases, e.g. a pairlist.) o argsAnywhere() works like args() on non-exported functions. o as.data.frame() gains a '...' argument. o Added an as.data.frame() method for class "ftable". o as.list(<an expression>) is now handled by internal code and no longer loses attributes such as names. as.list(<a list>) no longer duplicates (unnecessarily). o as.POSIX[cl]t can now convert character strings containing fractional seconds. o attach() can now attach a copy of an environment. o available.packages() and installed.packages() gain a 'fields' argument thanks to Seth Falcon. o axis.POSIXct() uses a different algorithm for ranges of 2 to 50 days that will mark days at midnight in the current timezone (even if the graph crosses a DST change). o body<-() and formals<-() default to envir = environment(fun), that is they do not by default change the environment. (Previously they changed it to parent.frame().) o New function combn(x, m, ..) for computing on all combinations of size 'm' (for small 'm' !). o The cumxxx() functions now handle logical/integer arguments separately from numeric ones, and so return an integer result where appropriate. o data.frame() has a new argument 'stringsAsFactor'. This and the default for read.table(as.is=) are set from the new global option 'stringsAsFactors' via the utility function default.stringsAsFactors(). o dev.interactive() now has an optional argument 'orNone'. o df() now has a noncentrality argument 'ncp', based on a contribution by Peter Ruckdeschel. o example() gains an argument 'ask' which defaults to "TRUE when sensible", but the default can be overridden by setting option 'example.ask'. o expand.grid() now has an argument 'KEEP.OUT.ATTRS' which can suppress (the potentially expensive) "out.attrs" attribute. It no longer returns an extraneous 'colnames' attribute. o The subset and subassign methods for factors now handle factor matrices, and dim() can be set on a factor. o There is now a format() method for class "ftable". o head(x, n) and tail(x, n) now also work for negative arguments, thanks to Vincent Goulet. o head.matrix() and tail.matrix() are no longer hidden, to be used for building head() and tail() methods for other classes. o If help() finds multiple help files for a given topic, a menu of titles is used to allow interactive choice. o help.search() now rebuilds the database if 'package' specifies a package not in the saved database. o hist(*, plot = FALSE) now warns about unused arguments. o history() gains a 'pattern' argument as suggested by Romain Francois. o integer(0) now prints as that rather than "numeric(0)" (it always deparsed as "integer(0)"). o interaction(..., drop=TRUE) now gives the same result as interaction(...)[,drop=TRUE] (it used to sometimes give a different order for the levels). o lag.plot() produces a conventional plot (not setting mfrow) if only one plot is to be produced. o lapply() does much less copying. Vector X are handled without duplication, and other types are coerced via as.list(). (As a result, package 'boot' runs its examples 4% faster.) lapply(<a pairlist>) now coerces to a list (rather than traverse the pairlist from the beginning for each item). o legend() has new parameters 'box.lwd' and 'box.lty'. o lines() gains a simple method for isoreg() results. o load() no longer coerces pairlists to lists (which was undocumented, but has been happening since 1998). o make.link() now returns an object of class "link-glm". The GLM families accept an object of this class for their 'link' argument, which allows user-specified link functions. Also, quasi() allows user-specified variance functions. o mapply() uses names more analogously to lapply(), e.g.. o matplot() now accepts a 'bg' argument similarly to plot.default() etc. o median() is now generic, and its default method uses mean() rather than sum() and so is more widely applicable (e.g. to dates). o Dummy functions memory.size() and memory.limit() are available on Unix-alikes, for people who have not noticed that documentation is Windows-specific. o merge() works more efficiently when there are relatively few matches between the data frames (for example, for 1-1 matching). The order of the result is changed for 'sort = FALSE'. o merge() now inserts row names as a character column and not a factor: this makes the default sort order more comprehensible. o Raw, complex and character vectors are now allowed in model frames (there was a previously undocumented restriction to logical, integer and numeric types.). Character vectors in a formula passed to model.matrix() are converted to factors and coded accordingly. o modifyList() utility, typically for housekeeping nested lists. o x <- 1:20; y <- rnorm(x); nls(y ~ A*exp(-x^2/sig)) no longer returns an unhelpful error message. In this and similar cases, it now tries a wild guess for starting values. o Ops.difftime() now handles unary minus and plus. o Ops.Date() and Ops.POSIXt() now allow character arguments (which are coerced to the appropriate class before comparison, for Ops.POSIXt() using the current time zone). o There is a new option(max.contour.segments = 25000) which can be raised to allow extremely complex contour lines in contour() and contourLines(). (PR#9205) o options(max.print = N) where N defaults to 99999 now cuts printing of large objects after about N entries. print(x, ..., max = N) does the same for the default method and those building on print.default(). options("menu.graphics") controls if graphical menus should be used when available. options("par.ask.default") allows the default for par("ask") to be set for a newly-opened device. (Defaults to FALSE, the previous behaviour.) The way option("papersize") is set has been changed. On platforms which support the LC_PAPER locale category, the setting is taken first from the R_PAPERSIZE environment variable at run time, then from the LC_PAPER category ("letter" for _US and _CA locales and "a4" otherwise). On other platforms (including Windows and older Unixen), the choice is unchanged. o package.skeleton() gains arguments 'namespace' and 'code_files'. o par(ask=TRUE) now only applies to interactive R sessions. o parse() now returns up to 'n' expressions, rather than fill the expressions vector with NULL. (This is now compatible with S.) o The 'version' argument for pdf() is now increased automatically (with a warning) if features which need a higher level are used. o pie() now allows expressions for 'labels', and empty slices. o There is a new '%.%' operator for mathematical annotations (plotmath) which draws a centred multiplication dot (a \cdot in LaTeX), thanks to Uwe Ligges. o predict.lm() gains a 'pred.var' argument. (Wishlist PR#8877.) o print.summary.{aov,glm,lm,nls} and print.{aov,glm} make use of naprint() to report when na.action altered the model frame. o print.table(T, zero.print=ch) now also replaces 0 by ch when T is non-integer with integer entries. o Recursive rapply() which is similar to lapply but used recursively and can restrict the classes of elements to which it is applied. o r2dtable() has been moved to package 'stats'. o New function read.DIF() to read Data Interchange Format files, and (on Windows) this format from the clipboard. o New experimental function readNEWS() to read R's own "NEWS" file and similarly formatted ones. o readLines() has a new argument 'warn' to suppress warnings: the default behaviour is still to warn. o reg.finalizer() has a new argument 'onexit' to parallel the C-level equivalent R_RegisterFinalizerEx. o rep() is now a primitive function and under some conditions very much faster: rep.int() is still a little faster (but does less). (Because it is primitive there are minor changes to the call semantics: see the help page.) o The 'row.names' of a data frame may be stored internally as an integer or character vector. This can result in considerably more compact storage (and more logical row names from rbind) when the row.names are 1:nrow(x). However, such data frames are not compatible with earlier versions of R: this can be ensured by supplying a character vector as 'row.names'. row.names() will always return a character vector, but direct access to the attribute may not. The internal storage of row.names = 1:n just records 'n', for efficiency with very long vectors. The "row.names" attribute must be a character or integer vector, and this is now enforced by the C code. o The "data.frame" and "matrix" methods for rowsum() gain an 'na.rm' argument. o Experimental support for memory-use profiling via Rprof(), summaryRprof(), Rprofmem() and tracemem(). o save.image() [also called by sys.save.image() and hence from q()] now defaults to saving compressed binary images. To revert to the previous behaviour set option "save.image.defaults": see ?save.image. o There is a new primitive seq.int() which is slightly more restricted than seq() but often very much faster, and new primitives seq_along() and seq_len() which are faster still. o serialize(connection = NULL) now returns a raw vector (and not a character string). unserialize() accepts both old and new formats (and has since 2.3.0). o setwd() now returns the previously current directory (invisibly). o The function sort() is now sort.int(), with a new generic function sort() which behaves in the same way (except for the order of its argument list) for objects without a class, and relies on the '[' method for objects with a class (unless a specific method has been written, as it has for class "POSIXlt"). o sort.list() now implements complex vectors (PR#9039), and how complex numbers are sorted is now documented. o spline() and splinefun() now follow approx[fun] to have an argument 'ties = mean' which makes them applicable also when 'x' has duplicated values. o str(x) does not print the S3 "class" attribute when it is the same as 'mode' (which is printed anyway, possibly abbreviated) and it puts it beside mode for atomic objects such as S3 class "table". o str(<data.frame>) now outputs 'data.frame' instead of `data.frame'; this may affect some strict (Package) tests. o str() now takes also its defaults for 'vec.len' and 'digits.d' from options('str') which can be set by the new strOptions(). o symnum() has a new argument 'numeric.x' particularly useful for handling 0/1 data. o Sys.getlocale() and Sys.setlocale() support LC_MESSAGES, LC_PAPER and LC_MEASUREMENT if the platform does. o Sweave has a new options 'pdf.encoding' and 'pdf.version' for its Rweave driver. o The character vector used by an output textConnection() has a locked binding whilst the connection is open. There is a new function textConnectionValue() to retrieve the value of an output textConnection(). o traceback() gains a 'max.lines' argument. .Traceback is no longer stored in the workspace. o warning(immediate. = TRUE) now applies to getOption("warn") < 0 and not just == 0. o warnings() is now an accessor function for 'last.warning' (which is no longer stored in the workspace) with a print() method. o The internal internet download functions have some new features from libxml 2.6.26. o There is an option "HTTPUserAgent" to set the User Agent in R download requests etc. Patch from S. Falcon. o PCRE has been updated to version 6.7. o The C function substituteList now has tail recursion expanded out, so C stack overflow is less likely. (PR#8141, fix by Kevin Hendricks) o The (somewhat soft) 1023/4 byte limit on command lines is now documented in 'An Introduction to R'. o The maximum number of open connections has been increased from 50 to 128. o There is a new manual 'R Internals' on R internal stuctures plus the former appendices of 'Writing R Extensions'. o The autoloads introduced at the package re-organization have been almost completely removed: the one that remains is for ts(). o The setting of the various Java configuration variables has been improved to refer to JAVA_HOME, and they are now documented in the R-admin manual. o It is (again) possible to calculate prediction intervals from "lm" objects for the original data frame, now with a warning that the intervals refer to future observations. Weighted intervals have also been implemented, with user-specifiable weights. Warnings are given in cases where the default behaviour might differ from user expectations. See the ?predict.lm for details. CHANGES TO S4 METHODS o The default prototype object for S4 classes will have its own internal type in 2.4.0, as opposed to being an empty list (the cause of several errors in the code up to 2.3.1). Note that old binary objects, including class definitions, will be inconsistent with the type, and should be recreated. o S4 method dispatch has been completely revised to use cached generic functions and to search for the best match among inherited methods. See ?Methods and http://developer.r-project.org/howMethodsWork.pdf o Objects created from an S4 class are now marked by an internal flag, tested by isS4() in R and by macro IS_S4_OBJECT() in C. This is an efficient and reliable test, and should replace all earlier heuristic tests. o Some changes have been made to automatic printing of S4 objects, to make this correspond to a call to show(), as per 'Programming with Data'. o S4 generic and class definitions are now cached when the related package is loaded. This should improve efficiency and also avoid anomalous situations in which a class or generic cannot be found. o trace() now creates a new S4 class for the traced object if required. This allows tracing of user-defined subclasses of "function". DEPRECATED & DEFUNCT o The re-named tcltk functions tkcmd, tkfile.tail, tkfile.dir, tkopen, tkclose, tkputs, tkread are now defunct. o Argument 'col' of bxp() has been removed: use 'boxfill'. o Use of NULL as an environment is now an error. o postscriptFont() is defunct: use Type1Font(). o La.chol() and La.chol2inv() are defunct (they were the same as the default options of chol() and chol2inv). o La.svd(method = "dgesvd") is defunct. o Files install.R and R_PROFILE.R in packages are now ignored (with a warning). o The following deprecated command-line options to INSTALL have been removed (use the fields in the DESCRIPTION file instead): -s --save --no-save --lazy --no-lazy --lazy-data --no-lazy-data o Graphical parameter 'tmag' is obsolete. o mauchley.test() (package 'stats') is now defunct. o symbol.C() and symbol.For() are deprecated. They are required in S for use with is.loaded(), but are not so required in R. o load()ing an object saved in one of the formats used prior to R 1.4.0 is deprecated. Such objects should be re-saved in the current format. o save(version = 1) is now deprecated. C-LEVEL FACILITIES o The convenience function ScalarLogical now coerces all non-zero non-NA values to TRUE. o The vector accessor functions such as INTEGER, REAL and SET_VECTOR_ELT now check that they are called on the correct SEXPTYPE (or at least on a compatible one). See `Writing R Extensions' for the details and for a stricter test regime. o It is no longer possible to pass list variables to .C(DUP = FALSE): it would have given rise to obscure garbage collection errors. o allocString is now a macro, so packages using it will need to be reinstalled. o R_ParseVector was returning with object(s) protected in the parser if the status was PARSE_INCOMPLETE or PARSE_ERROR. o There is a new function Rf_endEmbeddedR to properly terminate a session started by Rf_initEmbeddedR, and both are now available on Windows as well as on Unix-alikes. These and related functions are declared in a new header <Rembedded.h>. If R_TempDir is set when embedded R is initialized it is assumed to point to a valid session temporary directory: see `Writing R Extensions'. o There is a new interface allowing one package to make C routines available to C code in other packages. The interface consists of the routines R_RegisterCCallable and R_GetCCallable. These functions are declared in <R_ext/Rdynload.h>. This interface is experimental and subject to change. In addition, a package can arrange to make use of header files in another (already installed) package via the 'LinkingTo' field in the DESCRIPTION file: see 'Writing R Extensions'. UTILITIES o R CMD SHLIB now handles (as linker commands) -L*, -l* and *.a. o R CMD check now: - warns if there are non-ASCII characters in the R code (as these will likely be syntax errors in some locale). - tests Rd cross-references by default, and tests for (syntactically) valid CITATION metadata. - tests that the package can be loaded, and that the package and namespace (if there is one) can each be loaded in startup code (before the standard packages are loaded). - tests for empty 'exec' or 'inst' directories. - checks if $(FLIBS) is used when $(BLAS_LIBS) is. - checks that all packages (except non-S4-using standard packages) used in ::, :::, library() and require() calls are declared in the DESCRIPTION file, and 'methods' is declared if S4 classes or methods are set. - throws an error if the standard packages 'methods' and 'stats4' are imported from in the NAMESPACE file and not declared in the DESCRIPTION file. o The test script produced by massage-Examples.pl no longer creates objects in the base environment. o New utilties R CMD Stangle and R CMD Sweave for extracting S/R code from and processing Sweave documentation, respectively. o The DESCRIPTION file of packages may contain an 'Enhances:' field. o An R CMD javareconf script has been added to allow Java configuration to be updated even after R has been installed. INSTALLATION o The C function realpath (used by normalizePath()) is hidden on some systems and we try harder to find it. o There is a new option --enable-BLAS-shlib, which compiles the BLAS into a dynamic library -lRblas and links against that. For the pros and cons see the R-admin manual. The defaults are now --without-blas (so you have explicitly to ask for an external BLAS), and --enable-BLAS-shlib unless a usable external BLAS is found or on AIX or on MacOS X 10.2 and earlier. o MacOS X did not like having LSAME in both BLAS and LAPACK libraries, so it is no longer part of the R-internal LAPACK. We now require an external BLAS to provide LSAME: it seems that nowadays all do. o The configure test for 'whether mixed C/Fortran code can be run' has been improved as on one system that test passed but the Fortran run-time library was broken. o A precious configure variable DEFS can be set to pass defines (e.g. -DUSE_TYPE_CHECKING_STRICT) to C code when compiling R. o There is now a test for visible __libc_stack_end on Linux systems (since it is not visible on some recent glibc's built from the sources). o MacOS X 10.4 and higher now use two-level namespaces, single module in a shared library and allow undefined symbols to be resolved at run-time. This implies that common symbols are now allowed in package libraries. --enable-BLAS-shlib is supported for internal BLAS, external BLAS framework and external static BLAS. An external dynamic library BLAS is NOT supported. (But it can be easily used by replacing internal BLAS library file later.) MacOS X < 10.4 does not support --enable-BLAS-shlib. o Dynamic libraries and modules use a flat namespace on MacOS X 10.4 and higher if either Xcode tools don't support dynamic lookup (Xcode < 2.3) or the FORCE_FLAT_NAMESPACE environment variable is set. (The latter was introduced temporarily for testing purposes and may go away anytime.) o configure now defaults to 'run-time linking' on AIX (and AIX < 4.2 is no longer allowed), using -bexpall rather than export/import files. If this works, it allows R to be built in the same way as other Unix-alikes, including with R as a shared library and with a shared BLAS. o The "mac.binary" package type now defaults to universal binary. If a repository supports architecture-specific Mac binaries, they can be requested by using "mac.binary.xxx" in contrib.url(), where xxx is the desired architecture. BUG FIXES o The name of a Fortran symbol reported to be missing by .Fortran() is now the actual name. (What was reported to be an 'entry point' was missing the common leading underscore.) o print() on a MBCS character string now works properly a character at a time rather than a byte at time. (This does not affect MBCSs like UTF-8 and the Windows DBCSes which have non-ASCII lead bytes and always worked correctly.) o glm() now recalculates the null deviance whenever there is an offset (even if it is exactly zero to avoid a discontinuity in that case, since the calculations with and without offset are done by different algorithms). o Amongst families, quasi() accepted an expression for link and no other did. Now all accept an expression which evaluates to a one-element character vector (although e.g. 'logit' is taken as a name and not an expression). o trace() now accepts arguments where= and signature= for the old-style trace (no tracer or exit, edit==FALSE) and just prints a message on entry. Also the undocumented feature of where=function now works for generic functions as well. o callNextMethod() failed for recursive use when the methods had nonstandard argument lists. Now enforces the semantic rule that the inheritance is fixed when the method containing the callNextMethod() is installed. See Details in the documentation. o UseMethod() looked for the defining environment of 'generic' as if it were the current function, although some functions are generic for methods of a different generic. Lookup for S3 methods is confined to functions: previously a non-function 'fun.class' could have masked a function of the same name. o Line types (lty) specified as hex strings were documented not to allow zero, but some devices accepted zero and handled it in a device-dependent way. Now it is an error on all devices. (PR#8914) o Subassignment for a time series can no longer extend the series: it used to attempt to but failed to adjust the tsp attributes. Now window() must be used. o Function AIC() in package 'stats4' was not dispatching correctly on S4 classes via logLik() because of namespace issues. o Subsetting LANGSXPs could break the call-by-value illusion. (PR#7924) (patch from Kevin Hendricks). o parse() with n > 1 gave a syntax error if fewer than n statements were available. o parse() with n > 1 gave strange results on some syntax errors. (PR#8815) o lag.plot() now respects graphical parameters for the axes. o Using a wrong link in family() now gives more consistent error messages. o sort.list(method="radix") works on factors again. o object.size() is more accurate for vector objects (it takes into account the smaller header and also the fixed sizes used in the node classes for small vector objects). o addmargins(T, ...) now returns a "table" when 'T' is a "table", as its help page has always suggested. o remove() now explicitly precludes removing variables from baseenv() and throws an error (this was previously ignored). o Saving the workspace at the end of a session now works as has long been intended, that is it is saved only if something has been added/deleted/changed during the current session. o The search for bindings in <<-, ->> and assign(inherits=TRUE) was omitting the base package, although this was not documented. Now the base package is included (but most bindings there are locked). o dweibull(0, shape) was NaN not Inf for shape < 1. Also, the help for dgamma and dweibull gave support as x > 0, but returned non-zero values for x = 0. (PR#9080) o Subsetting arrays no longer preserves attributes (it was removed for matrices in 1998). o The "factor" method of as.character() no longer maps level "NA" to "<NA>" (a legacy of before there were NA character strings). o terms(keep.order=TRUE) was not returning a valid "order" attribute. o The DLL registration code was not freeing .External symbols. o The internet download routines expected URLs of less than 4096 bytes, but did not check. Now this is checked, and http:// URLs are allowed to be up to 40960 bytes. o parse(n=-1) threw a stack-imbalance error, and parse(n=3) did not cope correctly with EOF during input. o Zero-column data frames had no names (rather than character(0)). o by() and acf() could get confused when they used very long expressions as names. o residuals(<glm object>, type="working") was NA for cases with zero weight (whereas they are well-defined even though the case was not used during the fitting) and the actual value is now returned. This allows residuals to be computed from fits with 'y = FALSE'. The residuals in a fitted "glm" object are computed more accurately: the previous formula was subject to cancellation. o loess() now checks the validity of its 'control' argument. o rownames(<0-row matrix>, do.NULL=FALSE) was wrong. (PR#9136) o apply() now works as documented when applied over 2 or more margins with one of zero extent. (It used to drop dimensions.) o head() and tail() now also work row-wise for "table" and "ftable" objects. o NextMethod() could throw an error/crash if called from a method that was called directly rather than from a generic (so .Method was unset). o order(x, na.last = NA) failed for a zero-length x. o grep(pat, x, value = TRUE, perl = L) preserved names for L == TRUE && !is.na(pat) but not otherwise. Now it always does. o [rc]bind() now find registered methods and not just visible ones. o Printing a factor no longer ignores attributes such as names and dim/dimnames. o Command-line arguments after --encoding were ignored. o The check for impossible confidence levels was off by one in wilcox.test (PR#8557) o [[ on an environment could create aliases. (PR#8457) o pt() with a very small (or zero) non-centrality parameter could give an unduly stringent warning about 'full precision was not achieved'. (PR#9171) o writeChar() could segfault if 'nchars' was given silly values. o qt() and rt() did not work for vector 'ncp', and qt() did not work for negative 'ncp'. o ns() failed to work correctly when 'x' was of length one. o identical() ignored tags on pairlists (including names of attributes) and required an identical ordering for attribute values in their pairlists. Now names are compared on pairlists, and attribute sets are treated as unordered. o If they were unused arguments supplied to a closure, only the first non-empty one was reported, despite the message. Unmatched empty arguments (such as f(1,,) for a function of one argument) were ignored. They are now an error. o Calling a builtin with empty arguments used to silently remove them (and this was undocumented). Now this is an error unless builtin is c() or list() or there are only trailing empty arguments, when it is a warning (for the time being: this will be made an error in R 2.5.0). o install.packages() ignored 'configure.args' if the vector was unnamed. o biplot() now works if there are missing values in the data. o biplot() now passes par() values to all four axes (not just those on sides 1 and 2). o [.acf now handles an empty first index. o Deparsing uses backticks more consistently to quote non-syntactic names. o Assigning to the symbol in a for() loop with a list/expression/pairlist index could alter the index. Now the loop variable is explicitly read-only. (PR#9216) o Using old.packages() (and hence update.packages()) on an empty (or non-existent) library failed with an obscure message. o plot.xy() could segfault if supplied with an invalid 'col' argument. (PR#9221) o menu() with graphics=TRUE attempted to use Tcl/Tk on unix even if DISPLAY was not set (in which case Tk is not available and so the attempt is bound to fail). o The print() method for 'dist' objects prints a matrix even for n = 2. o The cumxxx functions were missing some PROTECTs and so could segfault on long vectors (especially with names or where coercion to numeric occurred). o The X11() device no longer produces (apparently spurious) 'BadWindow (invalid Window parameter)' warnings when run from Rcmdr. o legend() assumed that widths and heights of strings were positive, which they need not be in user coordinates with reversed axes. (In part, PR#9236) o The plot() methods for "profile.nls" objects could get confused if 'which' had been used in the profile() call. (PR#9231) o boxplot() did not passed named arguments (except graphics parameters) to bxp() as documented. (PR#9183) o Only genuinely empty statements act as 'return' in the browser, not say those starting with a comment char. (PR#9063) o summary.mlm() incorrectly used accessor functions to fake an "lm" object. (PR#9191) o prettyNum() was not preserving attributes, despite being explicitly documented to. (PR#8695) o It was previously undocumented what happened if a graphical parameter was passed in both '...' and 'pars' to boxplot() and bxp(), and they behaved differently. Now those passed in '...' have precedence in both cases. o A failed subassignment could leave behind an object '*tmp*'. The fix also sometimes gives better error messages. o Using SIGUSR1 on Unix now always terminates a session, and no longer is caught by browser contexts and restarts (such as try()). o In the 'graphics' package, in-line 'font=5' was being ignored (report by Tom Cook). o nls() looked for non-parameter arguments in a function call in the wrong scope (from the body of nls). o Printing of complex numbers could misbehave when one of the parts was large (so scientific notation was used) and the other was so much smaller that it had no significant digits and should have been printed as zero (e.g. 1e80+3e44i). o Using install.packages with type="mac.binary" and target path starting with ~ failed with a cryptic message while unpacking. o getwd() now works correctly when the working directory is unavailable (e.g. unreadable). o The alternative hypothesis in wilcox.test() was labelled by an unexplained quantity 'mu' which is now spelled out. The alternative hypothesis in ks.test() is clearer both in the documentation and in the result. (PR#5360) -- Tom "spot" Callaway || Red Hat || Fedora || Aurora || GPG ID: 93054260 "We must not confuse dissent with disloyalty. We must remember always that accusation is not proof and that conviction depends upon evidence and due process of law. We will not walk in fear, one of another. We will not be driven by fear into an age of unreason, if we dig deep in our history and our doctrine, and remember that we are not descended from fearful men -- not from men who feared to write, to speak, to associate and to defend causes that were, for the moment, unpopular." -- Edward R. Murrow, March 9, 1954