Recent Changes to Old S


2/3/87

The `mark=' argument to the `points' function used to control the
plotting symbol (examples were listed in the detailed
documentation).  Now, the graphical parameter `pch' controls
plotting symbols as well as the plotting characters.  This means
that any function that uses a `pch' argument can use plotting
symbols.  For example,
   plot(x,y,type="b",pch=18)
will use plotting symbol 18 to produce a plot with both symbols
and connecting lines.  Plotting symbols number 15 through 18
produce a filled-in square, octagon, triangle, or diamond, on
devices that have area fill capabilities.  In general, if
parameter `pch' is an integer < 32, it is taken to be a mark
number; if it is a character, it is the character to be plotted.

A new method of storing character data makes retrieval faster;
for example, using the `font=' argument to `vu' goes more
quickly.  S automatically writes any new character datasets using
the new form, so eventually all character data will be converted
to the new faster form.  User-written functions must be
recompiled in order for them to access the new character data.
Old functions that access the new data typically die with a
"gtds: bad mode in data" message.

The `type=' argument to the `plot' function now works for the
`lines' and `points' functions.

Whenever S is run with the diary facility turned on, additional
information is added to the diary to enable a new "auditing"
facility.  Further information is available through Statistical
Research Report Number 25, "Auditing of Data Analyses", by Becker
and Chambers.  The auditing facility is still somewhat
experimental.

In user-written functions, the end-of-string character EOS should
not be enclosed in quotes.  The example on page 50 of "Extending
the S System" should read
   ENCODE("Group",I(ngroup),EOS)

Plotting functions now do a better job of scaling axes if NAs are
present in the arguments.

The `rep' function now allows zero replications and produces a
NULL result.

The `symbols' function has been revised considerably.  It has two
new arguments, `boxplots=' which allows boxplot-symbols to be
drawn at specified positions, and `thermometers=', which draws
partially-filled rectangles reminiscent of a thermometer.  It
also allows NAs in certain cases, and has fewer bugs (we hope).
In particular, the example on Pg 28 of the S book should work
now.

Functions `regress' and `regprt' were changed to provide somewhat
cleaner looking output.  T-statistics are rounded; lines are
shorter. Functions `reg' and `regress' also now take a
`correlation=' argument to control printing of
correlation/covariance matrices.

The `legend' function was changed to provide better control over
the layout of legends.  It displays text, plotting symbols,
lines, and filled-in or shaded rectangles.  It can produce
multi-column legends or legends on a colored background.

The `write' function has a new `append=' argument to allow
appending to an existing file.

Logarithmic axes were changed so that all tick labels share a
common format.

Graphics layers on the Teletype 5620 terminal can now be moved or
reshaped.  The plot will not automatically be re-drawn if the
window is reshaped; however, the next plotting functions will
make correct use of the reshaped window.

The "pause" button in `scatmat' now leaves a copy of the brush on
the scatterplot matrix, enabling screen dumps that realistically
depict the brush.

The function `polygon', which draws filled or hatched polygons,
is a replacement for the old `polyfill' and `hatch' functions.

Although no one had missed it, `xor' had gotten lost somewhere in
the distant past.  It is once again available.

Functions `stare', `prism', `photo', and `comic' are no longer
present due to the demise of the Honeywell machine.  Similarly,
`S BPLOT' is no more.


10/10/85

New device driver `postscript' produces Postscript output
suitable for a number of high-resolution printer/plotters such as
the Apple Laserwriter.


12/18/84

New functions are now available:
`dataset' - test for existance of a dataset;
`dim' - dimensionality of vectors, arrays;
`query' - return graphical parameters;
`quantile' - quantiles of a numeric structure;
`scatmat' - brushing a scatter-plot matrix;
`signif' - round to specified number of significant digits;
`spline' - spline fitting;
`xysort' - computation to minimize plotter motion to minimize
plotting time;

Density functions are now available for the distributions that
have probability/quantile functions.  They are named `dnorm',
`dt', `dchisq', etc.

