New codes() methods

Jonathan Rougier J.C.Rougier@durham.ac.uk
Thu, 4 Nov 1999 11:23:44 +0000 (GMT)


Hi Everyone,

Can I suggest a couple of new `codes' methods.  I know codes is a bit
dodgy (at least, according to the comments in codes.factor), but for what
it's worth I like to extract codes from data frames of factors, for which
the following two functions (which operate recursively) are helpful:

"codes.default" <-
function(x)
{
    if (is.list(x))
      lapply(x, codes)
    else
      codes(factor(x))
}

"codes.data.frame" <-
function(x)
{
    row.names <- attr(x, "row.names")
    data.frame(codes(as.list(x)), row.names = row.names)
}

#### Hence:

lvl <- ordered(c("L", "H"), c("L", "H"))
llist <- rep(list(lvl), 4)
codes(llist)			# list of codes
expand.grid(llist)		# data frame of factors
codes(expand.grid(llist))	# data frame of codes

The non-list default behaviour is for data frames that mix factors with
other stuff: the usual codes(factor(1:10)) caveat (from the help file) 
still applies, of course!  Note that using codes on an array will produce
a vector as the dim attribute is lost, eg

codes(matrix(1:12, 3, 4))	# shocking!

but although I toyed with the idea of mapping matrices to data frames in
the default function I thought in the end that this was making a
presumption about the interpretation of the rows and columns that was not
justified.  After all, you could still do

codes(as.data.frame(matrix(1:12, 3, 4)))

if the presumption *was* justified.

Cheers, Jonathan.

Jonathan Rougier                       Science Laboratories
Department of Mathematical Sciences    South Road
University of Durham                   Durham DH1 3LE

"[B]egin upon the precept ... that the things we see are to be 
 weighed in the scale with what we know"  (Meredith, 1879, The Egoist)

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._