Манипуляции с векторами
Векторизованные операции
Задание 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