No, the problem is not with "with" but is that the OP's did not return the modified data.frame. He didn't show how the function was called, but I suspect the usage was like f0 <- function() globalDataFrame$newCol <- ... f0() where it should have been f1 <- function(dataFrame) { dataFrame$newCol <- ... dataFrame # return modified dataFrame } globalDataFrame <- f1(globalDataFrame)
Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf Of David Winsemius > Sent: Tuesday, December 06, 2011 12:05 PM > To: Steve E. > Cc: r-help@r-project.org > Subject: Re: [R] help wrapping findInterval into a function > > > On Dec 6, 2011, at 11:43 AM, Steve E. wrote: > > > Dear R Community, > > > > I hope you might be able to assist with a small problem creating a > > function. > > I am working with water-quality data sets that contain the > > concentration of > > many different elements in water samples. I need to assign quality- > > control > > flags to values that fall into various concentration ranges. Rather > > than a > > web of nested if statements, I am employing the findInterval > > function to > > identify values that need to be flagged and to assign the > > appropriate flag. > > It's probably your use of "with" rather than findInterval. The 'with' > function sets up an environment and is used mostly in interactive > session. If you have not passed a dataframe into the function then you > should use the name of the dataframe and '['. > > > > The data consist of a sample identifier, the analysis, and > > corresponding > > value. The findInterval function works well; however, I would like to > > incorporate it into a function so that I can run multiple findInterval > > functions for many different water-quality analyses (and I have to > > do this > > for many dataset) but it seems to fall apart when incorporated into a > > function. > > > > Run straighforward, the findInterval function works as desired, e.g. > > below, > > creating the new CalciumFlag column with the appropriate flag for, > > in this > > case, levels of calcium in the water: > > > > WQdata$CalciumFlag <- with(WQdata, ifelse(analysis == "Calcium", > > (flags <- > > c("Y", 'Q', "", "A") [findInterval(WQdata$value, c(-Inf, 0.027, 0.1, > > 100, > > Inf))]),"")) > > > > However, it does not worked when wrapped in a function (no error > > messages > > are thrown, it simply does not seem to do anything): > > > > WQfunc <- function() { > > WQdata$CalciumFlag <- with(WQdata, ifelse(analysis == "Calcium", > > (flags <- > > c("Y", 'Q', "", "A") [findInterval(WQdata$value, c(-Inf, 0.027, 0.1, > > 100, > > Inf))]),"")) > > } > > > > Calling the function WQfunc() does not produce an error but also > > does not > > produce the expected CalciumFlag, it seems to not do anything. > > > > Ultimately, what I need to get to is something like below where > > multiple > > findInterval functions for different analyses are included in a single > > function, then I can concatenate the results into a single column > > containing > > all flags for all analyses, e.g.: > > > > WQfunc <- function() { > > WQdata$CalciumFlag <- with(WQdata, ifelse(analysis == "Calcium", > > (flags <- > > c("Y", 'Q', "", "A") [findInterval(WQdata$value, c(-Inf, 0.027, 0.1, > > 100, > > Inf))]),"")) > > > > WQdata$SodiumFlag <- with(WQdata, ifelse(analysis == "Sodium", > > (flags <- > > c("Y", 'Q', "", "A") [findInterval(WQdata$value, c(-Inf, 0.050, > > 0.125, 125, > > Inf))]),"")) > > > > WQdata$MagnesiumFlag <- with(WQdata, ifelse(analysis == > > "Magnesium", (flags > > <- c("Y", 'Q', "", "A") [findInterval(WQdata$value, c(-Inf, 0.065, > > 0.15, 75, > > Inf))]),"")) > > > > .....etc for additional water-quality analyses... > > > > } > > > > As an aside, I started working with the findInterval tool from an > > example > > that I found online but am not clear as to how the multi-component > > configuration incorporating brackets actually works, can anyone > > suggest a > > good resource that explains this? > > > > > > I thank you very much for any assistance you may be able to provide. > > > > > > Regards, > > Steve > > > > -- > > View this message in context: > > http://r.789695.n4.nabble.com/help-wrapping-findInterval-into-a- > function-tp4165464p4165464.html > > Sent from the R help mailing list archive at Nabble.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. > > David Winsemius, MD > West Hartford, CT > > ______________________________________________ > 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. ______________________________________________ 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.