Создать вектор в r studio
Находит широкое применение в различных областях знаний для моделирования, статистического анализа и обработки данных.
Основные достоинства:
Ресурсы в сети интернет для знакомства и освоения R
-
- двухминутные видео в стиле “how to …” - QuickR, описываются основные возможности языка
Онлайн курсы
-
- “Программирование на языке R”, начало курса 2 июня 2014
Пакеты (библиотеки функций) в R
Установка новых пакетов возможна через консоль R командой install.packages либо через графический интерфейс.
Внешний вид RStudio
Важно! R является регистрозависимым языком, поэтому надо быть внимательным при написании имен команд и переменных. Переменные big_table и Big_table рассматриваются как разные.
Установка и запуск дополнительных пакетов
Удобный способ уставновки дополнительный пакетов через графический интерфейс RStudio. Важно отметить галочкой автоматическую уставновку зависимостей.
Установка пакета data.table :
Загрузка пакета в рабочую область осуществляется через функции
Использовать функции из установленных пакетов, без их загрузки в рабочую область можно используя следующий вызов:
Если необходимо использовать много различных функций, содержащихся в пакете, или происходит частое обращение к ним в ходе работы, то удобнее использовать первый вариант - загрузка всего пакета в рабочую область.
В случае же, если функция вызывается редко или существует конфликт имен (разные функции в разных пакетах имеют одинаковое название), то предпочтительным становится второй вариант вызова функций, при котором явно указывается какая функция и из какого пакета должна использоваться.
R - язык функционального программирования
Функции производят операции над объектом и возвращают результат, при этом передаваемый объект не изменяется.
Если необходимо изменить состояние объекта, то результат функции присваивается переменной обозначающей этот объект.
Любая операция в R это функция
Типы данных
Типы данных в порядке увеличения приоритета:
- Логические (logical)
- Целочисленные (integer)
- Вещественные числа (numeric)
- Комлексные числа (complex)
- Текстовые (character)
- Списки (list)
Векторы и типы данных
Вектор может содержать данные только одного типа.
Какой класс будет иметь вектор?
Способы создания векторов
Матрицы
Матрица - двумерный набор элементов одного типа (таблица).
Массивы
Массив - многомерный набор элементов одного типа.
Factors
Factor - представляет номинальную или ранговую шкалу. Используется для представления Y в классификационных моделях.
Data.frames
Data.frame - двумерный набор данных (таблица). В отличие от матриц, колонки в data.frame могут содержать данные различного типа. Однако тип данных внутри каждой колонки может быть только один. Это объясняется тем, что data.frame это список векторов (колонок). Поэтому к data.frame могут быть применены различные функции применимые к спискам.
Формулы
Формулы - специальная форма выражения отношений между переменными в уравнении. Формулы используются при построении моделей для определения функциональной зависимости между параметрами.
Линейная комбинация (+):
Линейная комбинация с отсутствующим свободным членом (+0)
Функция идентичности I(), при этом выражение в скобках рассматривается как обычное математическое.
Формулы могут содержать математические функции
Символ точки (.) подставляет все имеющиеся переменные. Функция зависимости y от всех остальных переменных, которые будут передаваться в функцию выглядит так
Примеры формул
A
A + 0
A + B
A + I(A^2)
A:B
A*B
(A + B + C)^2
Списки
Списки содержат упорядоченный набор элементов, каждый из которых может являться вектором, матрицей, массивом, списком и т.д.
Как правило в виде списков удобно хранить либо какие-то однотипные данные соответствующие разным итерациям, например, множество моделей. Или хранить разнородные данные, которые имеют смысловую связь, например, различные статистические характеристики отдельной модели.
Векторизация
В R действия выполняются поэлементно сразу над всем набором данных (будь то вектор, матрица, data.frame и т.д.). Векторные вычисления очень эффективны, поэтому всегда когда нужно совершить действия над элементами вектора (матрицы и т.д.) предпочтительнее использовать векторизацию, а не циклы.
Кстати оператор присваивания тоже является функцией, и присвоение можно выполнить в таком виде
Сложение двух векторов одинаковой длины происходит поэлементно
Как упоминалось, векторные вычисления могут производиться над любой структурой данных (вектор, матрица, data.frame и т.д.). Пусть у нас есть матрица
Умножим все ее элементы на 2, или возведем во вторую степень
Особенности векторизации
Если два вектора имеют различное количество элементов, то вектор меньшей длины будет повторяться столько раз чтобы соответствовать длине большего вектора.
Если длина большего вектора кратна длине меньшего вектора, такая операция будет произведена неявно, без уведомления пользоателя.
В случае если длины комбинируемых векторов различны, то будет произведено циклическое совмещение элементов меньшего вектора относительно элементов большего вектора и будет сгенерировано предупреждение.
Имена элементов векторов, матриц, data.frames, списков и т.д.
Все объекты поддерживают присвоение имен содержащимся в них элементам.
Обычный и именованный вектор
Другой способ создания именованного вектора
Аналогично векторам матрицы и data.frames имеют такие свойства как rownames и colnames , которые позволяют изменять имена колонок и строк.
Удаление имен осуществляется присвоением специального типа NULL
Или для векторов
При этом к элементам уже нельзя будет обращаться по имени, а только по индексу.
Преобразование типов и структур данных друг в друга
Преобразование типов данных осуществляется через группу функций, начинающихся на as.
Пример конвертации целочисленного вектора в текстовый
Особенности приведения чисел выраженных как factors к числовому виду.
Преобразуем вектор целых чисел в номинальную шкалу (factor).
Для обратной конвертации использование функции as.integer недостаточно.
Это связано с внутренним представлением типа данных factor. Эта структура представляет собой набор целочисленных значений, каждому из которых присвоено имя. В данном примере именами являются значения 1 и 0.
Поэтому для корретного преобразования factor в целочисленный тип данных необходимо предварительно провести конвертацию в текстовый вид.
Данная операция часто вызывает затрудние и служит причиной ошибок.
Подобно преобразованию типов данных возможно приведение различных структур данных к другому типу с помощью того же семейства функций, начинающихся на as. .
Преобразоваание матрицы в data.frame
Справка в R - прекрасный источник информации
Полное описание функций и возвращаемых ими значений с примерами можно найти в справке.
Дополнительно можно вызывать справку клавишей F1, когда курсор стоит на имени функции в тексте скрипта или в консоли.
Если необходимо найти какую-либо функцию по ее имени или части имени, то удобно пользоваться функциями из пакета sos .
Установите пакет sos и выполните следующие команды:
Индексация векторов, матриц, data.frames и т.д.
Индексация - исключительно эффективный и мощный инструмент для работы с данными.
Индексы могут быть:
- числовыми
- логическими
- текстовыми
Для индексирования используется три типа выражений:
- [ - выбирает элементы вектора/списка/массива и т.д.
- $ - выбирает один элемент из data.frame/списка по его имени.
- [[ - выбирает элементы из вектора/списка/массива и т.д, но отбрасывает имена, если они есть.
Числовые индексы
Выбор элементов вектора по их индексу
Из этого примера видно, что для индексирования и выбора элементов на самом деле используется вектор индексов.
Чтобы выбрать каждый второй элемент по индексу надо сгенерировать вектор, состоящий из четных чисел и использовать его для индексации исходного вектора.
Для удаления элементов по значению индекса перед ними добавляют знак минус
Особенности индексирования позволяют менять положение элементов и дублировать их. Это очень эффективный прием, о котором часто забывают.
С точки зрения индексирования матрицы и data.frames почти ничем не отличаются.
Создадим тестовый набор данных:
Выберем элемент строки 1 и колонки 2
Выберем все значения строки 1. Результатом будет новый data.frame
Выберем все значения колонки 1. Результатом будет вектор! Мы говорили выше, что data.frame это список колонок-векторов, и при выборе одной колонки присходит автоматическое преобразование результата к ветору.
Чтобы избежать этого необходимо добавить опцию drop . Теперь результатом будет data.frame
Для выбора блоков данных в качестве индексов строк и стобцов можно использовать
Отрицательные индексы используются для удаления соответствующих колонок и строк (обратите внимание, что удаляется не один элемент а колонки и строки):
что аналогично предыдущему примеру, приводящему к тому же результату
Текстовые индексы
Текстовые индексы работают аналогично числовым
Выбор блока данных
Для текстовых индексов отсутствует возможность использования отрицательных значений индексов, т.е. чтобы удалить строку/колонку необходимо сформировать вектов с именами строк/колонок, которые необходимо оставить.
Логические индексы
Генерация логического индекса (вектора) для вектора a
который можно использовать для выбора соответствующих элементов
Возможна комбинация логических индексов с использованием операторов AND (&) и OR (|)
Логическое отрицание, оператор NOT (!), инвертирует значения логических индексов
Логический индекс (вектор) можно преобразовать в числовой. Функция which возвращает порядковые номера элементов, значение которых TRUE
Индексы списков
Для извлечения определенных элементов списка можно использовать числовые, текстовые и логические индексы. Однако при индексации списков есть некоторые особенности.
Создадим произвольный именованый список из двух элементов.
Выберем первый элемент списка запросом показанным ниже.
Обратите внимание, что в результате мы получим новый список содержащий только один элемент. Проверим это
Выберем первый элемент списка используя другую функцию
В этом случае запрос вернул содержимое первого элемента списка - целочисленный вектор.
Это важная особенность, которую упускают начинающие.
Альтернативный вариант доступа к содержимому одного элемента списка по его имени возможен с использоваем специальной конструкции ($)
Это аналогично следующему вызову с использованием текстового индекса
Индексы data.frames
Выборка данных из data.frames была описана выше и ничем не отличается от других структур данных (вектров, матриц и т.д.). Единственная особенность вытекает из того, что data.frame это список векторов (колонок), то для выбора одной колонки по имени можно использовать конструкцию аналогичную для списков
Такое выражение всегда возвращает вектор.
Особенности индексов
Если идет обращение к несуществующему индексу, то вернется специальное значение NA
NA специальное значение указывающее, что значение не определено (Not Available).
Если присваивать значение элементу с несуществующим индексом, то этот элемент будет создан.
Другой пример в результате которого создаются NA
Для проверки является ли значение NA используется специальная функция
Все то же самое справедливо и для текстовых индексов
Аналогично для того, чтобы добавить новый элемент в список (колонку/строку в data.frame) используется новое имя или числовой индекс.
Пример с data.frame. Создадим data.frame и добавим новую переменную, которая будет равняться значению первой колонки во второй степени.
Пример со списком. Создадим именованый список из двух элементов и добавим к нему третий элемент.
Понятие вектора в языке программирования R
Любой объект, который содержит данные называется data structure – структурой данных .
Вектор – это набор чисел, как правило, небольших размеров. Это – самый простой тип структуры данных в R. Даже одно число представляет собой вектор длиной в один элемент.
Вектор – поименованный одномерный объект, содержащий набор однотипных элементов.
Создание векторов
Способ 1 – с()
Для создания векторов небольшой длины используется функция конкатенации c() (от "concatenate" – объединять, связывать).
В качестве аргументов этой функции через запятую перечисляют объединяемые в вектор значения. Например, зададим вектор z со значениями 1.1, 9, 3.14:
Способ 2 – scan()
Применяется функция scan(), которая "считывает" последовательно вводимые с клавиатуры значения. При этом выполнение команды scan завершают введением пустой строки
Заметьте, что X – заглавная буква. Если использовать прописную (х), то программа выдаст ошибку либо величину x , которая была ранее определена в листинге кода.
Этот способ требует внимательного ввода значений с клавиатуры. В случае, если вы введете другое, нежели требуется, число, необходимо будет либо вводить все значения заново, либо воспользоваться специальными инструментами для корректировки.
Способ 3 – seq()
При необходимости использования набора последовательных чисел, например, от 1 до 7, можно воспользоваться функцией seq()
Более того, функция seq() может устанавливать последовательность числе с шагом приращения:
Операции над векторами
Векторы можно комбинировать, чтобы получить новый вектор.
Векторы можно объединять в один, как показано ниже
Векторы могут участвовать в арифметических операциях:
Каждый элемент вектора с именем my.vector1 сначала умножается на 2, а после к каждому из них прибавляется 100.
Другими распространенными арифметическими операциями являются
Чтобы найти квадратный корень можно использовать функцию
sqrt() или ^(1/2) , или ^0.5
Найдем корень вектора my.vector1 , элементы которого умножены на 2 и увеличены на 12.
Обратите внимание, что, когда программа выводит на экран ответ, в квадратных скобках указывается порядковый номер в наборе элементов.
Осуществим операцию деления над векторами:
Как видно, числа из меньшего вектора (2-го слагаемого) были добавлены к первым двум числам большего вектора (1-го слагаемого), а потом – к оставшимся двум числам в нем. Таким образом реализуется метод “Recycling” .
Можно проверить, есть ли элементы вектора меньше или больше некоторого значения, например:
Вектор может быть текстовым (character)
Если вы хотите объединить элементы текстового вектора в одну строку, то воспользуйтесь paste() , в котором аргумент collapse указывает программе, что между элементами должен быть один пробел.
Текстовые векторы тоже комбинируются. Допускается включение в вектор отдельных элементов
paste() может объединять элементы множества текстовых векторов. В самом простом случае объединяются два текстовых вектора, длина которых равняется 1, при этом аргумент sep отвечает за символ, стоящий между объединенными элементами
Если объединять текстовый вектор с числовым, программа преобразует все значения в текстовые:
Чтобы проверить, что new.vect является текстовым применим mode()
Далее объединим числовой и текстовый векторы одинаковой длины
Для векторов разной длины срабатывает “Recycling”
Чтобы обратится к конкретному элементу необходимо указать имя вектора и индекс этого элемента в квадратных скобках:
Из примера выше видно, что 4-й элемент вектора y равен 6. Ниже показано, что можно брать конкретные элементы из векторов и производить над ними операции:
Вывод нескольких последовательных значений , например, 2-го, 3-го и 4-го элементов вектора y , выполняется следующим образом
Чтобы выбрать конкретные элементы вектора, необходимо выполнить команду
Если при выводе требуется исключить некоторые элементы, то в предыдущей команде надо поставить минус «-»
Поддерживается также вывод по критерию. Например, выберем все значения больше 3
Благодаря индексам можно вносить исправления в вектор. Так, второй элемент вектора должен быть равным 4
Сортировка элементов вектора по возрастанию или убыванию осуществляется с помощью sort() . При этом аргументом, отвечающим за порядок сортировки, выступает decreasing , что означает «по убыванию» или «убывающий».
Еще раз о создании векторов. Помимо числовых и текстовых можно создавать логические векторы
Функция class() также используется для проверки типа вектора, при этом обратите внимание на результаты
Функция sum() вычисляет сумму элементов вектора
mean() – вычисляет среднее значение элементов вектора
Стандартное отклонение – sd()
Peter Dalgaard (2008). ‘Introductory Statistics with R’. Second Edition, Springer Science e+Business Media, LLC. 363 p.
R — очень мощный язык, разработанный специально для анализа и визуализации данных и машинного обучения, что делает его обязательным к изучению для любого начинающего специалиста по данным.
R особенно удобен для линейной алгебры. Встроенные типы данных, такие как векторы и матрицы, хорошо сочетаются со встроенными функциями, такими как алгоритмы решения собственных значений и определителей, а также с возможностями динамического индексирования.
В этой вводной в статье про R рассмотрим следующие реализации линейной алгебры:
Векторы
- присваивание векторов;
- векторные операции;
- генерирование последовательностей;
- логические векторы;
- пропущенные значения;
- индексирование векторов.
Массивы и матрицы
Векторы
Присваивание векторов
R оперирует структурами данных, самой простой из которых является числовой вектор — упорядоченный набор чисел. Чтобы создать вектор x с четырьмя элементами 1 , 2 , 3 и 4 , можно использовать объединяющую функцию c() .
Здесь используется оператор присваивания <- , указывающий на назначаемый объект. В большинстве случаев <- можно заменить на = .
Также можно использовать функцию assign() :
Оператор <- считается сокращённым вариантом этой функции.
Присваивание векторов работает и в обратном направлении:
Векторные операции
Векторы используются различными способами.
Операция y <- c(x, 0, x) присвоит вектор 1, 2, 3, 4, 0, 1, 2, 3, 4 переменной y .
Векторы можно свободно перемножать и дополнять константами:
Заметьте, что эта операция верна, даже когда x и y имеют разную длину. В данном случае R просто будет повторять x (иногда дробно), пока не достигнет длины y. Поскольку y равен 9 числам в длину, а x — 4, x повторится 2.25 раз пока не совпадёт с длиной y.
Можно использовать все арифметические операторы: + , - , * , / и ^ , а также log , exp , sin , cos , tan , sqrt и многие другие. max(x) и min(x) отображают наибольший и наименьший элементы вектора x , а length(x) — количество элементов x ; sum(x) выдаёт сумму всех элементов x , а prod(x) — их произведение.
mean(x) вычисляет выборочное среднее, var(x) возвращает выборочную дисперсию, sort(x) возвращает вектор того же размера, что и x, элементы в котором расположены в порядке возрастания.
Генерация последовательностей
В R существует множество методов для генерации последовательностей чисел. 1:30 аналогичен c(1, 2, …, 29, 30) . Двоеточие имеет более высокий приоритет в выражении, поэтому 2*1:15 вернёт c(2, 4, …, 28, 30) , а не c(2, 3, …, 14, 15) .
30:1 используется для генерации последовательности в обратном направлении.
Для генерации последовательностей можно использовать и функцию seq() . seq(2,10) возвращает такой же вектор, что и 2:10 . В seq() , можно также указать длину шага: seq(1,2,by=0.5) возвращает c(1, 1.5, 2) .
Аналогичная функция rep() копирует объект различными способами. Например, rep(x, times=5) вернёт пять копий x впритык.
Логические векторы
Логические значения в R — TRUE, FALSE и NA. Логические векторы задаются условиями. val <- x > 13 задаёт val в качестве вектора той же длины, что x , со значением TRUE , если условие выполняется, и FALSE , если нет.
Логические операторы в R: < , <= , > , >= , == и != , означающие, соответственно, меньше чем, меньше чем или равно, больше чем, больше чем или равно, равно или не равно.
Пропущенные значения
Функция is.na(x) возвращает логический вектор того же размера, что и x , со значение TRUE , если соответствующий элемент для x равен NA .
x == NA отличается от is.na(x) , поскольку NA является не значением, а маркером для недоступной величины.
Второй тип “пропущенного значения” создаётся численными вычислениями, например 0/0 . В этом случае значения NaN (не числа) рассматриваются как значения NA , то есть is.na(x) вернёт TRUE и для NA , и для NaN значений. is.nan(x) используется только для определения значений NaN .
Индексирование векторов
Первый вид индексации — через логический вектор. y <- x[!is.na(x)] устанавливает y значениям x , не равным NA или NaN .
(x+1)[(!is.na(x)) & x>0] -> z устанавливает z значениям x+1 , больше 0 и не являющимся Na или NaN .
Второй метод осуществляется с вектором положительных целых значений. В этом случае значения должны быть в наборе . Для формирования результата соответствующие элементы вектора выбираются и объединяются в этом порядке. Важно помнить, что, в отличие от других языков, в R первый индекс равен 1, а не 0.
x[1:10] возвращает первые 10 элементов x , предполагая, что length(x) не менее 10. c(‘x’, ‘y’)[rep(c(1,2,2,1), times=4)] создаёт символьный вектор длиной 16, где ‘x’, ‘y’, ‘y’, ‘x’ повторяются четыре раза.
Вектор отрицательных целых чисел определяет значения, которые должны быть исключены. y <- x[-(1:5)] устанавливает y всем значениям x , кроме первых пяти.
Наконец, вектор символьных строк может использоваться, когда у объекта есть атрибут name для идентификации его компонентов. Для <- c(1, 2, 3, 4) можно задать имя каждому индексу вектора names(fruit) <- c(‘mango’, ‘apple’, ‘banana’, ‘orange’) . Затем элементы можно вызывать по имени lunch <- fruit[c(‘apple’, ‘orange’)] .
Преимущество этого подхода в том, что иногда буквенно-цифровые имена запомнить легче, чем индексы.
Обратите внимание, что индексированное выражение может встречаться на принимающей стороне присвоения, где оно только для этих элементов вектора. Например, x[is.na(x)] <- 0 заменяет все значения NA и NaN в векторе x на 0 .
Другой пример: y[y<0] <- -y[y<0] аналогичен y <- abs(y) — код просто заменяет все значения меньше 0 на отрицательные значения.
Массивы и матрицы
Массивы
Массив — это проиндексированный набор записей данных, не обязательно численный.
Вектор размерности — это вектор неотрицательных чисел. Если длина равна k, тогда массив k-размерный. Размерности индексируются от единицы вверх до значения, указанного вектором размерности.
Вектор может использоваться R в качестве массива, как атрибут dim . Если z — вектор из 1500 элементов, присвоение dim(z) <- c(100, 5, 3) означает, что z теперь представлен как массив 100 на 5 на 3.
Индексирование массивов
На индивидуальные элементы массива можно ссылаться, указав имя массива и в квадратных скобках индексы, разделённые запятыми.
Первое значение вектора a — 3 на 4 на 6 — может быть вызвано как a[1, 1, 1] , а последнее как a[3, 4, 6] .
a[,,] отображает массив полностью, следовательно, a[1,1,] берёт первую строку первого 2-размерного сечения a .
Индексирование матриц
Следующий код генерирует массив 4 на 5: x <- array(1:20, dim = c(4,5)) .
Массивы определяются вектором значений и размерностью матрицы. Значения вычисляются сначала сверху вниз, затем слева направо.
array(1:4, dim = c(2,2)) вернёт
В матрицах индексов запрещены отрицательные индексы, а значения NA и ноль разрешены.
Внешнее произведение двух матриц
Важной операцией с векторами является внешнее произведение. Если a и b — это два численных массива, их внешним произведением является массив, вектор размерности которого получается объединением двух векторов размерности, а вектор данных достигается формированием всех возможных произведений элементов вектора данных a и элементов вектора b . Внешнее произведение вычисляется с помощью оператора %o% :
Фактически любую функцию можно применить к двум массивам, используя внешнюю () функцию. Предположим, мы определили функцию f <- function(x, y) cos(y)/(1+x²) . Функцию можно применить к двум векторам x и y с помощью z <- outer(x, y, f) .
Рассмотрим определители матриц 2 на 2 [a, b; c, d], где каждая запись представляет собой неотрицательное число от 0 до 9. Задача: найти определители всех возможных матриц этой формы и отобразить на графике высокой плотности частоту, с которой встречается значение.
Или, перефразируя, нужно найти распределение вероятности определителя, если каждая цифра выбирается независимо и равномерно случайным образом.
Один из умных способов сделать это — использовать внешнюю функцию дважды.
Первая строка присваивает d этой матрице:
Вторая строка снова использует внешнюю функцию для расчёта всех возможных определителей. Последняя строка строит график.
Обобщённое транспонирование массива
Функция aperm(a, perm) используется для перестановки массива a. Аргументом perm должна быть перестановка чисел k>, где k — количество индексов в a. Результатом функции будет массив того же размера, что и a, но прежняя размерность, заданная perm[j] , становится новой размерностью j-th .
Проще понять, если думать об этом как об обобщённом транспонировании матриц. Если A — это матрица, тогда B — просто результат перестановки матрицы A :
В таких особых случаях перестановку осуществляет функция t() .
Умножение матриц
Для умножения матриц используется оператор %*% . Если A и B являются квадратными матрицами одинакового размера, A*B — это поэлементное произведение двух матриц. A %*% B — это скалярное произведение (произведение матриц).
Если x — вектор, тогда x %*% A %*% x — его квадратичная форма.
crossprod() осуществляет перекрёстные произведения. Таким образом crossprod(X, y) аналогична операции t(X) %*% y , но более эффективна.
diag(v) , где v — вектор — задаёт диагональную матрицу с элементами вектора в качестве диагональных элементов. diag(M) , где m — матрица — задаёт вектор основных диагональных элементов M (так же как и в Matlab). diag(k) , где k — единичное числовое значение — возвращает единичную матрицу k на k .
Линейные уравнения и инверсия
Решение линейных уравнений является инверсией умножения матриц. Если
с заданными только A и b , вектор x — решение системы линейных уравнений, которое быстро решается в R:
Собственные значения и собственные векторы
Функция eigen(Sm) вычисляет собственные значения и собственные векторы симметричной матрицы Sm. Результат — это список, где первый элемент отображает значения, а второй — векторы. ev <- eigen(Sm) присваивает этот список ev .
ev$val — это вектор собственных значений Sm , и ev$vec — матрица соответствующих собственных векторов.
Для больших матриц лучше избегать вычисления собственных векторов, если они не нужны, используя выражение:
Сингулярное разложение и определители
Функция svd(m) принимает произвольный матричный аргумент m и вычисляет его сингулярное разложение. Оно состоит из 1) матрицы ортонормированных столбцов U с тем же пространством столбцов, что и m , 2) второй матрицы ортонормированных столбцов V , пространство столбцов которой является пространством строк m , 3) и диагональной матрицы положительных элементов D :
det(m) используется для вычисления определителя квадратной матрицы m .
Выравнивание методом наименьших квадратов и QR-разложение
Функция lsfit() возвращает список заданных результатов процедуры выравнивания методом наименьших квадратов. Присваивание наподобие этого:
выдаёт результаты выравнивания методом наименьших квадратов, где y — это вектор наблюдений, а X — проектная матрица.
ls.diag() используется для диагностики регрессии.
Тесно связанной функцией является qr().
Они вычисляют ортогональную проекцию y на диапазон X в fit , проекцию на ортогональное дополнение в res и вектор коэффициентов для проекции в b .
Формирование блочных матриц
Матрицы можно строить из других векторов и матриц с помощью функций cbind() и rbind() .
cbind() формирует матрицы, связывая матрицы горизонтально (поколоночно), а rbind() связывает матрицы вертикально (построчно).
В присвоении X <- cbind(arg_1, arg_2, arg_3, …) аргументами cbind() должны быть либо векторы любой длины, либо столбцы одинакового размера (одинаковым количеством строк).
Помимо обычных векторов (наборов элементов) в R можно создавать поименованные векторы – наборы элементов с присвоенными им названиями. Создадим вектор с профилем некоторой страны (id, значение ВВП на душу населения, значения индекса демократии, индекс коррупции):
Посмотрим на структуру полученного вектора:
Теперь при обращении к какому-либо элемента вектора R будет выдавать не только его значение, но и название:
На практике такие вектора нужны нечасто, но если мы когда-нибудь будем писать свои функции или даже библиотеки, нам может понадобиться, чтобы при выводе элемента на экран R показывал пользователю минимальную информацию об этом элементе.
Поиск совпадающих значений
Пусть у нас есть вектор p и вектор q, и мы хотим выбрать совпадающие элементы – вывести на экран те элементы в векторе q, которые есть в p.
Или наоборот - несовпадающие элементы:
Может возникнуть вопрос: а нет ли более изящного способа находить общие элементы в векторах? Существуют же операции для множеств: пересечение, объединение, разность и другие…Да, в R можно работать с множествами. Например, у нас есть два множества, два вектора A и B:
Посмотрим на их пересечение (общие элементы A и B):
А теперь на объединение (все элементы A и B):
На разницу (все элементы A, которых нет в B):
Важно: Cтоит помнить, что множество – это вектор без повторяющихся значений. Если в интересующих нас векторах есть повторяющиеся значения, и для нас это имеет значение, то тут надо быть аккуратнее.
Сравним результаты двух операций: нахождения совпадающих элементов в двух векторах с помощью %in% и нахождения пересечения множеств с помощью intersect() .
Воспользуемся оператором %in% :
Воспользуемся функцией intersect() :
А как вообще выглядит множество в R? Как получить вектор без повторяющихся значений? Для этого есть функция unique() :
Векторы из повторяющихся значений
В R можно быстро составить вектор из повторяющихся значений. Например, три раза повторить “Repeat me”:
Или три раза повторить вектор с двумя значениями 0 и 1:
Пропущенные значения
Можно создавать векторы с пропущенными значениями (NAs, от “not applicable”):
Обратите внимание: NA указывается без кавычек! Это не текст, который кодирует пропущенные значения, а особый “вид” данных (наличие NA не изменяет тип переменной, то есть, если NA встречаются в числовой переменной, переменная будет восприниматься R как числовая).
Прочие вектора
Кроме того, если нужны векторы особого вида (например, набор букв алфавита или названий месяцев), можно взять уже встроенные в R:
Последовательности
Для создания векторов можно использовать последовательности (для владеющих Python: аналог range() и arange() , но в отличие от Python, здесь в вектор включаются оба конца). Например, последовательность из целых значений от 0 до 10:
Читайте также:
- Как установить sccm клиент на пользовательском компьютере
- Как восстановить предыдущую версию файла libreoffice
- Vga tools easy boost что это
- Переместить рисунки в отдельный каталог pictures а звуковые файлы в каталог sounds
- R studio удаленное подключение