Манипуляции с векторами
Векторизованные операции
Задание 1
Умножьте каждый элемент вектора vec <- sample(10) на 2.
В R реализована векторизация - все элементы вектора обрабатываются сразу и нет необходимости пробегать циклом по каждому из них.
Извлечение элементов по индексу
Задание 6
Из вектора month.name извлеките все элементы кроме пятого.
month.name[-5]## [1] "January" "February" "March" "April" "June" "July"
## [7] "August" "September" "October" "November" "December"
Задание 7
Из вектора month.names извлеките первые три элемента
month.name[1:3]## [1] "January" "February" "March"
Задание 8
Из вектора month.name извлеките первый, пятый и последний элементы.
Для того, чтобы вызвать последний элемент, не указывая его напрямую, можно воспользоваться функцией вычисления длины вектора - длина вектора и будет номером последнего значения.
Задание 9
Создайте вектор первых семи элементов вектора letters, перемешанных в случайном порядке. Примените к нему функцию order(). Проинтерпретируйте результат.
Функция order() возвращает вектор номеров элементов исходного вектора как если бы эти элементы были отсортированы. То есть, если в результате order() первое значение - 6, это значит, что в исходном векторе шестой элемент самый маленький, и при сортировке по возрастанию должен быть на первом месте. Аналогично, если после 6 в результате order() идет 2, это значит, что второе по возрастанию значение в исходном векторе стоит в нем на втором месте.
Извлечение элементов по значению
Задание 11
Сравните каждый элемент вектора vec <- letters[1:5] с буквой c (равен или нет) и запишите в отдельный векторindices. Выведите indices на печать. Примените indices для выбора элементов вектора vec (vec[indices]). Проинтерпретируйте результат.
vec <- letters[1:5]
indices <- vec == 'c'
print(indices)## [1] FALSE FALSE TRUE FALSE FALSE
vec[indices]## [1] "c"
Если в индекс вектора передавать вектор логических значений, то будет возвращено то значение вектора, которому в индексе соответствует TRUE. В этой задаче в indices единственное TRUE - третьим значением вектора indices. Соответственно, если его передавать в индекс вектора vec, то будет извлечено только третье значение этого вектора. В данном случае, буква c.
Задание 12
Из вектора month.name извлеките каждый третий элемент.
Каждый третий элемент - это те элементы, значения которых делятся без остатка на 3. Соответственно, надо сравнить с нулем остаток от деления номеров элементов вектора month.name на 3 и полученный вектор использовать для извлечения элементов
Задание 13
Из вектора vec <- sample(10, 8) выберите все элементы, значения которых больше либо равны 5.
vec <- sample(10, 8)
vec[vec >= 5]## [1] 6 7 10 8 5
Задание 14
Из вектора vec <- sample(100, 8) выберите максимальное значение (элемент с максимальным значением).
Задание можно решить двумя путями - вычислить максимум и сделать в индексе сравнение, либо же воспользоваться функцией which.max()
Задание 16
Проверьте, встречаются ли значения вектора x <- c(1, 3, 5, 6) в векторе y <- sample(10, 8).
Задание 17
Верните все элементы вектора x, которые встречаются в векторе y.
x[x %in% y]## [1] 1 3 5 6
Задание 18
Верните все элементы вектора x, которые не встречаются в векторе y.
Нужно воспользоваться механизмом логического отрицания - оператором !, если его применить к вектору логических значений, то результатом будет вектор обратных значений. И уже этот вектор использовать для выбора значений.
x[!(x %in% y)]## numeric(0)
Модификация элементов
Задание 19
Замените первый элемент вектора vec <- sample(100, 8) на 999.
vec <- sample(100, 8)
vec[1] <- 999
vec## [1] 999 40 84 48 3 87 41 72