I have a code trying to realize a part of that:
I have matrix A as:
0.241 0.095 0.695
0.002 0.774 0.590
0.991 0.406 0.997
0.435 0.217 0.087
0.729 0.898 0.343
I dont understand the logic behind this statement:
if ((any(0.250 <= A[ ,3] & A[ ,3] <= 0.375)) == FALSE) {
print("Done")
}
A[ ,3] gives 0.695 0.590 0.997 0.087 0.343
0.250 <= A[ ,3] gives TRUE TRUE TRUE FALSE TRUE
A[ ,3] <= 0.375 gives FALSE FALSE FALSE TRUE TRUE
and the if statement returns nothing, however, when I change 0.250 to 0.4:
0.4 <= A[ ,3] gives TRUE TRUE TRUE FALSE FALSE
A[ ,3] <= 0.375 gives FALSE FALSE FALSE TRUE TRUE
This time the if statement print "Done"
is that about the number of FALSE or TRUE?
CodePudding user response:
In the first case, 0.250 <= A[ ,3] & A[ ,3] <= 0.375 returns FALSE FALSE FALSE FALSE TRUE, the logical & returning TRUE only when both the statements are TRUE. The any() function then checks if any of the values passed to it evaluate to TRUE. Thus, it returns TRUE in this case, doesn't satisfy the conditon and doesn't enter the loop.
In the second case, 0.4 <= A[ ,3] & A[ ,3] <= 0.375 returns FALSE FALSE FALSE FALSE FALSE so any() function returns FALSE and satisfies the condition to enter the loop.
CodePudding user response:
This is very ugly logic, equivalent and simpler code if (all(A[ ,3] < 0.250 | A[ ,3] > 0.375)).
