Hello,

This is the *third* time I send this, the first two I had a failure notice so if you have already received it please apologize.

I believe this is consistent with the doc.
  From section Value:

formals returns the formal argument list of the function specified, as a
pairlist, or NULL for a non-function or primitive.


So since `+` is primitive formals is expected to return NULL.
Now, as for formals(args(`+`)) once again break it down to its two parts.

  > args(`+`)
function (e1, e2)
NULL


Now pass the return value to formals.

  > formals(function (e1, e2) NULL)
$e1


$e2


(I first tried this last call with the argument between back ticks and
it didn't work, I wonder why.)


Hope this helps,

Rui Barradas


Às 18:52 de 06/10/2018, Laurent Gautier escreveu:
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 <ruipbarra...@sapo.pt <mailto:ruipbarra...@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@r-project.org <mailto:R-devel@r-project.org> mailing list
     > https://stat.ethz.ch/mailman/listinfo/r-devel
     >


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to