Hi, On Sunday, March 04, 2012 03:28:44 PM Fredrik Karlsson wrote: > Hi Joshua, > > Yes, sorry - I attached an .rda file - maybe it was squashed. > Anyway, yes, I agree with you that the function in the present state would > not be of very much help to an end user (and your right in thinking that > this is not the end implementation of the function, just an example). I too > cannot find a combination of candidate functions that work. > What I need is the ability for the user to specify the columns in data to > be processed by ddply and the data frame itself. So far I have not been > able to do this using ddply - I guess I'll have to roll my own using for > loops and data frame subsetting or something similar.
Yes, I think that's right. See here: http://groups.google.com/group/manipulatr/browse_thread/thread/26bed2ff5197e589 for a discussion of why this is. Best, Ista > > Thank you for trying! > > /Fredrik > > On Sun, Mar 4, 2012 at 12:50 PM, Joshua Wiley <jwiley.ps...@gmail.com>wrote: > > Hi, > > > > Still no data (either not attached or a format the mail server > > scrubs), but I made some up. ddply seems to be a bit tricky in that > > it holds off evaluating its arguments. I honestly am not sure how to > > get around that---no amount of fancy footwork with eval() or quote() > > is going to change the internals of ddply. The easiest approach seems > > to be to change the call to it in the first place. You cannot do this > > by passing arguments, but you can by using subsitute() to have your > > test function construct and then evaluate the ddply() call. Here is a > > working example: > > > > require(plyr) > > > > pb <- data.frame(Type = sample(6, 30, TRUE), > > > > Sex = sample(0:1, 30, TRUE), > > Speaker = sample(3, 30, TRUE), > > F1 = rnorm(30)) > > > > insidefun <- function(x){ > > > > return(x+1) > > > > } > > > > testfun <- function(data, factors, x, fun = quote(summarize)) { > > > > arglist <- list(data = data, factors = as.quoted(factors), fun = fun, x = > > > > x) > > > > myd <- substitute(ddply(.data=data, > > > > .variables=factors, .fun = fun, norm = x), arglist) > > > > out <- eval(myd) > > return(out) > > > > } > > > > testfun(pb, c("Type","Sex","Speaker"), x = quote(insidefun(F1))) > > > > By the way, in its present state, this is essentially a painfully > > complex wrapper to ddply and your code would probably be less buggy > > and easier to understand just using ddply, but presumably you are > > planning to have some other stuff go on in the real testfun(). > > > > Cheers, > > > > Josh > > > > On Sun, Mar 4, 2012 at 9:06 AM, Fredrik Karlsson <dargo...@gmail.com> > > > > wrote: > > > Hi, > > > > > > Sorry all - I will provide a reproducable version of this. I am still > > > seeing the same problem - maybe it is due to me having to use summarize? > > > Anyway, here is an example (using the data set attached): > > > > > > Two test functions: > > > > > > insidefun <- function(x){ > > > > > > return(x+1) > > > > > > } > > > > > > testfun <- function(data,factors,x){ > > > > > > datOrig <- ddply(.data=data, > > > > > > .variables=as.quoted(factors), > > > .fun=summarize, > > > norm=insidefun(x) > > > ) > > > > > > } > > > > > >> testfun(pb,c("Type","Sex","Speaker"),F1) > > > > > > Error in insidefun(x) : object 'x' not found > > > > > > Now, if I call ddply directly, it works: > > >> head(ddply(pb,.(Type,Sex,Speaker),summarize,norm=insidefun(F1)),4) > > >> > > > Type Sex Speaker norm > > > > > > 1 c f 62 461 > > > 2 c f 62 401 > > > 3 c f 62 601 > > > 4 c f 62 611 > > > > > > I'm sure I'm doing something stupid - and of course I see that the ddply > > > > call > > > > > inside the function will have to do some processing in order to get the > > > arguments in the right mode/class - but I don't know how. > > > > > > /Fredrik > > > > > > > > > > > > > > > On Sun, Mar 4, 2012 at 6:44 AM, David Winsemius <dwinsem...@comcast.net > > > > > >wrote: > > >> On Mar 4, 2012, at 12:20 AM, Fredrik Karlsson wrote: > > >> Hi Michael, > > >> > > >>> No, sorry - that is neither the problem or the solution. > > >>> > > >>> suspicious.vowels(pb,c("Type",**"Sex","Vowel"),F1,F2) > > >>> > > >>> Error in mean(y, na.rm = na.rm) : object 'f1' not found > > >> > > >> Obviously you have still failed to offer reproducible code to go along > > >> wiht your questions, but I would observe that in R that f1 is NOT going > > > > to > > > > >> equal F1. > > >> > > >> -- > > >> > > >>> /Fredrik > > >>> > > >>> On Sat, Mar 3, 2012 at 7:04 PM, R. Michael Weylandt < > > >>> > > >>> michael.weyla...@gmail.com> wrote: > > >>> Untested, but it might be simpler than that: > > >>>> suspicious.vowels(pb,c("Type",**"Sex","Vowel"),"F1",F2) > > >>>> > > >>>> Note that "F1" is in quotes but F2 isn't. > > >>>> > > >>>> Michael > > >>>> > > >>>> On Sat, Mar 3, 2012 at 5:46 PM, Fredrik Karlsson <dargo...@gmail.com> > > >>>> > > >>>> wrote: > > >>>>> Dear list, > > >>>>> > > >>>>> Sorry, but I cannot get my head around how and I could pass > > >>>>> arguments > > >>>> > > >>>> along > > >>>> > > >>>>> to high-level functions. What I have is a function that would > > >>>>> benefit > > >>>> > > >>>> from > > >>>> > > >>>>> me using ddply from the plyr package. > > >>>>> However, I cannot get the arguments passing part right. > > >>>>> > > >>>>> So, this is my function: > > >>>>> suspicious.vowels <- > > >>>>> > > >>>>> function(data,factors,f1,f2,**evaluate.original.params=TRUE) { > > >>>>> > > >>>>> datOrig <- ddply(.data=data, > > >>>>> > > >>>>> .variables=as.quoted(factors), > > >>>>> .fun=summarize, > > >>>>> norm=vector.space(f1,f2)[["**Vector norms"]] > > >>>>> ) > > >>>>> > > >>>>> print(datOrig) > > >>>>> > > >>>>> } > > >>>>> > > >>>>> Of course, if I try to call this function, I get an error message > > >>>>> telling > > >>>>> > > >>>>> me that the "f1" argument does not exist: > > >>>>> suspicious.vowels(pb,c("Type",**"Sex","Vowel"),"F1",F2) > > >>>>> > > >>>>> Error in mean(y, na.rm = na.rm) : object 'f1' not found > > >>>>> > > >>>>> However, the corresponding ddply call, when called from the console, > > >>>>> does > > >>>>> > > >>>>> work: > > >>>>> head(ddply(pb,as.quoted(c("**Type","Sex","Vowel")),** > > >>>> > > >>>> summarize,norm=vector.space(**F1,F2)[["Vector > > >>>> > > >>>>> norms"]]),4) > > >>>>> Type Sex Vowel norm > > >>>>> 1 c f aa 250.1570 > > >>>>> 2 c f aa 497.2711 > > >>>>> 3 c f aa 172.3108 > > >>>>> 4 c f aa 109.4464 > > >>>>> ... > > >>>>> > > >>>>> So, how do I modify the function to pass the arguments that I supply > > >>>>> correctly? I cannot get my head around this enough to find the > > > > correct > > > > >>>>> combination of deparse /substitute /... to get this right. > > >>>>> > > >>>>> I would be thankful for all the help I could get on this. > > >>>>> > > >>>>> /Fredrik > > >>>>> > > >>>>> -- > > >>>>> "Life is like a trumpet - if you don't put anything into it, you > > > > don't > > > > >>>> get > > >>>> > > >>>>> anything out of it." > > >>>>> > > >>>>> [[alternative HTML version deleted]] > > >>>>> > > >>>>> ______________________________**________________ > > >>>>> R-help@r-project.org mailing list > > >>>>> https://stat.ethz.ch/mailman/**listinfo/r-help< > > > > https://stat.ethz.ch/mailman/listinfo/r-help> > > > > >>>>> PLEASE do read the posting guide > > >>>> > > >>>> http://www.R-project.org/**posting-guide.html< > > > > http://www.R-project.org/posting-guide.html> > > > > >>>>> and provide commented, minimal, self-contained, reproducible code. > > >>> > > >>> -- > > >>> "Life is like a trumpet - if you don't put anything into it, you don't > > > > get > > > > >>> anything out of it." > > >>> > > >>> [[alternative HTML version deleted]] > > >>> > > >>> ______________________________**________________ > > >>> R-help@r-project.org mailing list > > >>> https://stat.ethz.ch/mailman/**listinfo/r-help< > > > > https://stat.ethz.ch/mailman/listinfo/r-help> > > > > >>> PLEASE do read the posting guide http://www.R-project.org/** > > >>> posting-guide.html <http://www.R-project.org/posting-guide.html> > > >>> and provide commented, minimal, self-contained, reproducible code. > > >> > > >> David Winsemius, MD > > >> West Hartford, CT > > > > > > -- > > > "Life is like a trumpet - if you don't put anything into it, you don't > > > > get > > > > > anything out of it." > > > > > > ______________________________________________ > > > 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. > > > > -- > > Joshua Wiley > > Ph.D. Student, Health Psychology > > Programmer Analyst II, Statistical Consulting Group > > University of California, Los Angeles > > https://joshuawiley.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.