0:00
[МУЗЫКА] [МУЗЫКА]
[МУЗЫКА] Ну а теперь перейдем к рассмотрению матриц.
Я очищу консоль, Ctrl + L, и рассмотрим,
какие операции могут быть использованы при работе с матрицами.
Для начала рассмотрим простейшую операцию — генерирование диагональной матрицы.
Допустим, я хочу сформировать единичную матрицу размера 4 x 4,
то есть у меня будет четыре строки, четыре столбца,
диагональная матрица у нас квадратная, поэтому число строк совпадает с числом
столбцов, и на диагонали этой матрицы у нас будут стоять единицы.
Вот она, наша квадратная матрица,
размера 4 x 4, на диагонали которой стоят единички.
Если мы хотим задать произвольную диагональную матрицу, на диагонали которой
стоят какие-то определенные значения, мы можем использовать ту же функцию,
но в первом ее аргументе мы должны задать последовательность значений,
которые и будут формировать значения главной диагонали.
Следующая операция должна сгенерировать нам диагональную матрицу размера 5 x 5,
на диагонали которой будут последовательно идти значения от 1 до 5,
при этом будет создан новый объект,
и следующей же операцией в этой строке этот объект будет выведен на экран.
Вот как мы и ожидали,
мы получили этот результат: диагональная матрица размера 5 x 5.
Для того чтобы задать матрицу произвольной размерности, мы можем,
используя функцию matrix, сначала в первом ее
аргументе последовательностью определить все элементы, которые будут стоять в
этой матрице, далее стандартно указывается количество строк и количество столбцов.
То есть в этой строке мы формируем объект m,
который представляет собой матрицу размера 2 x 3,
а элементами ее являются шесть значений, в данном случае последовательные от 1 до 6.
И здесь же мы сразу выведем результат на экран.
Обратите внимание, что при использовании этой операции значения,
которые стояли в векторе C, расположились у нас по столбцам.
То есть сначала первые два элемента встали в первый столбец,
следующие элементы векторов стали во второй столбец,
и следующие элементы образовали третий столбец.
Если мы хотим, чтобы вот эти значения были расположены построчно,
то 1, 2, 3 — это была бы первая строка, а 4, 5,
6 — вторая строка, мы должны задать параметр byrow,
то есть по строкам, и присвоить ему значение «истина».
По умолчанию этот параметр также присутствует, но его значение — «ложь».
Если мы не используем этот параметр функции,
он использует эти значения по умолчанию.
Давайте посмотрим, какую матрицу мы получим в этом случае.
Как видите, как мы и хотели, первые три значения встали в первую строчку,
следующие три значения встали во вторую строку.
Конечно же, можно было не усложнять и не формировать вот этот вектор,
перечисляя все его компоненты, поскольку они идут последовательно в данном
случае от 1 до 6, соответственно, мы могли бы просто задать диапазон и
указать через двоеточие начало и конец диапазона изменения.
То есть вот этот результат в точности бы совпал с предыдущим.
Как мы можем обращаться к элементам матрицы?
Так же, как и в векторах мы обращались к элементам по номеру в
квадратных скобках, здесь мы поступаем точно так же, только нам теперь
нужно указать два индекса: соответственно номер строки и номер столбца.
Если мы не указываем какой-то индекс,
предполагается, что будут взяты все элементы.
Например, если мы пропускаем номер строки, значит,
у нас будут взяты все элементы указанного столбца.
То есть в данном случае вот конкретно в этой операции
мы получаем с вами все элементы второго столбца,
приравниваемых к нулю, и выводим эту матрицу.
Как видите, независимо от того, чему равен индекс строки,
первый или второй, мы взяли все элементы, у которых второй столбец был равен двум,
то есть вот как раз эта часть, им были присвоены значения ноль,
и мы получили вот такой вот результат.
Стандартно при формировании матрицы, как видите,
у нее задаются номера строк и номера столбцов в квадратных скобках.
Если мы хотим переобозначить имена строк и имена столбцов,
мы можем сформировать новые переменные, которые будут содержать эти имена.
Допустим, я создаю новый объект n_col,
это будут у меня соответственно имена столбцов следующим образом.
Как правило, столбцы в статистическом анализе у нас представляют
собой переменные, а строки соответствуют наблюдениям.
Так вот, используем первую букву от слова «переменная»,
по-английски variable, то есть V — это у нас будут номера столбцов,
а I — это у нас будут номера строк.
В данном случае у нас появляется новая функция paste.
Что она собой представляет?
Если мы указываем здесь сначала текстовое значение,
то есть букву V, а дальше у нас идет от 1 до 3,
при этом разделитель sep, аргумент sep, у нас пустой,
в результате этого действия мы получим три значения,
каждое из которых начинается с буквы V, далее последовательно идут значения 1,
2, 3, при этом между ними не будет никаких разделителей.
Давайте посмотрим, вот они, эти текстовые значения: V1, V2, V3.
В нашей матрице, которую мы уже сформировали ранее, матрица m,
было две строки, три столбца.
Соответственно, для двух строк этой матрицы поступим аналогично,
обозначим их I1 и I2, используем ту же
самую функцию paste и получаем два значения,
которые будут являться именами наших строк.
А вот теперь используем уже операции языка R,
это операции colnames и rownames, то есть имена столбцов и имена строк.
Эти операции применим к матрице m и для соответствующих
значений используем уже сформированные выше объекты.
Выполняем данную операцию.
Но она, естественно, была выполнена, но мы ничего пока не видим.
Результата действия у нас пока не появилось на экране.
Ctrl + L.
А вот теперь посмотрим, что собственно у нас стало.
Мы видим ту же самую матрицу в том виде,
как она у нас была в последний раз после замены элементов второго столбца нулями.
То есть это та же самая матрица, но теперь у нее строки и столбцы не просто
пронумерованы, а имеют какие-то свои названия.
Здесь мы обращались отдельно к столбцам и отдельно к строкам.
То же самое можно было выполнить одним действием,
то есть имена по обоим измерениям.
Но тогда нам нужно не два отдельных объекта, а список этих объектов,
то есть лист, состоящий из имен строк и имен столбцов.
Выполняем эту операцию.
В принципе, никаких принципиальных изменений здесь произойти не должно было,
эта операция дает абсолютно аналогичный результат.
Как еще можно задать матрицу?
Для начала можно сформировать матричную структуру нужной размерности.
Определим матрицу M как матрицу некоторых значений,
как видите, здесь первый аргумент у меня пока опущен.
У нее будет пять строк и четыре столбца.
Посмотрим, что у нас получилось.
И поскольку мы не задавали элементы этой матрицы,
структура у нас создана, у нас действительно пять строк и четыре столбца,
но элементы этой матрицы не определены, и на экране мы видим информацию о том,
что эти значения non available, то есть эти значения недоступны.
Тем не менее, матрица создана.
Мы можем использовать интересную и полезную функцию data.entry.
Что у нас при этом появляется?
У нас появляется дополнительное окно редактора данных,
то есть мы видим перед собой таблицу,
где у нас уже есть некоторая заготовка для заполнения элементов этой матрицы.
Мы можем вот здесь вот, заходя в соответствующую ячейку,
определить элемент матрицы, присвоив ему необходимое значение.
Матрицы у нас могут быть как числовые, так и текстовые.
Но мы не будем сейчас делать все эти действия.
Пока хватит, я думаю, принцип работы вы поняли.
Давайте посмотрим, что у нас получилось.
То есть вот я
успела определить только первую строку этой матрицы,
эти значения были сохранены, и теперь матрица имеет вот такой вот вид.
Давайте сформируем две новые матрицы одинаковой
размерности и посмотрим, как их можно объединять в более широкие структуры,
то есть матрицы большей размерности.
Выполним две следующие операции — первая,
вторая; и объединим эти матрицы.
Для объединения этих матрицы используются две функции — cbind и rbind.
Чем отличаются результаты?
В первом случае к столбцам первой матрицы будут
приписаны столбцы второй матрицы, а во втором случае к строкам
первой матрицы ниже будут приписаны строки второй матрицы.
Исходные матрицы у нас были размера 2 x 3, соответственно,
первый результат дал нам матрицу 2 x 6, ну а второй, в свою очередь,
даст нам результат 4 x 3.
[МУЗЫКА]
[МУЗЫКА]