From gregor.gorjanc at bfro.uni-lj.si  Sat Nov 11 09:29:41 2006
From: gregor.gorjanc at bfro.uni-lj.si (Gregor Gorjanc)
Date: Sat, 11 Nov 2006 09:29:41 +0100
Subject: [Rd] c() for factors
Message-ID: <455589F5.7070207@bfro.uni-lj.si>

Dear R-core!

I have written a function mapLevels() to map levels of a factor. It can
produce a map (internally a list) of factor levels and internal integer
codes. I call this integer levelsMap. There is also character levelsMap,
but not of importance at this moment. I found out that it was quite
straightforward to write c() method for factors with use of mapLevels()
and Iam asking here if there is any interest to include this into base R.

In base R c() on two factors coerces to internal integer codes

> f1 <- factor(c("A", "B"))
> f2 <- factor(c("A", "C"))
> f1
[1] A B
Levels: A B
> f2
[1] A C
Levels: A C
> c(f1, f2)
[1] 1 2 1 2

or character vector if one of arguments is character

c(as.character(f1), f2)
[1] "A" "B" "1" "2"

this is OK, but not really wanted by the user. Code bellow show my
implementation of c.factor().

For the moment mapLevels() and c.factor() live in gdata package (from
version 2.3.1) - it has ben submitted to CRAN last night.

> install.packages("gdata")
> library(gdata)
## c.factor is not exported
> gdata:::c.factor(f1, f2)
[1] A B A C
Levels: A B C
> gdata:::c.factor(as.character(f1), f2)
[1] A B A C
Levels: A B C
> gdata:::c.factor(f1, as.character(f2))
[1] A B A C
Levels: A B C
> gdata:::c.factor(as.integer(f1), f2)
Error in mapLevels.default(X[[1]], ...) : mapLevels can only be used on
?factor? and ?character? atomic 'x'

As can be seen characters are handled in the same way as factors. Does
anyone see any value in this?

-- 
Lep pozdrav / With regards,
    Gregor Gorjanc
----------------------------------------------------------------------
University of Ljubljana     PhD student
Biotechnical Faculty
Zootechnical Department     URI: http://www.bfro.uni-lj.si/MR/ggorjan
Groblje 3                   mail: gregor.gorjanc <at> bfro.uni-lj.si

SI-1230 Domzale             tel: +386 (0)1 72 17 861
Slovenia, Europe            fax: +386 (0)1 72 17 888

----------------------------------------------------------------------
"One must learn by doing the thing; for though you think you know it,
 you have no certainty until you try." Sophocles ~ 450 B.C.



[Rd] c() for factors
Gregor Gorjanc