On 10/17/2007 1:12 PM, Daniel E. Bunker wrote: > Dear R Users, > > I am trying to write a wrapper around summarize and xYplot from Hmisc > and am having trouble understanding how to pass arguments from the > function I am writing to the nested functions. > > There must be a way, but I have not been able to figure it out. > > An example is below.
I think you need to simplify your example. I can't tell what you want to do. It would be helpful if you gave us a simpler example showing what you'd like to use as arguments to your function, and what you'd like the function it calls to see. Then you'll probably get several suggestions of how to do it. Duncan Murdoch > Any advice would be greatly appreciated. > > Thanks, Dan > > > > > > # some example data > df=expand.grid(rep=1:4, fac1=c("a","b"), fac2=c("c","d"), fac3=c > ("e","f")) > df$resp1=rnorm(length(df$fac1)) > df > > # define a funciton to compute mean, std error and n. > meanstderr <- function(x) c(Mean=mean(x,na.rm=TRUE),se=sqrt(var > (x,na.rm=TRUE)/length(na.omit(x))), n=length(na.omit(x))) > > > # what I want to wrap into a single funtction: > sumdf=with(df, summarize(X=resp1, by=llist(fac1, fac2, fac3), > stat.name="resp1", FUN=meanstderr)) > xYplot(Cbind(resp1, resp1-se, resp1+se) ~ as.numeric(fac1)|fac2, > groups=fac3, data=sumdf, type='b', > scales=list(x=list(labels=levels(df$fac1), at=1:length(levels(df > $fac1)))), xlim=c(0,length(levels(df$fac1))+1)) > > # here is a function to make the call to "summarize", but I cannot > understand how to pass the arguments to "summarize" > # I've tried passing them as names, text and vectors, but to no avail > xYerrbar=function(formula, data = sys.frame(sys.parent()), groups, > subset, > xlab = NULL, ylab = NULL, ylim = NULL, panel = panel.xYplot, > prepanel = prepanel.xYplot, scales = NULL, minor.ticks = NULL, > ...) > { # data=df; groups=fac2 > require("Hmisc") > require("grid") > require("lattice") > ytext <- as.character(formula[2]) > yvname <- formula[[2]] > y <- eval(parse(text = ytext), data) > xexp <- formula[[3]] > if (length(xexp) > 1 && as.character(xexp[[1]]) == "|") { > xvname <- xexp[[2]] > byname <- xexp[[3]] > xtext <- as.character(xexp[2]) > bynametext <- as.character(xexp[3]) > } > else {xvname <- xexp; xtext <- as.character(xexp)} > xv <- eval(xvname, data) > byfac <- eval(byname, data) > if (!missing(groups)) > {groups <- eval(substitute(groups), data)} > # none of the below seem to work > sumdf1=do.call("summarize", args=list(X=y, by=llist(xvname), > FUN=meanstderr)) > sumdf2=do.call("summarize", args=list(X=y, by=xv, FUN=meanstderr)) > sumdf4=summarize(y, by=llist(xv), FUN=meanstderr) > } > > xYerrbar(formula=resp1~fac2|fac1, data=df, groups=fac3) > > ______________________________________________ > 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.