Например, в Ruby только nil и false являются ложными. Что в R?
например: 5==TRUE
и 5==FALSE
оба оцениваются как ЛОЖЬ. Однако 1==TRUE
есть TRUE
. Есть ли общее правило относительно того, что (объекты, числа и т.д.) Оцениваются?
Например, в Ruby только nil и false являются ложными. Что в R?
например: 5==TRUE
и 5==FALSE
оба оцениваются как ЛОЖЬ. Однако 1==TRUE
есть TRUE
. Есть ли общее правило относительно того, что (объекты, числа и т.д.) Оцениваются?
Это описано в ?logical
. Соответствующий раздел которого:
Details:
‘TRUE’ and ‘FALSE’ are reserved words denoting logical constants
in the R language, whereas ‘T’ and ‘F’ are global variables whose
initial values set to these. All four are ‘logical(1)’ vectors.
Logical vectors are coerced to integer vectors in contexts where a
numerical value is required, with ‘TRUE’ being mapped to ‘1L’,
‘FALSE’ to ‘0L’ and ‘NA’ to ‘NA_integer_’.
Во втором абзаце объясняется поведение, которое вы видите, а именно 5 == 1L
и 5 == 0L
соответственно, которое должно возвращать FALSE
, где в качестве 1 == 1L
и 0 == 0L
должно быть TRUE для 1 == TRUE
и 0 == FALSE
соответственно. Я считаю, что они не тестируют то, что вы хотите проверить; сравнение осуществляется на основе численного представления TRUE
и FALSE
в R, то есть, какие числовые значения они принимают при принуждении к числовому.
Однако только TRUE
гарантируется be TRUE
:
> isTRUE(TRUE)
[1] TRUE
> isTRUE(1)
[1] FALSE
> isTRUE(T)
[1] TRUE
> T <- 2
> isTRUE(T)
[1] FALSE
isTRUE
является оберткой для identical(x, TRUE)
, а из ?isTRUE
отметим:
Details:
....
‘isTRUE(x)’ is an abbreviation of ‘identical(TRUE, x)’, and so is
true if and only if ‘x’ is a length-one logical vector whose only
element is ‘TRUE’ and which has no attributes (not even names).
Таким образом, по той же добродетели, только FALSE
гарантированно будет точно равна FALSE
.
> identical(F, FALSE)
[1] TRUE
> identical(0, FALSE)
[1] FALSE
> F <- "hello"
> identical(F, FALSE)
[1] FALSE
Если это касается вас, всегда используйте isTRUE()
или identical(x, FALSE)
для проверки эквивалентности с TRUE
и FALSE
соответственно. ==
не делает то, что вы думаете.
T
и TRUE
- True, F
и FALSE
- False. T
и F
могут быть переопределены, поэтому вы должны полагаться только на TRUE
и FALSE
. Если вы сравните 0 с FALSE и 1 с TRUE, вы обнаружите, что они равны, поэтому вы можете считать их True и False.
Если вы думаете об этом, сравнение чисел с логическими утверждениями не имеет большого смысла. Однако, поскольку 0 часто ассоциируется с "Отключить" или "Неверно" и 1 с "On" или "True" , R решил разрешить 1 == TRUE
и 0 == FALSE
, чтобы оба были истинными. Любое другое числовое-boolean-сравнение должно давать false, если это не похоже на 3 - 2 == TRUE
.