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 >