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.