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

>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 <reckbo@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}}

