Векторизованная логика. Часть 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Помните: используйте одиночные &, | и ! при работе с векторами и двойные &&, || при сравнении отдельных значений.
Задание
ЛегкоИспользуйте векторизованный оператор 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, чтобы создать следующие логические векторы:
- Создайте вектор с именем
failed, который хранитTRUEдля каждого score, который NOT больше или равен 60 - Создайте вектор с именем
absent, который хранит противоположные значенияattended(инвертируйте каждое значение) - Создайте вектор с именем
at_risk, который хранитTRUEдля каждого учащегося, который NOT посещал занятия OR NOT сдал домашнее задание - Создайте вектор с именем
passing_but_absent, который хранитTRUEдля каждого учащегося, у которого score больше или равен 60 AND который NOT посещал занятия - Создайте вектор с именем
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)В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строкамиПотренируйтесь самостоятельно: Онлайн-компилятор R