A new device driver is available for the Teletype 5620 dot-mapped
display terminal: `tty5620'.

The `list' or `ls' function now performs pattern matching
identically to the UNIX (TM) shell.

Add speed= argument to the `hpgl' device driver family.  Also
added `hp7475' device driver.

New device driver supports the Tektronix 4105 color scope:
`tek4105'.

New device driver for Hewlett-Packard's 150 touch screen personal
computer/terminal: `hp150'.

A problem with the `menu' function was fixed.

__________________________________________________


1/1/84

The new S book, entitled S: An Interactive Environment for Data
Analysis and Graphics, describes all of the changes listed below.
__________________________________________________


12/15/82

The `S extract' utility (and ?extract macro) provides better
error checking and allows fields to be separated by white-space.

New functions `fatal', `warning', and `message' allow execution-
time printing of errors or informational messages.  They are
particularly useful in macros.

New function `crossprod' augments the `%c' operator.

The modulus operator `%%' provides a better result when given
negative data.

The `help' function is much faster.

11/8/82

New function `menu' assists in writing "user-friendly"
applications that use menus.

A device driver, `hp2627', is available for the Hewlett-Packard
2627 color scope.

New macro `matedit' allows editing of matrices using text
editors.

Standalone utility `S MAN' provides manual pages for S and
certain standalone graphics routines.

6/18/82

New function `sabl' computes the decomposition of a time series
into trend, seasonal, irregular and (optional) calendar
components.


6/1/82

New utility
  S HELP function ...
provides on-line documentation of S functions from outside of S.

The functions `edit' and `medit' look at the shell variable
EDITOR to determine which editor should be invoked.  For example,
to use the `vi' editor, execute the follwing shell commands:
   EDITOR=vi; export EDITOR
Also, medit has been modified so that it re-edits the previously
edited macro if no argument is given.  This allows re-editing a
macro that was rejected due to syntax errors.

Several functions have been changed to handle table structures
more reasonably.  `apply' retains the correct subset of tabel
labels.  `sweep' works with tables.  `tprint' and `print' work
correctly with one-dimensional tables.

New function `stamp' provides a time and date stamp on the
terminal, graph, and diary file.  This helps in identifying the
functions used to create a plot or display.

Allen McIntosh has extended the `glim' function to provide some
new capabilities.

The `S scandata' utility aids in the error checking of large
fixed-format data files.

The `stem' function has been modified so that, if both hinges are
identical, the remainder of the data is examined to determine
which points are outliers.

S datasets containing vectors, arrays, or time-series can be
created by routines callable from C or F77.  To see
documentation, use
S MAN cvwrite

The `tbl' function picks a single format for each numeric column
of a table, thus a column containing the numbers 1.5, 2, and 3.75
will appear as 1.50, 2.00, and 3.75.

If a file named "S.profile" exists in the directory where S is
executed, S will append to it a list of the functions which are
executed.  The utility "S SUMMARY" presents a sorted version of
the execution counts.

The `edit' function has a `pos=' arg for editing things on the
save database, etc.

Graphics Functions:

The barplot function has been extensively rewritten by Judy
Schilling.  Modifications include:
    individual bars may extend both above and below the axis
    graphical parameter `ylim' works with barplot
    bars may be filled in with areas of color
    a vector of bar centers is returned
    bar plots can be horizontal or vertical
    there is a provision for legends for divided bars
In addition, a new function `legend' is available for presenting
legends which relate shaded or filled areas to names.

The `text' function allows arguments `cex' and `col' to contain
vectors of character sizes and colors for the different labels.

High-level graphics functions have been changed so that the
argument `type="b"' draws lines that extend up to the points but
do not go through them.  (Overlaid points and lines are available
through `type="o"'.)

The `usa' function has a new argument `fifty=' which causes it to
draw squares in the Pacific ocean for AK and HI.  This is useful
for filled displays, such as on the AED512 color scope.

New function `quickvu' helps create character datasets which will
produce vugraphs with the `vu' function.

The `rdpen' function takes an argument `type=' which allows
interactive display of the points as the user gives them.

