[МУЗЫКА] [МУЗЫКА] [МУЗЫКА] Рассмотрим теперь генерацию последовательностей векторов и матриц в пакете R. Для начала сгенерируем объект целочисленных индексов от 1 до 100. Для этого вводим переменную i и присваиваем ей значение от 1 до 100, указывая начало и конец диапазона через двоеточие. Ctrl + R, выполняем операцию и посмотрим, что у нас получилось. Выведем это значение на консоль. Мы видим, что у нас были сформированы сто значений от 1 до 100, при этом, как видите, они у нас не поместились все в одну строку, соответственно, были перенесены на следующие, и в начале каждой строки в квадратных скобках мы видим номер элемента, с которого данная строка начинается. Поскольку в данном случае элементы объекта i совпадают с их позицией в векторе последовательности, соответственно, в данном случае 19-й элемент равен также 19. Далее. Следующей операцией мы сгенерируем последовательность, начинающуюся с 1, где каждый последующий элемент получается добавлением 0,01. Используем для его формирования уже созданный объект i, поскольку его размерность была равна 100, соответственно, объект x также будет содержать 100 компонентов. Ctrl + R, и посмотрим его значение. Мы получили также последовательность из 100 значений. Она у нас стартует с первого элемента, то есть 1 + 0,01, и доходит до 2. Еще один способ сформировать последовательность — это использовать функцию SEC. То есть эта функция будет генерировать нам последовательность, начиная с 1 до 10 с шагом 0,1. Посмотрим результат этой операции. Как видим, так и есть. Первый элемент — 1, последний элемент — 10, и каждый последующий отличается от предыдущего на 0,1. Здесь в аргументах функции мы использовали аргумент by, которому было присвоено значение 0,1. Имя аргумента можно было опустить, и результатом действия этой операции была бы та же самая последовательность. Теперь, допустим, мы решили создать последовательность значений от какого-то заданного числа, в данном случае −3, до определенного также нами числа 3, и при этом мы хотим, чтобы последовательность содержала ровно 10 значений. Соответственно, мы должны указать параметр, соответствующий количеству значений результата. Выполняем данное действие и также посмотрим его результат. Вот они, ровно 10 значений. Первое — −3, последнее — 3, и все они в данном случае отличаются на одинаковую величину друг от друга. Далее, следующая функция, функция sample позволяет нам сгенерировать выборку значений из некоторого диапазона. При этом мы будем генерировать значения от 1 до 6 в случайной последовательности, мы хотим получить 10 наблюдений. При этом, поскольку возможных значений у нас всего шесть, это очевидным образом приведет к тому, что какие-то из них должны будут повториться. Для этого мы должны задать параметр, соответствующий возможности повторения, истинным. Выполняем это действие. Так. Я не переключила шрифт на русский, соответственно, комментарии у меня были некорректно оформлены. Переключимся на кириллицу и еще раз выполним это действие, хотя на самом деле объект был создан, объект был создан правильно. Просто чтобы мы могли увидеть правильные комментарии в нашей строке. И посмотрим содержимое теперь данного объекта. Как мы видим, это есть последовательность из 10 элементов, в которой содержатся значения от 1 до 6 в произвольном порядке с повторами. Очистим консоль и рассмотрим теперь, как генерировать векторы и матрицы. Ctrl + L, и вот следующий раздел, посвященный генерации векторов и матриц. Создадим три объекта, которые представляют собой векторы различных типов. Первый — n — будет вектор числовых значений, и он будет содержать пять наблюдений. Вектор c — это будет текстовый вектор из четырех компонент. И вектор l — это логический вектор из трех компонент. После того, как мы создадим эти объекты, сразу же выведем их на экран. Я выполню все эти операции вместе, выделю соответствующий блок, нажимаю Ctrl + R. И вот мы видим, у нас были созданы три вектора: числовой вектор, содержащий пять значений, текстовый вектор, содержащий четыре значения, и логический вектор из трех значений. Но мы пока создали только сами структуры. Мы не определяли значения компонент этих векторов. Соответственно, первый вектор у нас состоит только из нулей, второй вектор, текстовый — это просто пока пустые значения, а логический вектор, ему соответствуют логические нули, то есть значение «ложь». То же самое можно было сделать аналогичными функциями. Ну, в данном случае у меня стоит одинаковое количество значений. Нажимаем Ctrl + R и выполняем следующий блок. Как видите, операции сработали аналогично, но только чуть-чуть изменились длины этих векторов. При работе с последовательностями у нас был создан объект i, состоящий из целочисленных индексов от 1 до 100, то есть по сути эта последовательность представляет собой числовой вектор. Как можно обращаться к элементам этого вектора? Например, мы можем обратиться по номеру к какому-то конкретному элементу, обозначив его номер в квадратных скобках. То есть это очевидным образом у нас будет значение 10. Если мы хотим посмотреть значение вектора при каких-то конкретных значениях индексов из заданного диапазона, соответственно, этот диапазон через двоеточие также задается в квадратных скобках. Аналогично мы можем задать некоторое условие для индекса, в данном случае у нас значение индекса и значение самого вектора совпадают, поэтому мы можем использовать вот такую запись и вывести на консоль, соответственно, значения с индексом больше 80. Естественно, мы получаем последовательность значений от 81 до 100. Также существуют две удобные функции, позволяющие быстро просмотреть содержимое вектора, только его начало и только его конец. Функция head показывает нам первые элементы вектора, функция tail показывает последние элементы вектора, при этом по умолчанию будут выведены только шесть значений. Давайте посмотрим их. Соответственно, head, то есть начало, и tail, первые шесть и последние шесть значений. Это достаточно удобно, когда, например, массив у нас большой, мы не хотим весь выводить его на экран, мы просто хотим посмотреть, что содержится в соответствующем объекте. Если мы хотим указать какое-то конкретное число первых и конкретное число последних элементов, мы должны указать их в скобках дополнительным аргументом. Первые 10 значений и, например, последние три значения. Также можно задавать более сложные условия. Например, я сформирую новый объект, i10, который будет состоять из элементов объекта i таких, чей индекс при делении на 10 дает 0. Выполняем это действие. В данном случае был создан новый объект, соответственно, результат этой операции был сохранен в новую переменную i10 и не был выведен на экран. Выведем его и посмотрим, что у нас получилось. Логично, что мы получаем все значения данного вектора, которые кратны 10. Также мы можем задать более сложные условия. Например, пусть условие 1 будет представлять собой логический вектор значений «истина» и «ложь». Создаем этот вектор. Давайте сразу посмотрим, что у нас получилось. Это достаточно очевидно, то есть первое значение — «истина», второе — «ложь». И теперь создадим новый объект i1, который будет состоять из элементов вектора i, удовлетворяющих нашему выбранному условию. Как вы думаете, что это может получиться? Каким образом данное условие может быть применено к вектору i? Выполним это действие и посмотрим, что у нас получилось. Как видите, применение данной операции дает нам следующее: взять первый элемент, второй элемент не использовать, взять следующий, следующий не использовать и т.д. через один, тем самым мы получили вектор, состоящий только из нечетных значений. Если мы поменяем местами значения «истина» и «ложь» и сформируем новое условие 2 — такой же логический вектор, но сначала у нас будет ложное значение, а потом истинное — то применение вот этого условия к индексам нашего вектора даст нам, соответственно, последовательность, состоящую только из четных значений. Вот они, эти величины. Ну а теперь давайте посмотрим, что может нам дать вот такое вот условие. Условие 3. Согласно данному условию мы не должны брать первый элемент, не должны брать второй, должны взять третий. Четвертый, пятый не берем, берем шестой. И тем самым мы получаем новый объект, который содержит только элементы, кратные трем. [МУЗЫКА] [МУЗЫКА] [МУЗЫКА]