[R] Using ddply within a function by argument transfer

Fredrik Karlsson dargosch at gmail.com
Sun Mar 4 18:06:02 CET 2012


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 at 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 at 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 at 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 at 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 at 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."


More information about the R-help mailing list