Hi Josh, Your suggesstion works, and the following also works: 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]]) } } df } > df <- as.factor.loop(df, c("x","y")) > is.factor(df[["y"]]) [1] TRUE Thanks. Xiaobo Gu On Sun, Dec 11, 2011 at 10:23 AM, Joshua Wiley <jwiley.ps...@gmail.com> wrote: > 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 <guxiaobo1...@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@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/ ______________________________________________ R-help@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.