Задание №1

Я установил себе R и RStudio. Их версии я узнал с помощью команд в консоли:

R.version
RStudio.Version()

В их выдаче имеется разная информация, в том числе текущие версии R и RStudio:

R version 4.3.1 (2023-06-16 ucrt)

RStudio version 2023.6.2.561

На начало сентября это самые новые версии (см. R Homepage и RStudio Desktop)


Вектора – создание

Задание №2

Создайте вектор х из чисел 11, 34 и 12.

Какова длина вектора х?

x <- c(11, 34, 12) # создадим нужный вектор
x # посмотрим на него
## [1] 11 34 12
length(x) # определим длину вектора
## [1] 3

Задание №3

Наиболее оптимальным способом создайте вектор y из целых чисел от -1000 до 1000 включительно.

Какова длина вектора y?

y <- -1000 : 1000 # создадим нужный вектор
head(y, 3) # посмотрим на первые 3 ...
## [1] -1000  -999  -998
tail(y, 3) # ... и последние 3 элемента
## [1]  998  999 1000
length(y) # определим длину вектора
## [1] 2001

Задание №4

Создайте вектор b, состоящий из векторов x (задание №2) и y (задание №3).

b <- c(x, y) # создадим нужный вектор
length(b) # проверим, что его длина равна сумме длинн x и y
## [1] 2004
head(b, 5) # и посмотрим, что в начале есть числа из вектора x
## [1]    11    34    12 -1000  -999

Задание №5

Создайте вектор x, состоящий из четных чисел в интервале от 2 до 20.

Не используйте функцию с().

x <- seq(2, 20, 2) # создадим нужный вектор
x # посмотрим на него
##  [1]  2  4  6  8 10 12 14 16 18 20

Задание №6

Создайте наиболее оптимальным способом вектор v:

22, 23, 24, 25, 26, 22, 23, 24, 25, 26, 22, 23, 24, 25, 26, 22, 23, 24, 25, 26

v <- rep(22:26, 4) # создадим нужный вектор
v # посмотрим на него
##  [1] 22 23 24 25 26 22 23 24 25 26 22 23 24 25 26 22 23 24 25 26

Задание №7

Возьмите из распределения Пуассона (λ = 3) 10 чисел случайным образом.

Выведите полученный вектор целиком в явном виде.

set.seed(666) # зафиксируем seed для воспроизводимости
rpois(10, 3) # возьмём и сразу выведем требуемый вектор
##  [1] 4 1 7 2 2 4 7 3 0 2

Задание №8

Создайте логичесикй вектор а длины 5. Сами придумайте последовательность TRUE и(!) FALSE.

Убедитесь, что получившийся вектор а действительно логического типа.

Посчитайте сумму вектора а (воспользуйтесь функцией sum()).

Кратко поясните, как отработала функция sum() на логическом векторе.

a <- c(T, F, F, T, F) # создадим нужный вектор
typeof(a) # проверим какого он типа
## [1] "logical"
sum(a) # посчитаем сумму
## [1] 2

Сначала логический вектор был преобразован в численный, т.е. значения TRUE заменились на 1, а FALSE — на 0. Потом уже складывать полученные целые числа.

Задание №9

Преобразуйте вектор а из задания №8 в численный.

as.numeric(a) # преобразуем вектор a к численному типу
## [1] 1 0 0 1 0

Задание №10

С помощью какой операции можно получить ответ: “TRUE” “FALSE” “TRUE”?

Обратите внимание на все детали записи предложенного ответа

    1. as.character(as.numeric(as.logical(-1:1)))
    1. as.character(as.logical(-1:1))
    1. -1:1
    1. as.logical(-1:1)
    1. as.numeric(as.logical(-1:1))
    1. as.numeric(as.character(as.logical(-1:1)))

Правильный ответ: 2. as.character(as.logical(-1:1))

as.character(as.logical(-1:1)) # убедимся, что этот ответ правильный
## [1] "TRUE"  "FALSE" "TRUE"

Вектора – срезы и манипуляции

Задание №11

Создайте вектор n вида “a”, “b”, “c” и т.д. Воспользуйтесь набором letters.

Вызовите справку ?letters и обратите внимание на раздел Usage, это может пригодиться когда-нибудь.

Длина вектора n должна быть аналогична длине вектора х из задания №5.

При создании вектора n нельзя указывать длину в виде числа в явном виде.

Какого типа данные содержит вектор n?

n <- letters[1:length(x)] # создадим нужный вектор
n # посмотрим на него
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
length(x) == length(n) # сравним длины векторов x и n
## [1] TRUE
typeof(n) # посмотрим, какого типа данные в n
## [1] "character"

Задание №12

Задайте элементам вектора х из задания №5 имена в виде вектора из задания №11.

Положите результат в переменную l

l <- x # положим значения в l
names(l) <- n # зададим имена
l # проверим, что получилось
##  a  b  c  d  e  f  g  h  i  j 
##  2  4  6  8 10 12 14 16 18 20

Задание №13

Возьмите вектор х из задания №5.

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

x[length(x)]
## [1] 20

Задание №14

Возьмите вектор х из задания №5.

Сколько элементов вектора х имеют значения строго больше 10?

z <- x[x > 10] # отфильтруем вектор по условию
length(z) # определим, сколько элементов удовлетворило условию
## [1] 5

Задание №15

Возьмите вектор х из задания №5.

Замените первый элемент вектора х на любое число.

x[1] <- 13

Задание №16

Возьмите вектор х из задания №5.

Отберите элементы с нечетными индексами.

x[seq(1,length(x), 2)] # отберём элементы с нечётными индексами
## [1] 13  6 10 14 18

Задание №17

Возьмите вектор v из задания №6.

Выведите индексы элементов вектора v, значения которых равны 23.

Воспользуйтесь функцией which().

which(v == 23) # выведем искомые индексы
## [1]  2  7 12 17

Задание №18

Возьмите вектор l из задания №12.

Выведите элемент вектора с:

именем “b”

индексом 3

значением 18

l["b"] # выведем элемент с именем "b"
## b 
## 4
l[3] # выведем элемент с индексом 3
## c 
## 6
which(l == 18) # выведем элемент со значением 18
## i 
## 9

Задание №19

Создайте вектор l из чисел 24 и 26.

Возьмите вектор v из задания №6.

Отберите из вектора v только такие значения, которые есть в векторе l.

Для решения воспользуйтесь оператором %in%.

l <- c(24, 26) # создадим нужный вектор
v[v %in% l] # отберём нужные значения
## [1] 24 26 24 26 24 26 24 26

Задание №20

Воспользуйтесь вектором l из задания №19.

Есть ли хоть одно положительное значение в векторе l? Воспользуйтесь функцией any().

Все ли значения вектора l положительные? Воспользуйтесь функцией all().

any(l > 0) # проверим, есть ди хоть одно положительное значение
## [1] TRUE
all(l > 0) # проверим, все ли значения положительные
## [1] TRUE

Таблицы

Задание №21

Создайте таблицу, заполненную любыми данными на ваше усмотрение, состоящую из двух столбцов и трех строк.

Воспользуйтесь функцией data.frame().

data.frame(species = c("H. sapiens", "S. cerevisiae", "M. musculus"),
           number_of_chr = c(23, 16, 20))
##         species number_of_chr
## 1    H. sapiens            23
## 2 S. cerevisiae            16
## 3   M. musculus            20

Задание №22

Используйте встроенный набор данных CO2.

Сколько строк и сколько столбцов в таблице? Выведите в явном виде

dim(CO2)[1] # количество строк
## [1] 84
dim(CO2)[2] # количество столбцов
## [1] 5

Задание №23

Опишите разнообразие значений столбца Type в наборе данных CO2 (какие значения представлены и в каком количестве).

Используйте функцию table().

table(CO2$Type) # определим, какие значения и в каком количестве представлены в столбце Type
## 
##      Quebec Mississippi 
##          42          42

Задание №24

Отберите из набора данных CO2 такие строки, где значение столбца conc строго больше среднему значению столбца conc. Сколько получилось строк?

CO2_filtered <- CO2[CO2$conc > mean(CO2$conc),] # отберём нужные строки
nrow(CO2_filtered) # посчитаем количество строк
## [1] 36

Задание №25

Выберите из набора данных CO2 только 1ый и последний столбцы, не указывая в явном виде индекс последнего столбца. Используйте функцию ncol(). Сколько столбцов получилось?

CO2_filtered <- CO2[, c(1, ncol(CO2))] # отберём нужные столбцы
ncol(CO2_filtered) # посчитаем количество столбцов
## [1] 2

Задание №26

Отберите из набора данных CО2 такие значения, где столбец Plant принимает значения Qn1, Qn2 и Qn3 Используйте оператор %in%

Сколько получилось строк?

CO2_filtered <- CO2[CO2$Plant %in% paste("Qn", 1:3, sep=""),] # отберём нужные строки
nrow(CO2_filtered) # посчитаем количество строк
## [1] 21

Задание №27

Воспользуйтесь встроенным набром данных mtcars.

Выведите имя третьей колонки.

colnames(mtcars)[3] # выведем имя третьей колонки
## [1] "disp"

Задание №28

Воспользуйтесь встроенным набром данных mtcars.

Выведите только первый, второй и третий столбцы, а также восьмую и пятую строки.

mtcars[c(5, 8), c(1, 2, 3)] # выведем нужную часть таблицы
##                    mpg cyl  disp
## Hornet Sportabout 18.7   8 360.0
## Merc 240D         24.4   4 146.7

Задание №29

Воспользуйтесь встроенным набром данных mtcars.

Выведите строчку таблицы, где содержится информация о машине Camaro Z28.

Воспользуйтесь функцией rownames().

mtcars[rownames(mtcars) == "Camaro Z28", ] # выведем нужную строку таблицы
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Camaro Z28 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4

Задание №30

Выведите все переменные вашего окружения

Удалите все переменные

ls() # выведем все переменные окружения
## [1] "a"            "b"            "CO2_filtered" "l"            "n"           
## [6] "v"            "x"            "y"            "z"
rm(list = ls()) # удалим все переменные ...
ls() # ... и убедимся, что они удалились
## character(0)