How about this? It changes a column to a factor, and optionally renames it.
facts <- function(meta, mod, newmodname) { meta[,mod] <- factor(meta[,mod]) if(!missing(newmodname)) { colnames(meta)[colnames(meta) == mod] <- newmodname } meta } > testdata <- data.frame(a=c(1,2,3), b=c(1,1,2)) > str(testdata) 'data.frame': 3 obs. of 2 variables: $ a: num 1 2 3 $ b: num 1 1 2 > > test1 <- facts(testdata, "a") > str(test1) 'data.frame': 3 obs. of 2 variables: $ a: Factor w/ 3 levels "1","2","3": 1 2 3 $ b: num 1 1 2 > > test2 <- facts(testdata, "b", "newb") > str(test2) 'data.frame': 3 obs. of 2 variables: $ a : num 1 2 3 $ newb: Factor w/ 2 levels "1","2": 1 1 2 Sarah On Wed, Mar 17, 2010 at 3:06 PM, AC Del Re <de...@wisc.edu> wrote: > Hi All, > > Im interested in creating a function that will convert a variable within a > data.frame to a factor while retaining the original name (yes, I know that I > can just: var <-factor(var) but I need it as a function for other > purposes). e.g.: > > # this was an attempt but fails. > > facts <- function(meta, mod, modname = "spec") { > meta$mod <- factor(meta$mod) > colnames(meta)['mod'] <- modname > return(meta) > } > > # ideally, would like to just specify the data.frame (=meta) and > # variable to convert to factor (=mod) (similar to function input below). > But am > # also interested in having the option to create a new variable and > # name (similar to the function input above). > > facts <- function(meta, mod) { > meta$mod <- factor(meta$mod) > return(meta) > } > > Thanks for any help! > > AC > -- Sarah Goslee http://www.functionaldiversity.org ______________________________________________ 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.