On Sep 3, 2013, at 7:19 AM, Matt Strauser wrote: > I have several data frames containing similar data. I'd like to pass these > data frames to a function for processing. The function would create newly > named "global" data frames containing the processed data. I cannot figure > out how to assign names to the data frames in Step 1 or Step 2 in the > following example: > > # sample function in pseudo code > processdf <- function(df, prefix) { > # df - data frame containing data for processing > # prefix - string to become the first part of the names of the resulting > data frames > # Step 1 - processs df into several subsets > df1 <<- subset(df, df$cond1 & df$cond2 & ...) > df2 <<- subset(df, df$cond3 & df$cond4 & ...) > df3 <<- subset(df, df$cond5 & df$cond6 & ...) > # and so on....for many more steps with resulting data frames
Generally subset does not need to have 'df$cond1' used. It uses nonstandard evaluation and will assume that unquoted tokens are column names, so this can be wrtten: > df1 <- subset(df, cond1 & cond2 ) > df2 <- subset(df, cond3 & cond4) > df3 <- subset(df, cond5 & cond6 ) There is, however, this warning in the help file: "For programming it is better to use the standard subsetting functions like `[`, and in particular the non-standard evaluation of argument subset can have unanticipated consequences." A similar warning is seen on the help page for 'with'. So this would be advised df1 <- df[ df[, 'cond1'] & df[,'cond2'], ] > > # Step 2 - rename the resulting global data frames > rename "df1" to prefix + "cond1cond2" ?assign # e.g.: # untested in absence of reproducible example # You should learn to use dput() assign(paste0(prefix, "cond1", "cond2"), df1, envir=.GlobalEnv) And please read the manual of your chosen mail-client and learn to post to Rhelp in plain text. -- David > rename "df2" to prefix + "cond3cond4" > rename "df3" to prefix + "cond5cond6" > # and so on for the remaining data frames > } > > Example using data frames: frame1 and frame2: > > processdf(frame1, "frame1") > # produces these data frames: > frame1cond1cond2 > frame1cond3cond4 > frame1cond5cond6 > > processdf(frame2, "frame2") > # produces these data frames: > frame2cond1cond2 > frame2cond3cond4 > frame2cond5cond6 > > Thank you for your thoughts, > Matt > > [[alternative HTML version deleted]] David Winsemius Alameda, CA, USA ______________________________________________ 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.