[R] factor always have type integer

Roger D. Peng rpeng at jhsph.edu
Wed Sep 8 22:11:51 CEST 2004

In some cases it makes sense to store "character" variables as factors 
(integers with labels) since this can take up much less memory.  If 
you really want to store `v2' as character, just do

data.frame(v1, I(v2))


Erich Neuwirth wrote:
> typeof applied to a factor always seems to return "integer",
> independently of the type of the levels.
> This has a strange side effect.
> When a variable is "imported" into a data frame,
> its type changes.
> character variables automatically are converted
> to factors when imported into data frames.
> Here is an example:
>  > v1<-1:3
>  > v2<-c("a","b","c")
>  > df<-data.frame(v1,v2)
>  > typeof(v2)
> [1] "character"
>  > typeof(df$v2)
> [1] "integer"
> It is somewhat surprising that
> the types of v2 and df$v2 are different.
> the answer is to do
> levels(df$v2)[df$v2]
> but that is somewhat involved.
> Should the types not be identical, and typeof applied to factors
> return the type of the levels?

More information about the R-help mailing list