The new Hewlett-Packard 7470 pen plotter (inexpensive 8.5 x 11
inch) is supported with the device driver `hp7470'.  Device
drivers `hp7225v' and `hp7470v' provide rotated plots (vertical
axis longer than horizontal) on HP 7225 and 7470 plotters.

A new device driver `pic' creates a file "pic.out" which consists
of commands appropriate to the pic troff pre-processor.  This
enables S graphics to be produced as an integral part of a
troffed document.

Argument `ask= -1' to the Tektronix 4000 series device drivers
causes copies to be made automatically before beginning a new
frame.  This is useful with the `replot' function when using the
Tektronix to produce hard copy output of deferred plots.

A new device driver `tek4112' supports Tektronix 4112 raster-scan
terminals.  (It should also work for 4113 color terminals).

The device drivers for Tektronix 4662 and Hewlett-Packard 7221
pen plotters recognize a `speed=' argument which allow reduced
speed for high-quality applications.

The Ramtek 6211 color graphics device is supported as `ram6211'.

New device driver `comic' is designed for photographs on the FR80
microfilm recorder in "comic" mode, i.e., wider than they are
tall.  The device `comic' has been added to the BPLOT utility.

Device drivers `prism', `prsmv', `hp2623', `hp2648', `aed512',
and `tek4112', can fill polygonal areas with colors or patterns.
The function `hatch' has a new `fill=' argument for creating
filled polygons.


3/05/82

Revised versions of the `read', `dget' and `restore' functions
give much faster execution (about an order of magnitude
improvement for large amounts of data).  Their arguments and
interpretation of data input should be identical to the previous
versions.  In case of problems, the previous versions are
available as `pread', `pdget' and `prestore'.


11/25/81

Function `vu' has been enhanced to use vector-drawn fonts.  The
font definitions are datasets on the system database.  Use
help("vu") or help(dataset="font") for more information.

Device drivers for Hewlett-Packard 2648, 2647, and 2623 scopes
are available as hp2648, ... .


7/16/81

Functions `reg', `regress', `regprt' and `regsum' have been
modified so that matrices of dependent (y) variables can be used.

The recommended naming convention for macro temporary variable
names has been changed. Instead of using `$Tx', the system macros
use `?T(x)'. The `?T' macro generates a unique name, so that if
one macro that uses `?T(x)' to generate a name calls another
macro that also uses `?T(x)' as a temporary, the two names don't
conflict.

Subscripting operations provide more informative error messages.

Function `vu' can produce highlighted characters, and has an
option to restrict character sizes to ones that can be produced
by the device.

Arithmetic on time-series data aligns time periods properly.

The function `read' no longer requires user specification of the
number of items to be read if there are more than 2000.

If `x' is a general structure, the operation `x$3' extracts the
component named "3", while `x$[3]' extracts the third component.

New function `hat' returns diagonal of the regression "hat"
matrix.

New macros `barycentric' and `mixplot' provide for plots of
mixture data.

Function `cutree' returns the heights of the resulting cluster
groups.

Function `help' is responsive to line width set by
`options(width=xx)'.

New utility `S SHOME' gives the pathname of the S home directory
which leads to the S source code, etc.  Try `help("System")'.

New device driver `unixplot' produces a file `unixplot.out' which
is suitable for input to any of the standard Unix plotting
devices.  See `plot(5)' and `plot(1)' or `tplot(1)' in the Unix
User's Manual.

Optimization routines, described in Bell Laboratories memorandum
"Nonlinear Model Fitting in S" by Chambers and Wilks, have been
installed.


3/5/81

New functions `index' and `tapply' can be used to deal with
ragged arrays, e.g., tables with different numbers of
observations in each cell.

A bug that had plagued users of large macros and for loops has
been eliminated.  The symptoms of the bug were execution errors
that were often non-reproducible.

Utility `S BPLOT' has the ability to divert printout and graphics
output to remote stations.

New function `axis' provides a means for adding various axes to
previously produced plots.  It provides for standard, time
series, logarithmic, and probability axes, and has options for
suppressing ticks or labels, as well as arbitrary positioning of
axes on the plot.

