В этой домашней работе вы потренируетесь в использовании простых управляющих конструкций в R: if, if ... else, for.

Во всех заданиях часть кода уже написана. Вам остаётся только дополнить его, чтобы получить нужный результат. В этих местах в коде вы найдёте три точки: ....

Весь код оформлен в неинтерпретируемые блоки. В сдаваемом варианте весь работающий код должен быть в исполняемых блоках.

Выполненное задание должно быть сбилдено в html и опубликовано на Rpubs.com (кнопка Publish при просмотре сбилденного документа). Помните: за неправильное оформление оценка будет снижена.

В некоторых заданиях также есть вопросы. Отвечайте на них после написания кода. Ответы без реализованного кода защитаны не будут.

Рекомендованное чтение:

Минимальная оценка (при сдаче хоть чего-то): 2 балла. Каждое правильное выполненное задание и каждый правильный ответ на вопрос дают 1 балл.

Дадлайн: 20:00 Пятницы, 26 сентября. Работы после дедлайна будут оценены с penalty в 2 балла.

Форма сдачи: Rmd-файл и ссылка на опубликованную в Rpubs версию в личном сообщении в vk или по почте intropro2013@nosoc.io.

Вопросы по выполнению задания принимаются до 20:00 четверга (25 сентября).

Помните про honour code! Можно советоваться, но не списывать. Если вы спишите эту работу, то скорее всего вы не сможете делать последующие самостоятельно.


Домашняя работа: управляющие структуры R

Выполнил(а): …

Задание 1

Допишите простой цикл, в котором будут выводится числа от 1 до 5.

v = 1:5
for ( ... ) {
  print( ... )
}

Задание 2

Сделайте то же самое, что и в задании 1, используя функцию sapply.

v = 1:5
sapply( ... , function(x) { ... })

Вопрос: Если вы всё сделали правильно, то числа от 1 до 5 вывелись два раза. Почему это произошло?

Ответ:

Задание 3

Дан вектор случайных чисел v. Выведите (с помощью функции print) только те числа, что больше 5.

v = sample(1:10,10,replace=T)
for (...) {
  if (...) {
    print(...)
  }
}

Задание 4

Дополните код из предыщего задания. Только теперь должны выводится не числа, а сообщения вида 6 больше 5 и 3 не больше 5. Используйте встроенную функцию paste для склеивания переменной и текстового сообщения. Пример: paste(10, "больше 5") выведет 10 больше 5.

v = sample(1:10,10,replace=T)
print(v)

for (...) {
  if (...) {
    ...
  } ...
}

Задание 5

Реализуйте функцию find_max, которая будет принимать в качестве параметра вектор чисел и возвращать максимальное значение. При реализации не используйте встроенную функцию max.

v = sample(1:100,10,replace=T)

find_max = function(v){
  max_value = -Inf
  ...
  return(max_value)
}

find_max(v)

Вопрос: Зачем в теле функции переменной max_value изначально присваивается значение -Inf.

Ответ:

Задание 6

Реализуйте функцию get_max_of_pair, аналог встроенной функции pmax. Функция должна принимать в качестве параметров два вектора одинаковой длины (если вектора разной длины, то функция должна возвращать пустое значение NULL). Функция должна сравнивать попарно соответвующие элементы входных векторов, выбирать наибольшее из них и возвращать вектор (той же длины, что и входные) из выбранных значений. При реализации функции не пользуйтесь функцией max и векторными функциями.

x = sample(1:10,10,replace=T)
print(x)
y = sample(1:10,10,replace=T)
print(y)

get_max_of_pair = function (x, y) {
  result = c()
  ...
  return(result)
}

get_max_of_pair(x,y)

# Результат этого вызова должен быть 5, 4, 3, 4, 5
get_max_of_pair(1:5,5:1)
# Этот вызов должен вернуть NULL
get_max_of_pair(c(1,2), c(2,4,5))