From murdoch@dunc@n @end|ng |rom gm@||@com  Mon Aug 19 16:43:25 2019
From: murdoch@dunc@n @end|ng |rom gm@||@com (Duncan Murdoch)
Date: Mon, 19 Aug 2019 10:43:25 -0400
Subject: [Rd] 
 Check length of logical vector also for operands of || and &&?
In-Reply-To: <da321aed-5d85-a206-e94f-92852da46cf9@mailbox.org>
References: <da321aed-5d85-a206-e94f-92852da46cf9@mailbox.org>
Message-ID: <025592ac-c6b2-84e0-c121-7905e9e22b1a@gmail.com>

On 19/08/2019 10:19 a.m., Kirill M?ller wrote:
> Hi everyone
> 
> 
> The following behavior (in R 3.6.1 and R-devel r77040) caught me by
> surprise today:
> 
> truthy <- c(TRUE, FALSE)
> falsy <- c(FALSE, TRUE, FALSE)
> 
> if (truthy) "check"
> #> Warning in if (truthy) "check": the condition has length > 1 and only the
> #> first element will be used
> #> [1] "check"
> if (falsy) "check"
> #> Warning in if (falsy) "check": the condition has length > 1 and only the
> #> first element will be used
> if (FALSE || truthy) "check"
> #> [1] "check"
> if (FALSE || falsy) "check"
> if (truthy || FALSE) "check"
> #> [1] "check"
> if (falsy || FALSE) "check"
> 
> The || operator gobbles the warning about a length > 1 vector. I wonder
> if the existing checks for length 1 can be extended to the operands of
> the || and && operators. Thanks (and apologies if this has been raised
> before).
> 

This seems to be an August topic.  It was discussed last year in a  long 
thread starting with this message:

https://stat.ethz.ch/pipermail/r-devel/2018-August/076678.html

I think there was general agreement that it would be a good idea to add 
some warnings.  News for R 3.6.0 includes this:

"Experimentally, setting environment variable _R_CHECK_LENGTH_1_LOGIC2_ 
will lead to warnings (or errors if the variable is set to a ?true? 
value) when && or || encounter and use arguments of length more than one."

You get a warning if you set that variable to "warn", you get an error 
if you set it to "true".

Duncan Murdoch


Duncan Murdoch



[Rd] Check length of logical vector also for operands of || and &&?
Duncan Murdoch