Что оценивается как True / False в R? - PullRequest
39 голосов
/ 15 апреля 2011

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

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

Ответы [ 3 ]

49 голосов
/ 15 апреля 2011

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

4 голосов
/ 15 апреля 2011

T и TRUE - True, F и FALSE False.T и F могут быть переопределены, поэтому вы должны полагаться только на TRUE и FALSE.Если вы сравните 0 со значением ЛОЖЬ и 1 со значением ИСТИНА, вы обнаружите, что они также равны, поэтому вы можете считать их также Истинными и Ложными.

0 голосов
/ 01 марта 2014

Если подумать, сравнивать числа с логическими утверждениями не имеет особого смысла. Однако, поскольку 0 часто ассоциируется с «Выкл» или «Ложь» и 1 с «Вкл» или «Истина» , R решил разрешить 1 == TRUE и 0 == FALSE чтобы оба были правдой. Любое другое числовое сравнение с логическим значением должно давать значение false, если это не что-то вроде 3 - 2 == TRUE.

...