Это задокументировано ?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
должно быть ИСТИНА для 1 == TRUE
и 0 == FALSE
соответственно.Я считаю, что это не тестирование того, что вы хотите, чтобы они тестировали;сравнение проводится на основе числового представления TRUE
и FALSE
в R, то есть того, какие числовые значения они принимают при приведении к числовому.
Однако только TRUE
гарантируется для 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
соответственно.==
не делает то, что вы думаете.