Проблема с использованием списка логических значений для индексации в R - PullRequest
0 голосов
/ 15 января 2019

У меня был опыт программирования в течение нескольких лет, но я относительно новичок в R. Я столкнулся с неожиданным результатом, когда пытался извлечь запись из массива, используя массив логических записей:

array = c(2, 3, 4, 5);
array[c(FALSE, FALSE, FALSE, TRUE)]
#output: [1] 5
array[c(0, 0, 0, 1)]
#output: [1] 2

Это меня удивило, так как я думал, что ЛОЖЬ и 0 взаимозаменяемы (аналогично ИСТИНА и 1) в такого рода процессах. Я проверил следующее, чтобы убедиться, и стал еще более запутанным:

T==1
#output: [1] TRUE
F==0
#output: [1] TRUE
c(0,0,0,1)==c(F,F,F,T)
#output: [1] TRUE TRUE TRUE TRUE

Может ли кто-нибудь помочь объяснить, почему R по-разному относится к этим методам индексации?

Большое спасибо,

1 Ответ

0 голосов
/ 16 января 2019

as.logical (C (0,0,0,1)) == C (F, F, F, Т)

Объяснение

В R значения numeric обрабатываются иначе, чем значения logical.

В вашем сценарии, поскольку 2 является первым элементом массива, он возвращается для второй операции подмножества (и 0-го элемента нет).

PS Только для нескольких операций (например, ==) логические значения сначала приводятся к числовым. Спасибо @IceCreamTouchan, чтобы добавить это в комментариях выше.

...