Version 0.49 Released

Ross Ihaka ihaka at
Wed Apr 23 11:25:23 CEST 1997

The newest version of R for Unix (version 0.49) is now available
(or soon will be) from the following sites.





Please obtain a copy from site close to you.  Note that New Zealand
is not close to anywhere other than itself :-).

This version adds considerable functionality and (we hope) stability
to R.  Most notably, the object system is now very close to that
of S and we now have a fairly full implementation of complex

The jump in version number (from 0.16) relects the fact that we
feel that this version of R represents quite a jump toward what we
hope will be in our eventual 1.0 release.  However the version is
numbered 0.49 rather than the 0.50 we touted because it falls a
little short of what we really want for 0.50.

Immediate development of R will focus on creating a coherent way
of loading and unloading "libraries" and creating a good framework
for documentation (can you say "SGML" - I knew you could).

A (partial) list of changes from 0.16.1 follows.  A list of known
problems is kept in the file "TASKS" in the distribution and a list
of problems we think are solved is in "TASKS.OLD"

	R + R




 o  The ``object'' system has been changed substantially.  The
    behavior of both "UseMethod" and "NextMethod" should match that
    in S.  Group methods for "Math", "Ops" and "Summary" are

 o  Complex arithmetic is now implemented.  Many mathematical
    functions are now defined for complex arguments (e.g. sqrt,
    exp, log, sin, cos, tan, asin, acos, atan).  There is no
    complex gamma function or log gamma function yet.  The summary
    functions "mean", "sum", "prod", "cumsum" and "cumprod" work
    correctly when (some of) their arguments are complex.  Other
    functions such as "solve" are not "complex aware" yet, but do
    print warning messages about coercion of complex values
    to real by the dropping of imaginary parts.
    S and R do not return identical results in all cases:
	S> atan(tan(1i))
	[1] 0-1i
	R> atan(tan(1i))
	[1] 0+1i
    [ Is this just a difference on the branch cut boundary? ]

 o  The full set of S graphics symbols is now available with pch=0:18.
    In addition, there is a special set of R plotting symbols which
    can be obtained with pch=29:25.
	pch=19  solid circle
	pch=20	bullet
	pch=21	circle
	pch=22	square
	pch=23	diamond
	pch=24	triangle point-up
	pch=25	triangle point down
    The symbols 21:25 can be colored and filled with different colors.
    For example, the expression
	points(x, y, pch=21, col="red", bg="yellow")
    will plot the points using a symbol consisting of a red circle with
    a yellow interior.

 o  There is a new "family" argument to the postscript graphics driver
    which can be set to any of "AvantGarde", "Bookman", "Courier",
    "Helvetica", "Helvetica-Narrow", "NewCenturySchoolbook", "Palatino"
    or "Times".  In addition, setting font=5 will cause the "Symbol"
    family to be used.  This is still experimental and it is hard to
    see it being useful without some sort of math capability.
    [ Such a facility is "on the drawing board". ]

 o  The graphics parameter "las" is now implemented and can be used
    to rotate axis labels.  E.g.  plot(1:10, las=1) .

 o  The hyperbolic and inverse hyperbolic functions cosh, sinh, tanh,
    acosh, asinh and atanh are now implemented for both real and complex
    arguments.  (Q: are the underlying functions available on all
    platforms, or do we need compatibility fixes?)

 o  "log" has changed so that it will accept an optional "base" argument.
    "log2" and "log10" are implemented this way.

 o  "atan" can now either be invoked as atan(x) or atan(x,y).

 o  The behavior of "fft" has been modified to match that of S
    (i.e.  it returns a complex value.  There is also a function
    "mvfft" which performs a "vector transform" when passed a matrix
    (i.e.  it applies the fft to each column, rather than doing a
    2d spatial transform).

 o  A new functon "polyroot" can be used to find the roots of
    polynomials with (real or) complex coefficients.

 o  Vectors and lists are now "stretchy".  This means that the
    following is legal
	x <- 1:10
	x[20] <- 12
    [ Note that there is a bug in S.  When you try this kind of
    extension - the "dim" and "dimname" attributes are not dropped,
    leading to "invisible" elements in the result. ]

 o  Symbolic differention is now available using the functions "D"
    and "deriv".  The results are slightly difference in appearance
    from those of S (which tends to put in a few too many parentheses),
    but should provide identical semantics.  To see the nature of the
    difference, try the expression
    in both systems.
    These functions are implemented as internal code in R (what's the
    point in having a nice little underlying lisp if you don't use it
    for obvious list processing applications?).

 o  A new function "grep" has been implemented.  It performs regular
    expression matching based on POSIX 1003.3.  The function uses the
    "regex" library written by Henry Spencer (the same one that Perl
    uses).  Grep is now used to provide a pattern matching facility
    in "objects" and "ls".  In addition, there are functions "sub"
    and "gsub" which operate the same way as those in "nawk".  Note
    that "\" must be escaped to get it into a string, so if you want
    a literal "\" you must type "\\\\" :-(.

 o  A new "methods" function written by Martin Maechler replaces the
    older less sophisticated one.  This has also been converted to use
    the new "grep" function.

 o  A new version of model.frame from Thomas Lumley is included.

 o  Factors and ordered factors are now "objects" with class attributes
    which match those in S.  This change is primarily so that applications
    written for S will work in R.  The underlying implementation for
    factors and ordered factors still uses special underlying types.

 o  R will now do conditioning plots as described in the S "Models" book.
    Some thought is going into "doing trellis".

 o  Thomas Lumley's "require" and "provide" functions for library
    organization added.

 o  There is a new graphical parameter "gamma" which is designed to
    let users apply a ``gamma'' correction for their graphics
    displays.  Most monitors produce a color intensity which is
    related to voltage by the equation
			intensity = voltage ^ gamma
    with gamma about 2.5 for most PC monitors.  A typical symptom
    of this non-linearity is that a colorwheel produced by
			piechart(rep(1,48), col=48)
    shows a marked over representation of the red, green and blue
    and blue primaries.  If this is the case try
    and redraw the color wheel.  Vary gamma till you have a "nice"
    spectrum.  This is experimental and feedback would be welcome.
    (If this is useful we will do the same for postscript).


 o  The internals of the postscript device drivers have been rewritten
    in preparation for "doing equations".  The Adobe font metrics
    are no longer processed during the build process.  The original
    files are now processed directly by the driver.  The postscript
    emitted by the drivers should conform to the Adobe 3.0 standard.

 o  Typos and logic errors in "crossprod" pointed out by Arne Kovac
    have been fixed.

 o  "round" now works using IEEE rounding on platforms which support it.
	> round(.5 + -3:7)
	 [1] -2 -2  0  0  2  2  4  4  6  6  8

 o  A change to the PostScript graphics device driver change should
    stop plots from rotating unexpectedly when viewed with ghostview
    and other postscript viewers.

 o  Patches from Kurt Hornik for "structure" and "help" have been applied.

 o  "names" applied to 1-d arrays now does the "right thing" i.e. it
    returns the first component of the "dimnames" attribute rather than
    NULL.  Subsetting a 1-d array as a vector will produce a "names"
    attribute on the result.
 o  "atan" will now accept either 1 or 2 arguments ("atan2" still exists).

 o  "nchar" and "format" preserve "dim" and "dimname" attributes where

 o  There were problems with arguments in "switch".  These have been
    fixed.  There appears to be a bug in S with the expression
		z <- switch(1, a=, b=10, 20)
    They appear to return a "missing argument".  We die with an error
    message.  What is the right thing to do here?

 o  Problems deparsing arguments of the form "a"= and a=, have been fixed.

 o  The default graphics line width is now 1 rather than 0.

 o  "" problem in "read.table" pointed out by Peter Dalgaard fixed.

 o  paste(list(character(0),""), 1:2) no longer causes a segfault.
    "as.character" applied to a list now returns the vector obtained
    by deparsing each element of the list.

 o  "attach" now attaches objects at pos=2 when directed.

 o  Memory usage was measured in 1000 byte chunks with the -v flag.
    This has been changed to 1024 byte chunks.

 o  Dependency on the "OSF sprintf bug" has been removed.

r-announce mailing list -- Read
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-announce-request at

More information about the R-announce mailing list