Menu
Coddy logo textTech

Векторизованная логика. Часть 2

Часть раздела Основы путешествия по R на Coddy — урок 21 из 78.

Так же, как у AND и OR есть векторизованные версии, оператор NOT также работает поэлементно с векторами. Когда вы применяете ! к вектору логических значений, он инвертирует каждый элемент в отдельности.

passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed  # FALSE TRUE FALSE TRUE

Каждое TRUE становится FALSE, а каждое FALSE становится TRUE. Это особенно полезно, когда вы хотите найти элементы, которые не соответствуют определенному условию:

temperatures <- c(18, 25, 30, 15, 22)

# Найти температуры, которые НЕ выше 20
!(temperatures > 20)  # TRUE FALSE FALSE TRUE FALSE

Вы можете комбинировать векторизованное NOT с & и | для создания сложных фильтров:

ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)

# Может участвовать, если: возраст >= 18 ИЛИ (младше 18 И есть разрешение)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE

Помните: используйте одиночные &, | и ! при работе с векторами, и двойные &&, || при сравнении одиночных значений.

challenge icon

Задание

Легко

Используйте векторизованный оператор НЕ (!) вместе с & и | для создания сложных поэлементных логических условий.

Вам предоставлены следующие векторы:

scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)

Используйте векторизованные логические операторы, включая оператор НЕ, для создания следующих логических векторов:

  1. Создайте вектор с именем failed, который хранит TRUE для каждого результата (score), который НЕ больше или равен 60
  2. Создайте вектор с именем absent, который хранит значение, противоположное attended (инвертируйте каждое значение)
  3. Создайте вектор с именем at_risk, который хранит TRUE для каждого студента, который НЕ присутствовал (attend) ИЛИ НЕ сдал домашнюю работу (submit homework)
  4. Создайте вектор с именем passing_but_absent, который хранит TRUE для каждого студента, чей результат (score) больше или равен 60 И который НЕ присутствовал
  5. Создайте вектор с именем needs_support, который хранит TRUE для каждого студента, у которого: (результат меньше 50) ИЛИ (он НЕ присутствовал И НЕ сдал домашнюю работу)

Используйте функцию print() для отображения failed, absent, at_risk, passing_but_absent и needs_support именно в таком порядке.

Шпаргалка

Оператор НЕ (!) работает поэлементно с векторами, инвертируя каждое логическое значение в отдельности:

passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed  # FALSE TRUE FALSE TRUE

Используйте !, чтобы найти элементы, которые не соответствуют условию:

temperatures <- c(18, 25, 30, 15, 22)
!(temperatures > 20)  # TRUE FALSE FALSE TRUE FALSE

Комбинируйте векторизованный оператор НЕ с & и | для создания сложных фильтров:

ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)

# Можно участвовать, если: age >= 18 ИЛИ (младше 18 И есть разрешение)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE

Помните: используйте одиночные &, | и ! для векторов; используйте двойные &&, || для одиночных значений.

Попробуйте сами

# Данные векторы
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)

# TODO: Напишите ваш код ниже
# 1. Создайте 'failed' - TRUE для баллов НЕ >= 60

# 2. Создайте 'absent' - противоположность attended

# 3. Создайте 'at_risk' - НЕ attended ИЛИ НЕ submitted homework

# 4. Создайте 'passing_but_absent' - score >= 60 И НЕ attended

# 5. Создайте 'needs_support' - (score < 50) ИЛИ (НЕ attended И НЕ submitted homework)

# Выведите результаты
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы