[R] Why can't "apply" be used with "as.factor" on a data.frame ?

hadley wickham h.wickham at gmail.com
Sun Mar 7 13:05:28 CET 2010


The basic reason because apply works with matrices - it first turns
the input into a matrix, processes each column and then returns a
matrix.  See colwise in the plyr package for a function that works
column wise on a data frame, returning a data frame.

Hadley

On Sun, Mar 7, 2010 at 11:07 AM, Tal Galili <tal.galili at gmail.com> wrote:
> Hi all,
>
> Let's say I have a data.frame and wants to turn each of it's columns into a
> factor.
> My instinct would be to use as.factor with apply. But this won't work, and
> result with a data.frame of characters.
> I found another solution for how to achieve this, but I would also like to
> understand - *WHY* does it work this way?
>
> Here is an example script:
> a <- data.frame(x1 = rnorm(100), x2 = sample(c("a","b"), 100, replace = T),
> x3 = factor(c(rep("a",50) , rep("b",50))))
> apply(a2, 2,class) # why is column 3 not a factor ?
> a[,3]  # since it IS a factor.
> a2 <- apply(a, 2,as.factor) # won't work - why not ?
> a2[,3]  # Why was this just turned into a character ???
> # A solution
> a2 <- lapply(a, as.factor)
> a3 <- as.data.frame(a2)
> str(a3)
>
>
> Thanks,
> Tal
>
>
>
> ----------------Contact
> Details:-------------------------------------------------------
> Contact me: Tal.Galili at gmail.com |  972-52-7275845
> Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il (Hebrew) |
> www.r-statistics.com (English)
> ----------------------------------------------------------------------------------------------
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Assistant Professor / Dobelman Family Junior Chair
Department of Statistics / Rice University
http://had.co.nz/



More information about the R-help mailing list