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.

Thank you for trying!

/Fredrik

On Sun, Mar 4, 2012 at 12:50 PM, Joshua Wiley <jwiley.psych@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 <dargosch@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 <dwinsemius@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.weylandt@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 <dargosch@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/
>



-- 
"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]]

