Что оценивает True/False в R? - программирование
Подтвердить что ты не робот

Что оценивает True/False в R?

Например, в Ruby только nil и false являются ложными. Что в R?

например: 5==TRUE и 5==FALSE оба оцениваются как ЛОЖЬ. Однако 1==TRUE есть TRUE. Есть ли общее правило относительно того, что (объекты, числа и т.д.) Оцениваются?

4b9b3361

Ответ 1

Это описано в ?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 соответственно. == не делает то, что вы думаете.

Ответ 2

T и TRUE - True, F и FALSE - False. T и F могут быть переопределены, поэтому вы должны полагаться только на TRUE и FALSE. Если вы сравните 0 с FALSE и 1 с TRUE, вы обнаружите, что они равны, поэтому вы можете считать их True и False.

Ответ 3

Если вы думаете об этом, сравнение чисел с логическими утверждениями не имеет большого смысла. Однако, поскольку 0 часто ассоциируется с "Отключить" или "Неверно" и 1 с "On" или "True" , R решил разрешить 1 == TRUE и 0 == FALSE, чтобы оба были истинными. Любое другое числовое-boolean-сравнение должно давать false, если это не похоже на 3 - 2 == TRUE.