[R] as.factor does not work inside function

Joshua Wiley jwiley.psych at gmail.com
Sun Dec 11 03:23:49 CET 2011


Hi Xiaobo,

The problem is that your function is not assigning the results to your
data frame---df is an internatl copy made by the function.  This is
done to prevent calling functions to have unexpected events such as
overwriting objects in the global environment.  Anyway, I think you
can accomplish what you want using lapply():

## your data
df <- data.frame(x=1:5, y=2:6)
## apply the function, as.factor() to all the elements in the first argument
## and save the results in the relevant columns of df
df["x"] <- lapply(df["x"], as.factor)

## check results
is.factor(df[, "x"])

Hope this helps,

Josh


On Sat, Dec 10, 2011 at 6:06 PM, Xiaobo Gu <guxiaobo1982 at gmail.com> wrote:
> Hi,
>
> I am trying to write a function do cast columns of data frame as
> factor in a loop, the source is :
>
>
> as.factor.loop <- function(df, cols){
>
>        if (!is.null(df) && !is.null(cols) && length(cols) > 0)
>        {
>                for(col in cols)
>    {
>                        df[[col]] <- as.factor(df[[col]])
>                }
>        }
> }
>
>
> source('D:/ambertuil.r')
> x <- 1:5
> y <- 2:6
> df <- data.frame(x=x, y=y)
> as.factor.loop(df, c("x"))
>
> But after the function call, the df data frame does not change,
> because
>
> is.factor(df[["x]])
> FALSE
>
> But if I call this in R console directlly, it works
>
> for(col in c("x","y")){df[[col]] <- as.factor(df[[col]])}
>
>
>
> is.factor(df[["x]])
> FALSE
>
>
> Regards,
>
> Xiaobo Gu
>
> ______________________________________________
> 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.



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
Programmer Analyst II, Statistical Consulting Group
University of California, Los Angeles
https://joshuawiley.com/



More information about the R-help mailing list