[Rd] c.factor

Brian Ripley ripley at stats.ox.ac.uk
Wed Nov 15 10:31:18 CET 2006

On Tue, 14 Nov 2006, Bill Dunlap wrote:

> On Tue, 14 Nov 2006, Prof Brian Ripley wrote:
>> Well, R has managed without a factor method for c() for most of its decade
>> of existence (not that it originally had factors as we know them).
>> I would argue that factors are best viewed as an enumeration type, and
>> anything which silently changes their level set is a bad idea.  I can see
>> a case for a c() method for factors that combines factors with the same
>> level sets, but I can also see this is best done by users who know the
>> level sets are same (c.factor would have to expend a considerable effort
>> to check).
>> You also need to consider the dispatch rules.  c.factor will be called
>> whenever the first argument is a factor, whatever the others are. S4 (I
>> think, definitely S4-based versions of S-PLUS) has an alternative concat()
>> that works differently (recursively) and seems a more natural model.
> In addition, c() has always had a double meaning of
>  (a) turning an object into a simple "vector" (an object
>      without "attributes"), as in
>      > c(factor(c("Cat","Dog","Cat")))
>      [1] 1 2 1
>      > c(data.frame(x=1:2,y=c("Dog","Cat")))
>      $x
>      [1] 1 2
>      $y
>      [1] Dog Cat
>      Levels: Cat Dog

To my surprise that was not documented at all on the R help page, and I've 
clarified it.  (BTW, at least in R it does not remove names, just all 
other attributes.)

>  (b) concatenating several such vectors into one.
> The proposed c.factor does only (b).

(Strictly not, as a factor is not a vector.)

But the help page explicitly only describes the default method, and some 
of the other methods do preserve some attributes, AFAIR.

> Should we just
> throw c() into the ash heap and use as.vector() or
> concat() instead?
> The whole concept of concatenating objects of disparate
> types is suspect.

I think working on a concat() for R would be helpful.  I vaguely recalled 
something like it in the Green Book, but the index does not help (but then 
it is not very complete).


Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-devel mailing list