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

Uwe Ligges ||gge@ @end|ng |rom @t@t|@t|k@tu-dortmund@de
Thu Mar 5 13:14:33 CET 2020



On 05.03.2020 09:45, 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!) 

Oh dear, but this time it is true...:


> 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 

Right, and as the conditions are scalar, we never have to evaluate the 
2nd if the first is FALSE unless you do it for side effects.

So for logical operators on scalar logical vectors, one should prefer && 
and || for efficeincy reasons.

Best,
Uwe




> 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.
> 
> It I'm missing some point here, please enlighten me.
> 
> <SNIP>
> 
> cheers,
> 
> Rolf
>



More information about the R-package-devel mailing list