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]]
Hello, I believe that this is maybe not a *feature* but at least expected behaviour. The call formals(args(`[`)) breaks down to > args(`[`) NULL > formals(NULL) NULL Warning message: In formals(fun) : argument is not a function Hope this helps, Rui Barradas ?s 18:26 de 06/10/2018, Laurent Gautier escreveu:> 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 at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >
Hello, I forgot to ask you to also try to break the `sum` instruction into its components: args(`sum`) does return a function. Therefore formals(args(`sum`)) returns something useable and no warning. Rui Barradas ?s 18:42 de 06/10/2018, Rui Barradas escreveu:> Hello, > > I believe that this is maybe not a *feature* but at least expected > behaviour. > > The call formals(args(`[`)) breaks down to > > > > args(`[`) > NULL > > formals(NULL) > NULL > Warning message: > In formals(fun) : argument is not a function > > > Hope this helps, > > Rui Barradas > > > ?s 18:26 de 06/10/2018, Laurent Gautier escreveu: >> 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 at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Hi,
Thanks for the note. How would explain the following snippet taken from
`formals` doc page (the code comment is also from that doc) ?
## formals returns NULL for primitive functions. Use it in combination with
## args for this case.
is.primitive(`+`)
formals(`+`)
formals(args(`+`))
Le sam. 6 oct. 2018 ? 13:42, Rui Barradas <ruipbarradas at sapo.pt> a
?crit :
> Hello,
>
> I believe that this is maybe not a *feature* but at least expected
> behaviour.
>
> The call formals(args(`[`)) breaks down to
>
>
> > args(`[`)
> NULL
> > formals(NULL)
> NULL
> Warning message:
> In formals(fun) : argument is not a function
>
>
> Hope this helps,
>
> Rui Barradas
>
>
> ?s 18:26 de 06/10/2018, Laurent Gautier escreveu:
> > 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 at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
>
[[alternative HTML version deleted]]
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 at 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 at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
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 at 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 at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >