--- title: "Домашнее задание 3" output: pdf_document: latex_engine: xelatex word_document: default mainfont: CMU Serif header-includes: - \usepackage[russian]{babel} - \usepackage{hyperref} - \usepackage{verbatim} - \hypersetup{colorlinks = true, urlcolor = blue, linkcolor=magenta} --- Файл с выполненным заданием необходимо загрузить на Dropbox до дедлайна, указанного на сайте. Домашние задания, сданные после срока, оцениваются с использованием понижающих коэффициентов: опоздание в пределах часа – штраф 10% от полученной оценки, в пределах суток – штраф 20%, в пределах недели – штраф 50%. Домашние задания, сданные через неделю после указанного срока и позже, не принимаются и не оцениваются. Если при проверке работ установлен факт нарушения академической этики, студент получает оценку «0» за данную работу. Работа студента, предоставившего свою работу для списывания, также аннулируется. ### Задача 1 Напишите функцию `sales_eval()`, которая * принимает на вход два числа: число продаж в прошлом году, число продаж в текущем году; * возвращает и выводит на экран сообщение "This salesperson is successful.", если число продаж в текущем году больше, чем в предыдущем, и сообщение "This salesperson is not successful.", если число продаж в текущем году не больше, чем в предыдущем. **Пример:** ``` > sales_eval(700, 500) [1] "This salesperson is not successful." > sales_eval(700, 1000) [1] "This salesperson is successful." ``` ```{r} ### YOUR CODE HERE ``` ### Задача 2 Напишите функцию `final_mark()`, которая принимает на вход числовой вектор из двух элементов (накопленная оценка и оценка за экзамен) и возвращает итоговую оценку, округленную до целого значения, посчитанную по следующей формуле: $$ \text{Итог} = 0.6 \times \text{накопленная} + 0.4 \times \text{экзамен}. $$ **Пример:** ``` > final_mark(c(7, 8)) [1] 7 ``` ```{r} ### YOUR CODE HERE ``` ### Задача 3 Напишите функцию `assess_sleep()`, которая принимает на вход число часов, которое пользователь спал в среднем за неделю и: * если значение менее 3, возвращает и выводит на экран сообщение "Alarm! Are you still alive?"; * если не менее 3 и менее 5, сообщение "Well. Maybe you will survive."; * не менее 5 — сообщение "You can live, I believe." **Пример:** ``` > assess_sleep(2) [1] "Alarm! Are you still alive?" > assess_sleep(7) [1] "You can live, I believe." ``` ```{r} ### YOUR CODE HERE ``` ### Задача 4 Напишите функцию `outliers_ind()`, которая принимает на вход числовой вектор и возвращает индексы нетипичных значений. Готовые функции R для определения нетипичных значений использовать нельзя и вытаскивать их из `boxplot()` тоже. **Подсказка:** границы типичных значений определяются как $$ [\text{Q1} - 1.5 \times \text{IQ};~\text{Q3} + 1.5 \times \text{IQ}], $$ где * $\text{Q1}$ — нижний квартиль, квантиль уровня 0.25; получить можно с помощью `quantile(my_vector, prob = 0.25)`; * $\text{Q3}$ — верхний квартиль, квантиль уровня 0.75; получить можно с помощью `quantile(my_vector, prob = 0.75)`; * $\text{IQ}$ — межквартильный размах, вычисляется как `Q3 - Q1` Соответственно, нетипичные значения — все те, которые меньше нижней границы типичных значений или которые больше верхней границы типичных значений. ```{r} ### YOUR CODE HERE ``` ### Задача 5 Напишите функцию `get_info()`, которая принимает на вход датафрейм и возвращает список (*list*) из следующих векторов: * вектор `dimensions` — содержит 2 элемента: число строк и столбцов в базе данных * вектор `columns` — содержит названия столбцов в базе данных * вектор `rows.na` — содержит номера строк, содержащих пропущенные значения **Пример:** ``` > data A B C 1 18 0 1 2 22 1 4 3 33 0 7 4 19 1 NA 5 45 0 9 6 NA 1 0 7 48 0 0 8 NA 1 1 > get_info(data) $dimensions [1] 8 3 $columns [1] "A" "B" "C" $rows.na [1] 4 6 8 ``` ```{r} ### YOUR CODE HERE ``` ### Задача 6 Напишите функцию `dante()`, которая выводит на экран вопрос «В каком кругу Ада по Данте находится Платон?», сохраняет ответ пользователя, введенный с клавиатуры, и, если ответ верный (принимаются ответы Лимб, первый и 1), то возвращает и выводит на экран сообщение "Верный ответ!", если нет — выводит сообщение "Неверно. Перечитайте Данте!". **Пример:** ``` > dante() В каком кругу Ада по Данте находится Платон? 1 [1] "Верный ответ!" > dante() В каком кругу Ада по Данте находится Платон? Лимб [1] "Верный ответ!" > dante() В каком кругу Ада по Данте находится Платон? второй [1] "Неверно. Перечитайте Данте!" ``` ```{r} ### YOUR CODE HERE ``` ### Задача 7 Напишите функцию `motivate()`, которая запрашивает у пользователя с клавиатуры некоторый текст и работает следующим образом: ``` Enter your word(s): курсач [1] "Every night in my dreams, I see you, курсач." [1] "Great! You backed the right horse!" Enter your word(s): Курсач [1] "Every night in my dreams, I see you, Курсач." [1] "Great! You backed the right horse!" Enter your word(s): КУРСАЧ [1] "Every night in my dreams, I see you, КУРСАЧ." [1] "Great! You backed the right horse!" Enter your word(s): кот [1] "Every night in my dreams, I see you, кот." [1] "В смысле не курсач?" ``` Другими словами, функция возвращает и выводит на экран сообщения одного вида, если пользователь ввел слово «курсач» в разных регистрах (курсач, Курсач, КУРСАЧ) и сообщения другого вида, если пользователь ввел что-то иное. ```{r} ### YOUR CODE HERE ```