On Sat, Aug 9, 2014 at 9:56 AM, Patrick Burns <pbu...@pburns.seanet.com>
wrote:

> On 07/08/2014 07:21, Joshua Wiley wrote:
>
>> Hi Ryan,
>>
>> It does work, but the *apply family of functions always pass to the first
>> argument, so you can specify e2 = , but not e1 =.  For example:
>>
>>  sapply(1:3, `>`, e2 = 2)
>>>
>> [1] FALSE FALSE  TRUE
>>
>
> That is not true:
>

But it is passed as the first argument, not by name, but positionally.  The
reason it works with your gt() is because R with regular functions is
flexible:

> f <- function(x, y) x > y
> f(1:3, x = 2)
[1]  TRUE FALSE FALSE

but primitives ARE positionally matched

> `>`(1:3, 2)
[1] FALSE FALSE  TRUE
> `>`(1:3, e1 = 2)
[1] FALSE FALSE  TRUE



>
> gt <- function(x, y) x > y
>
> > sapply(1:3, gt, y=2)
> [1] FALSE FALSE  TRUE
> > sapply(1:3, gt, x=2)
> [1]  TRUE FALSE FALSE
>
> Specifying the first argument(s) in an apply
> call is a standard way of getting flexibility.
>
> I'd hazard to guess that the reason the original
> version doesn't work is because `>` is Primitive.
> There's speed at the expense of not behaving quite
> the same as typical functions.
>
> Pat
>
>
>>  From ?sapply
>>>
>>
>>       'lapply' returns a list of the same length as 'X', each element of
>>       which is the result of applying 'FUN' to the corresponding element
>>       of 'X'.
>>
>> so `>` is applied to each element of 1:3
>>
>> `>`(1, ...)
>> `>`(2, ...)
>> `>`(3, ...)
>>
>> and if e2 is specified than that is passed
>>
>> `>`(1, 2)
>> `>`(2, 2)
>> `>`(3, 2)
>>
>> Further, see ?Ops
>>
>>     If the members of this group are called as functions, any
>>            argument names are removed to ensure that positional matching
>>            is always used.
>>
>> and you can see this at work:
>>
>>  `>`(e1 = 1, e2 = 2)
>>>
>> [1] FALSE
>>
>>> `>`(e2 = 1, e1 = 2)
>>>
>> [1] FALSE
>>
>> If you want to the flexibility to specify which argument the elements of X
>> should be *applied to, use a wrapper:
>>
>>  sapply(1:3, function(x) `>`(x, 2))
>>>
>> [1] FALSE FALSE  TRUE
>>
>>> sapply(1:3, function(x) `>`(2, x))
>>>
>> [1]  TRUE FALSE FALSE
>>
>>
>> HTH,
>>
>> Josh
>>
>>
>>
>> On Thu, Aug 7, 2014 at 2:20 PM, Ryan <rec...@bwh.harvard.edu> wrote:
>>
>>  Hi,
>>>
>>> I'm wondering why calling ">" with named arguments doesn't work as
>>> expected:
>>>
>>>  args(">")
>>>>
>>> function (e1, e2)
>>> NULL
>>>
>>>  sapply(c(1,2,3), `>`, e2=0)
>>>>
>>> [1] TRUE TRUE TRUE
>>>
>>>  sapply(c(1,2,3), `>`, e1=0)
>>>>
>>> [1] TRUE TRUE TRUE
>>>
>>> Shouldn't the latter be FALSE?
>>>
>>> Thanks for any help,
>>> Ryan
>>>
>>>
>>> The information in this e-mail is intended only for th...{{dropped:23}}
>>>
>>
>> ______________________________________________
>> 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.
>>
>>
> --
> Patrick Burns
> pbu...@pburns.seanet.com
> twitter: @burnsstat @portfolioprobe
> http://www.portfolioprobe.com/blog
> http://www.burns-stat.com
> (home of:
>  'Impatient R'
>  'The R Inferno'
>  'Tao Te Programming')
>



-- 
Joshua F. Wiley
Ph.D. Student, UCLA Department of Psychology
http://joshuawiley.com/
Senior Analyst, Elkhart Group Ltd.
http://elkhartgroup.com
Office: 260.673.5518

        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to