Jun Shen
2010-May-07 19:30 UTC
[R] How to pass value to an argument in a function which is an argument to the main function
Dear all, I constructed this function called my.boxplot.stats by replacing fivnum() with quantile() in function boxplot.stats(). So I can try different quantile methods in bwplot(). The problem is I couldn't pass different values to the "type" argument to my.boxplot.stats, which in turn is an argument in bwplot(). Now I just have to manually change the "type" value in my.boxplot.stats. What I would like to do is call bwplot() like bwplot(CL~DOSE,data=patab,stats=my.boxplot.stats(type=7)), But I got an error: Error in my.boxplot.stats(type = 7) : element 1 is empty; the part of the args list of 'is.na' being evaluated was: (x) Thanks a lot. Jun Shen from Millipore Corporation =======================================================my.boxplot.stats<-function (x, coef = 1.5, *type=6*, do.conf = TRUE, do.out = TRUE) { if (coef < 0) stop("'coef' must not be negative") nna <- !is.na(x) n <- sum(nna) stats <- stats::quantile(x, type=type,na.rm = TRUE) iqr <- diff(stats[c(2, 4)]) if (coef == 0) do.out <- FALSE else { out <- if (!is.na(iqr)) { x < (stats[2L] - coef * iqr) | x > (stats[4L] + coef * iqr) } else !is.finite(x) if (any(out[nna], na.rm = TRUE)) stats[c(1, 5)] <- range(x[!out], na.rm = TRUE) } conf <- if (do.conf) stats[3L] + c(-1.58, 1.58) * iqr/sqrt(n) list(stats = stats, n = n, conf = conf, out = if (do.out) x[out & nna] else numeric(0L)) } [[alternative HTML version deleted]]
David Winsemius
2010-May-07 20:09 UTC
[R] How to pass value to an argument in a function which is an argument to the main function
On May 7, 2010, at 3:30 PM, Jun Shen wrote:> Dear all, > > I constructed this function called my.boxplot.stats by replacing > fivnum() > with quantile() in function boxplot.stats(). So I can try different > quantile > methods in bwplot(). The problem is I couldn't pass different values > to the > "type" argument to my.boxplot.stats, which in turn is an argument in > bwplot(). Now I just have to manually change the "type" value in > my.boxplot.stats. What I would like to do is call bwplot() like > > bwplot(CL~DOSE,data=patab,stats=my.boxplot.stats(type=7)), >You have defined a function with an argument of x that does not have a default value, so it throws an error when you call it with no value for x. (It's not complaining about the type argument.) -- David.> But I got an error: > Error in my.boxplot.stats(type = 7) : element 1 is empty; > the part of the args list of 'is.na' being evaluated was: > (x) > > Thanks a lot. > > Jun Shen from Millipore Corporation > > =======================================================> my.boxplot.stats<-function (x, coef = 1.5, *type=6*, do.conf = TRUE, > do.out > = TRUE) > { > if (coef < 0) > stop("'coef' must not be negative") > nna <- !is.na(x) > n <- sum(nna) > stats <- stats::quantile(x, type=type,na.rm = TRUE) > iqr <- diff(stats[c(2, 4)]) > if (coef == 0) > do.out <- FALSE > else { > out <- if (!is.na(iqr)) { > x < (stats[2L] - coef * iqr) | x > (stats[4L] + coef * > iqr) > } > else !is.finite(x) > if (any(out[nna], na.rm = TRUE)) > stats[c(1, 5)] <- range(x[!out], na.rm = TRUE) > } > conf <- if (do.conf) > stats[3L] + c(-1.58, 1.58) * iqr/sqrt(n) > list(stats = stats, n = n, conf = conf, out = if (do.out) x[out & > nna] else numeric(0L)) > } > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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