[R-pkg-devel] [FORGED] Re: Help on Windows CRAN Check

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Thu Mar 5 10:29:40 CET 2020


On 3/5/20 9:45 AM, Rolf Turner wrote:
>
> On 5/03/20 9:04 pm, Tomas Kalibera wrote:
>
>> On 3/5/20 4:26 AM, John Lawson wrote:
>>> I see this error on the CRAN Check report
>
> <SNIP>
>
>>> Fatal error: the condition has length > 1
>>
>> The problem is that the condition t1 == "I" & t2 == "(" of the if
>> statement in the code is not a scalar. Even though this has been allowed
>> in R historically, the first element has been used, it is almost always
>> a sign of coding error, so it is going to become a runtime error.
>>
>> So what one should do is fix the code to only use scalar conditions -
>> ensure t1, t2 are scalar, replace & by &&.
>
> Perhaps I'm being even thicker than usual (imagine that!) but I don't 
> grok that last recommendation:  "replace & by &&".  It's usually 
> harmless but indicates a lack of understanding.  The "&&" operator 
> evaluates the second condition only if the first condition is TRUE.  
> It is useful (only) in setting where the second condition is 
> meaningful only when the first condition is TRUE.
>
> Things like:
>
>    if(!is.null(x) && x > 0)
>
> If "x" were null then the second  condition would cause an error to be 
> thrown if you used "&" rather than "&&".
>
> In all (???) situations where "&&" works, then "&" works as well. 
> However it's a Good Idea to use the language as intended.

&& has short-circuit evaluation but also is intended for scalars. This 
is reflected by that non-scalar arguments lead to a runtime error with 
_R_CHECK_LENGTH_1_LOGIC2_=TRUE.

I use && in the code to indicate that I expect a scalar, and I want the 
short-circuit evaluation for scalars as I am used to if from other 
programming languages. I only use & when want element-wise operation on 
vectors, when & is for computation (e.g. of indices).

Best
Tomas
>
> It I'm missing some point here, please enlighten me.
>
> <SNIP>
>
> cheers,
>
> Rolf
>



More information about the R-package-devel mailing list