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.