[Rd] Dropping RHS of a formula using NULL assignment

Sebastian Meyer @eb@meyer @end|ng |rom |@u@de
Tue Dec 14 22:38:50 CET 2021


Am 14.12.21 um 21:57 schrieb Prof Brian Ripley:
> On 14/12/2021 20:26, Blackwell, Matthew wrote:
>> Hello all,
>>
>> In attempting to create a one-sided formula from a two-sided formula,
>> I discovered that the following syntax will successfully complete this
>> operation:
>>
>>> f <- y ~ x + z
>>> f[2] <- NULL
>>> f
>> ~x + z
>>> str(f)
>> Class 'formula'  language ~x + z
>>    ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
>>
>> In searching through the formula documentation, I couldn't find this
>> technique as documented and wondered whether or not it is expected and
>> if it makes sense to develop a package against the behavior. I'm using
>> R 4.1.0, but I see the same on R-devel (r81303). I asked on Twitter,
>> but someone thought this list might be a better venue.
>>
>> Apologies if I missed some documentation and thanks in advance.
> 
> See ?"~", which says
> 
>       A formula has mode ‘call’.  It can be subsetted by ‘[[’: the
>       components are ‘~’, the left-hand side (if present) and the
>       right-hand side _in that order_.
> 
> That would suggest that
> 
> f <- y ~ x + z
> f[[2]] <- NULL
> 
> was the documented way (and the one I would have used).   

I'd also mention delete.response() here. It takes a "terms" object (a 
formula with attributes) and uses the same technique internally to 
remove the response -- if there is one... I.e., be sure that 
length(f)==3 before dropping the second element.

Best regards,

	Sebastian Meyer

> However, ?"[" 
> says
> 
>       ‘[’ and ‘[[’ are sometimes applied to other recursive objects such
>       as calls and expressions.  Pairlists are coerced to lists for
>       extraction by ‘[’, but all three operators can be used for
>       replacement.
> 
> 
>>
>> Cheers,
>> Matt
>>
>> ~~~~~~~~~~
>> Matthew Blackwell
>> Associate Professor of Government
>> Harvard University
>> https://www.mattblackwell.org
>



More information about the R-devel mailing list