[Rd] Warning when calling formals() for `[`.

Rui Barradas ruipb@rr@d@@ @ending from @@po@pt
Sun Oct 7 16:19:09 CEST 2018


Hello,

Inline.

Às 15:07 de 07/10/2018, Laurent Gautier escreveu:
> Note that having "function" in its class attribute does not make an 
> object a primitive.

I did not say it does.

What Peter said is that "args() on a primitive should yield a closure" 
and this return value is indeed a closure.

Rui Barradas

> For example:
> 
>  > class(`[`)
> [1] "function"
>  > is.primitive(`[`)
> [1] TRUE
>  > class(`rnorm`)
> [1] "function"
>  > is.primitive(`rnorm`)
> [1] FALSE
> 
> 
> Le dim. 7 oct. 2018 à 10:04, Rui Barradas <ruipbarradas using sapo.pt 
> <mailto:ruipbarradas using sapo.pt>> a écrit :
> 
>     Hello,
> 
>     I don't see why you say that the documentation seems to be wrong:
> 
> 
>     class(args(`+`))
>     #[1] "function"
> 
> 
>     args() on a primitive does return a closure. At least in this case
>     it does.
> 
> 
>     Rui Barradas
> 
>     Às 14:05 de 07/10/2018, Peter Dalgaard escreveu:
>      > There is more "fun" afoot here, but I don't recall what the point
>     may be:
>      >
>      >> args(get("+"))
>      > function (e1, e2)
>      > NULL
>      >> args(get("["))
>      > NULL
>      >> get("[")
>      > .Primitive("[")
>      >> get("+")
>      > function (e1, e2)  .Primitive("+")
>      >
>      > The other index operators, "[[", "[<-", "[[<-" are similar
>      >
>      > The docs are pretty clear that args() on a primitive should yield
>     a closure, so at least the documentation seems to be wrong.
>      >
>      > -pd
>      >
>      >
>      >> On 6 Oct 2018, at 19:26 , Laurent Gautier <lgautier using gmail.com
>     <mailto:lgautier using gmail.com>> wrote:
>      >>
>      >> Hi,
>      >>
>      >> A short code example showing the warning might the only thing
>     needed here:
>      >>
>      >> ```
>      >>> formals(args(`[`))
>      >> NULL
>      >>
>      >> *Warning message:In formals(fun) : argument is not a function*
>      >>> is.function(`[`)
>      >> [1] TRUE
>      >>> is.primitive(`[`)
>      >> [1] TRUE
>      >> ```
>      >>
>      >> Now with an other primitive:
>      >>
>      >> ```
>      >>> formals(args(`sum`))
>      >> $...
>      >>
>      >>
>      >> $na.rm
>      >> [1] FALSE
>      >>
>      >>> is.function(`sum`)
>      >> [1] TRUE
>      >>> is.primitive(`sum`)
>      >> [1] TRUE
>      >>> class(`[`)
>      >> [1] "function"
>      >> ```
>      >>
>      >> Is this a feature ?
>      >>
>      >>
>      >> Laurent
>      >>
>      >>      [[alternative HTML version deleted]]
>      >>
>      >> ______________________________________________
>      >> R-devel using r-project.org <mailto:R-devel using r-project.org> mailing list
>      >> https://stat.ethz.ch/mailman/listinfo/r-devel
>      >
>



More information about the R-devel mailing list