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
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel