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)

# Может участвовать, если: age >= 18 OR (младше 18 AND has permission)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE

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

challenge icon

Задание

Легко

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

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

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)

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

  1. Создайте вектор с именем failed, который хранит TRUE для каждого score, который NOT больше или равен 60
  2. Создайте вектор с именем absent, который хранит противоположные значения attended (инвертируйте каждое значение)
  3. Создайте вектор с именем at_risk, который хранит TRUE для каждого учащегося, который NOT посещал занятия OR NOT сдал домашнее задание
  4. Создайте вектор с именем passing_but_absent, который хранит TRUE для каждого учащегося, у которого score больше или равен 60 AND который NOT посещал занятия
  5. Создайте вектор с именем needs_support, который хранит TRUE для каждого учащегося, для которого выполняется условие: (score меньше 50) OR (NOT посещал занятия AND NOT сдал домашнее задание)

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

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

# Данные векторы
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 для scores NOT >= 60

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

# 3. Создайте 'at_risk' - NOT attended OR NOT submitted homework

# 4. Создайте 'passing_but_absent' - score >= 60 AND NOT attended

# 5. Создайте 'needs_support' - (score < 50) OR (NOT attended AND NOT submitted homework)

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор R