Семинар 2: векторы, матрицы, списки

Задача 1

Создайте матрицу размерности \(3 \times 4\), состоящую из 3, а затем измените некоторые ее элементы так, чтобы получить следующее:

[3 3 4 3]
[1 3 3 3]
[3 NA 3 1]

Задача 2

Создайте из векторов a, b, c матрицу, такую, что:

  • векторы являются столбцами матрицы;
  • векторы являются строками матрицы.

Векторы:

a <- c(1, 3, 4, 9, NA)
b <- c(5, 6, 7, 0, 2)
c <- c(9, 10, 13, 1, 20)

Дайте новые названия строкам и столбцам матрицы.

Задача 3

Может ли матрица состоять из элементов разных типов? Проверьте: составьте матрицу из следующих векторов (векторы записаны как столбцы матрицы):

names <- c("Jane", "Michael", "Mary", "George")
ages <- c(8, 6, 28, 45)
gender <- c(0, 1, 0, 1)

Если получилось не то, что хотелось, подумайте, как это можно исправить, не теряя информации, которая сохранена в векторах. Добавьте в матрицу столбец age_sq – возраст в квадрате.

Задача 4

Создайте из векторов из задачи 3 список (list) и назовите его info.

  • Обращаясь к элементам списка, выведите на экран имя Michael.

  • Обращаясь к элементам списка, выведите на экран вектор gender.

  • Назовите векторы в списке Name, Age, Gender. Выведите на экран элементы вектора Name.

  • Добавьте в список вектор drinks, в котором сохранены значения: juice, tea, rum, coffee.

  • Добавьте в список данные по еще одному человеку: John, 2 года, мужской пол, любит молоко.

Задача 5

В R есть функция strsplit(), которая позволяет разбивать строки на части по определенным символам (аналог метода .split() в Python).

Пусть у нас есть строка s:

s <- "a,b,c,d"

Мы хотим получить из нее вектор из 6 букв. Применям функцию:

let <- strsplit(s, ",")

Получили почти то, что хотели. Почему почти? Потому что получили не вектор, а список!

class(let)
## [1] "list"

Превратим в вектор:

unlist(let)
## [1] "a" "b" "c" "d"

Теперь все в порядке, получили вектор из четырех элементов.

Теперь задание. Дана строка index:

index <- "0,72;0,38;0,99;0,81;0,15;0,22;0,16;0,4;0,24"

Получите из этой строки числовой вектор I.