Function `smatrix' has both `rowlab' and `collab' arguments.

Graphical parameter `axes' can be used in high-level plotting
routines to suppress axis (and surrounding box) generation.  For
example, `plot(x,y,axes=F)' produces a scatter plot without axes.

New arguments `full' and `text' to `pairs' function allow
production of a full array of plots rather than just a lower-
triangle, and allow text strings to identify observations.

Function `chapter' has a new argument, `detach', that allows
chapters to be detached when no longer needed.

Graphical function `barplot' has new arguments `beside' and
`col', as well as a change in argument `space'.  This allows
multiple bars to be placed beside one another and allows bars to
have different colors.

Argument `label' of function `starsymb' has been changed to
`collab' to avoid confusion with similar `label' argument of
`stars'.


11/13/80

Function `tbl' writes matrices to a file which is suitable for
phototypesetting by the TBL pre-processor to TROFF.

A new function `chull' determines the convex hull of a planar set
of points.  It can also successively peel convex hulls from the
points, assigning a depth to each point.

Graphics function `symbols' allows plotting of squares,
rectangles, circles, or star symbols at specified `(x,y)'
positions, either as a separate plot or on top of an existing
plot.

New argument `length' to `seq' function allows specification of
desired length of a sequence, e.g.,
     seq(-3.1416,3.1416,length=100)
generates a sequence of 100 numbers from -pi to pi.

Function `sample' generates random samples or permutations.

Function `napsack' solves knapsack problems (of limited size).

Function `mstree' has capability to return just the minimal
spanning tree.


Previously Announced Changes

Device drivers are available for Hewlett-Packard devices that use
the HP-GL Language, specifically the 7220 and 7225 plotters.  New
device functions are `hpgl', `hp7220h', `hp7220v' and `hp7225'.
Use `help("hpgl")' for details.

The `breaks' argument to function `cut' has been changed to be
compatible with the corresponding argument of `hist'.  This also
makes the result of `pretty(x)' appropriate as the `breaks'
argument.

Functions `medit' and `define' both have a `pos=' argument
referring to the database to receive their results.

New functions `gamma' and `lgamma' evaluate the gamma function
and its natural logarithm.

New graphical function `mulbar' produces a rectangular array of
bars of varying width and height. Can be used to display
residuals and chi-square statistics from fit to a data matrix,
etc.

Modifications to `stem' allow argument `head' to specify whether
the heading giving median and hinges should be printed, and
correct line-length problems in the output.

New stand-alone device drivers are available for stare, prism,
and photo.  They are invoked by
                  S GRAPH prism
and write their output on file `sgraph'.  This can be plotted by
means of the `S BPLOT' utility.

New option `metric=binary' allowed for `dist' function.  This is
useful for computing distances between rows of a binary incidence
matrix.

The function `usa' no longer changes the plot type parameter.
This corrects a problem with alignment of data plotted over a map
in deferred graphics.

Changes to S Prior to the Released Version (but may be missing in
the manual)

New function `hardcopy' activates any hard copy device attached
to Tektronix 4000 series scope terminals.

Graphical device driver functions can have arguments.  For
example, `printer' can be activated with a specified width and
length, i.e.,
          printer(width=50,length=30)
The `printer' function looks at the `options' values for width
and length for default values for these arguments.  Other device
drivers also take arguments.  If given `ask=FALSE', most device
drivers will not use the "GO?" message and wait for a reply;
instead they will automatically advance to a new frame.  See
Detailed documentation under `devices' and under specific device
names.

New function `arrows' produces variable size arrows with open or
closed arrow heads.

Device drivers for Hewlett-Packard 7221 and Tektronix 4662 pen
plotters no longer allow complex displays to overflow the
capacity of the device's buffer.

Device driver `tek10' handles Tektronix scope terminals that have
only upper case characters.

New function `approx' performs functional approximation.  Given
vectors `x' and `y', it uses a piecewise-linear interpolation to
return y-values corresponding to a specified set of x-values.


