В этой домашней работе вы потренируетесь в использовании простых управляющих конструкций в 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! Можно советоваться, но не списывать. Если вы спишите эту работу, то скорее всего вы не сможете делать последующие самостоятельно.
Выполнил(а): …
Допишите простой цикл, в котором будут выводится числа от 1 до 5.
v = 1:5
for ( ... ) {
print( ... )
}
Сделайте то же самое, что и в задании 1, используя функцию sapply.
v = 1:5
sapply( ... , function(x) { ... })
Вопрос: Если вы всё сделали правильно, то числа от 1 до 5 вывелись два раза. Почему это произошло?
Ответ:
Дан вектор случайных чисел v. Выведите (с помощью функции print) только те числа, что больше 5.
v = sample(1:10,10,replace=T)
for (...) {
if (...) {
print(...)
}
}
Дополните код из предыщего задания. Только теперь должны выводится не числа, а сообщения вида 6 больше 5 и 3 не больше 5. Используйте встроенную функцию paste для склеивания переменной и текстового сообщения. Пример: paste(10, "больше 5") выведет 10 больше 5.
v = sample(1:10,10,replace=T)
print(v)
for (...) {
if (...) {
...
} ...
}
Реализуйте функцию 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.
Ответ:
Реализуйте функцию 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))