[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