Programming with Data: Errata

Page 134 line 16, missing right parenthesis:
if(length(y[[i]])) y[[i]] else 0

Page 135 line 31, missing right parenthesis:

if(all(x <= 0)) return(NA)

Page 136 line 3, missing right parenthesis:

if(all(x <= 0)) NA

page 306, line 15, class name should be quoted

setClass("threeWay", "array")

Chapter 7, generally. It would have been better to be consistent in quoting the name of a class when used as a literal, e.g., "structure" rather than structure. The S-Plus code tries to handle either, but quoted class names are the safe choice.

The following errors are found in first two printings but are corrected in the third (April, 2000).

Page vi, last paragraph: The S-Plus website has changed to

Page vi, "versions 5.0 and higher": This does not include "Splus 2000", which would be in the 4.x line.

Page 54, the example of setMethod in the middle of the page has an extra right parenthesis on the third line.

page 56, the setMethod example for function "print" uses "object" as the name for the first argument; it should be "x" to be consistent with the function. (The code as written works without errors, because S will rewrite the method, but it produces a warning message that may sound ominous.)

Page 185-6, the first sentence of section 4.9.6 should begin "When S selects a method from a call to a generic function, ...".
(The distinction is subtle, but in non-standard generic functions method selection does not take place at the beginning of the call, but rather when explicitly invoked.)

Page 343, the example in the last paragraph should be as follows (making na.rm the argument to callGeneric as was intended, and not the argument to setMethod):

setMethod("Summary", "track",
  function(x, ..., na.rm=F) callGeneric(x@y, na.rm=na.rm))

Page 447, line 9: "incompatibilites" should be "incompatibilities"

The following errors are found in first printing but are corrected in the second (March, 1999).

Page 103, Table 3.10, the first entry should all be on one line, and there is an extra "." at the end of the caption.

Page 111, Table 3.17, "traceMethod'` should be one column to the right.

Page 134, line 8, missing final ")" in the call to eval().

Page 185, line 17, should read 'name "..1" refers to ...'.

Page 196, last paragraph should read "Section 7.5 deals with ...".

Page 198, line -1, should read "where e is of class expression"

Page 212, third sentence of section 5.2 is unclear, better would be: "Each database is essentially a lookup table of non-empty strings, each string associated with an S object."

Page 215, line -3 of section 5.2.1 should read "... same semantics as referring...".

Page 216, line 11 should read "when an attach or detach call".

Page 217, line 3 in section 5.2.3, second sentence should read "All have names beginning with database. and completed ...".

Pages 245-7, the file name "rescale.S" should be "reScale.S", and the function rescale should be reScale in several occurrences on these pages.

Page 286, second paragraph, second sentence should read "Direct inclusion is restricted to unambiguous cases."

Page 340, second paragraph, the formal arguments to function "[" include a third argument, drop, so that the function declaration in the example should be

      function(x, ..., drop = T)  track(x@x[...], x@y[...]))
Page 341, the body of the example at the top of the page should have braces:

setReplaceMethod("[", "track",
  function(x, ..., value) {
    x@y[...] = as(value, "numeric")

Page 375, third line of display near the bottom of the page should be "writeLines", not "readLines".

Thanks to Doug Bates, Barney Campbell, Tim Hesterberg, David James, Brian Ripley, and Peter Wolf.
John Chambers<>
Last modified: Fri Mar 29 10:18:20 EST 2002