From ruipb@rr@d@@ @ending from @@po@pt  Sun Oct  7 16:25:15 2018
From: ruipb@rr@d@@ @ending from @@po@pt (Rui Barradas)
Date: Sun, 7 Oct 2018 15:25:15 +0100
Subject: [Rd] Warning when calling formals() for `[`.
In-Reply-To: <B465FE70-797D-48E0-891E-41E3C6AF0C83@gmail.com>
References: <CA+JCgN254QaHVepo03ZuGLsatwmjfDSnUP3yq43N6TguBdWN5g@mail.gmail.com>
 <634D4A0E-A036-4FEB-8C85-978262B46EA7@gmail.com>
 <550606ea-720a-ca30-a762-d8aaf2484661@sapo.pt>
 <B465FE70-797D-48E0-891E-41E3C6AF0C83@gmail.com>
Message-ID: <02b801c9-4e41-4e29-1d3d-c575da0f6405@sapo.pt>

Hello,

This is because args(`[`) returns NULL and class(NULL) is NULL.
So the question would be why is the return value of args(`[`) NULL?

Rui Barradas

?s 15:14 de 07/10/2018, Peter Dalgaard escreveu:
> 
> 
>> On 7 Oct 2018, at 16:04 , Rui Barradas <ruipbarradas at sapo.pt> wrote:
>>
>> 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.
> 
> But in this case it doesn't:
> 
>> is.primitive(get("["))
> [1] TRUE
>> class(args(get("[")))
> [1] "NULL"
> 
> Or, for that matter:
> 
>> is.primitive(`[`)
> [1] TRUE
>> class(args(`[`))
> [1] "NULL"
> 
> -pd
> 
>>
>>
>> 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
>



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