[МУЗЫКА] [МУЗЫКА] В системе R многие операции векторизованы. Это значит, что одно и то же действие можно повторить для множества элементов. Кроме этого, при помощи некоторых функций можно получить информацию о свойствах вектора в целом. В данном фрагменте мы поговорим о самых простых векторизованных операциях. Представим себе, что нам необходимо прибавить ко всем числам вектора некоторое одно и то же число. Если бы мы не использовали векторизованные операции, характерные для этого, нам пришлось бы писать программу, которая в цикле проходила бы от одного элемента к другому и каждому числу прибавляла бы некоторую константу. В R такое же можно сделать, в принципе, написав соответствующий код, но благо способы создания циклов здесь также имеются. Но, конечно, так никто не делает. Это совершенно не нужно. И вот как выглядит эта операция в R. Давайте создадим вектор под названием my_vector_8, куда положим результаты работы функции seq, которая задаст нам последовательность от одного до десяти через единицу. Обратите внимание, что мы можем не писать в данном случае параметр from, to и by, поскольку в схеме записи этой функции эти параметры стоят на первом, втором и третьем месте соответственно, и поэтому первое число будет рассматриваться как число, которое задает параметр from; второе, которое задает число для параметра to; и третье число, как число, задающее параметр для параметра by. Соответственно, активировав этот вектор, мы увидим ту самую последовательность, которую создали. А далее, для того чтобы прибавить каждому из элементов одно и то же число, мы должны написать всего лишь одну строчку. Соответственно, my_vector_8 плюс пять. И в итоге, к каждому элементу этого вектора будет прибавлена та самая константа, которую мы написали. Соответственно, вся операция занимает одну строчку. Если мы хотим вычесть какое-то число из всех элементов вектора, это будет абсолютно идентичная процедура. Но у нее есть один нюанс: если вы запишете это действие вот так, то есть наоборот, из единицы будете вычитать все элементы вектора, то это означает, что из вектора, состоящего только из единиц, мы будем вычитать элементы нашего вектора. И, соответственно, здесь последовательные записи имеют глубокий смысл. Нетрудно догадаться, что и умножение вектора на число происходит аналогично сложению. Каждый элемент того или иного вектора будет домножен на ту константу, которую мы указали в соответствующем коде. Код будет тоже выглядеть в одну строчку. Но если мы с вами применяем процедуру деления, то здесь будут некоторые нюансы. Соответственно точно так же, как в случае с вычитанием, мы будем делить вектор, состоящий из единиц, на элементы вектора, которые записаны в переменной my_vector_8. Здесь надо немножко аккуратно. Будьте внимательны. Аналогичные нюансы есть и при извлечении корней. Если имя вектора поместить в качестве аргумента функции sqrt, которая вычитает квадратный корень, то из каждого элемента вектора будет вычислен квадратный корень. Но, если вы записываете возведение в степени такого кода, то каждое число этого вектора будет возведено в квадрат. Но если вы поменяете местами, то это будет запись совсем другая. Это означает, что вы каждый раз двойку возводите в степень, которая находится в соответствующем элементе вашего вектора. Здесь тоже надо быть аккуратным при записях таких векторных операций. Существует целое множество функций, которые позволяют дать обобщенную характеристику вектора. Ими надо постоянно пользоваться. И мы будем постоянно к этим функциям обращаться. Давайте создадим некоторый сложный вектор, в котором будут использованы не просто перечисления, а еще и какие-то последовательности, объединения разнородных элементов вектора. Соответственно, с помощью функции C мы объединяем такую последовательность, в которой будет каждый элемент в последовательности одного до пяти повторяться десять раз, потом последовательность от десяти до 20 через один. Потом совершенно непредсказуемая последовательность один, пять, восемь. А еще потом сюда всунем my_vector_4, который создали несколько страниц назад. Соответственно, появляется довольно сложный вектор. Уже не очень понятно, сколько элементов здесь находится. С помощью функции length мы можем достаточно легко выяснить, сколько элементов в данном векторе. Соответственно, здесь присутствует 84 элемента. Еще одна функция, которая позволяет охарактеризовать вектор в целом, — это функция sum, которая позволяет моментально найти сумму всех элементов данного числа у вектора. Нередко нас будут интересовать такие суммы. Соответственно, мы этой функцией будем довольно часто пользоваться. Часто бывает необходимо найти уникальное значение того или иного вектора, для того чтобы понять, сколько всего вариантов значений чисел присутствует в этом или ином векторе. Для этих целей служит специальная функция, которая называется unique, которая принимает имя вектора в качестве аргумента, а дальше выдает только те уникальные значения, которые присутствуют здесь, убирая их повторения. Однако заметьте, что расставлены эти значения будут в той последовательности, в которой они были в изначальном векторе. Часто нам нужно бывает понять, с какой частотой встречается то или иное значение в том или ином векторе. Для этого удобна функция table. Она выдает, сколько раз встречалось то или иное уникальное значение в указанном векторе. Соответственно, применив к вектору my_vector_9 функцию table, мы видим, что единица встретилась здесь 15 раз, двойка 14 раз, тройка тоже 14 раз, а вот числа 19 и 20, допустим, всего лишь по одному разу. Если вектор числовой, то в нем могут быть минимальные и максимальные значения. И для поиска этих минимальных и максимальных значений, что довольно часто нужно для статистических действий, применяются интуитивно понятные функции. Это функция min, которая выдает в векторе my_vector_9 минимальное значение один или максимальное значение. Соответственно, здесь максимальное значение будет 20. И конечно же, так как курс у нас посвящен статистическим методам, мы можем охарактеризовать вектор его средним значением. Соответственно, эта функция называется min, и среднее значение нашего вектора 4,6 приблизительно. Мы можем вычислить также медиану, стандартное отклонение и многие другие важные для статистики показатели, о которых мы будем говорить впереди. Однако это тоже еще не всё. Мы рассмотрели лишь самую вершину этого самого векторного айсберга. Существует огромный раздел математики, работающий с векторами и матрицами, называется это линейная алгебра, но о ней мы кратко поговорим в следующем курсе.