[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