/
hw3_.Rmd
198 lines (137 loc) · 7.89 KB
/
hw3_.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
---
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
```