Типы данных в R с примером
⚡ Умное резюме
Типы данных в R определяют способ хранения значений в памяти, а операторы определяют, что R может с ними делать. Здесь рассматриваются векторы, переменные, арифметические, реляционные, логические операторы и операторы присваивания с примерами, которые можно запустить.

Каковы типы данных в R?
Ниже приведены типы данных или структуры данных в программировании на R:
- Скаляры
- Векторы (числовые, символьные, логические)
- Матрицы
- Фреймы данных
- Списки
Этот список объединяет две взаимосвязанные идеи, и их разделение облегчает восприятие остальной части страницы. тип данных Описывает, что представляет собой отдельное значение — число, фрагмент текста, TRUE или FALSE. структура данных Описывает, сколько значений хранится вместе и в какой форме. Скаляры, векторы, матрицы, фреймы данных и списки — это структуры; значения внутри них по-прежнему относятся к одному из базовых типов R.
| Структура: | Габаритные размеры: | Разрешены ли смешанные виды? | Типичное использование |
|---|---|---|---|
| скаляр | Вектор длиной 1 | Нет | Единичное измерение или флаг |
| вектор | 1 | Нет | Колонка материалов для чтения одного типа. |
| матрица | 2 | Нет | Численные сетки и линейная алгебра |
| Фрейм данных | 2 | Да, один тип на столбец. | Табличные наборы данных |
| Список | 1, но вложенный | Да, всё, что угодно для каждого элемента. | Результаты моделирования и смешанные контейнеры |
В R нет отдельного типа данных для скаляров: скаляр — это просто вектор длиной в единицу, поэтому так много кода в R пишется сразу для целых векторов.
Основные типы данных в R
Каждое значение в R принадлежит одному из небольшого набора основных (атомарных) типов:
- 4.5 — это десятичное число, называемое числовым значением.
- Число 4 выглядит как целое, но в R оно по-прежнему хранится как число с плавающей запятой типа double. Пишите 4L, когда требуется истинное целое число.
- TRUE или FALSE — это логическое значение, которое в R называется логическим значением.
- Значение внутри кавычек или пробелов — это текст (строка). Эти значения называются символами.
Набор дополняют еще два типа. Комплексные значения, такие как 3+2i, содержат действительную и мнимую части, а необработанные значения — байты. Оба типа редко встречаются в повседневном анализе, но они перечислены в базовом языке R. документация по функции typeof() наряду с четырьмя распространенными типами.
| Тип | Пример значения | class() возвращает | typeof() возвращает |
|---|---|---|---|
| логический | ИСТИНА | логический | логический |
| Целое | 4L | целое | целое |
| Double (числовой) | 4.5 | числовой | двойной |
| Характер | "R — это фантастика!" | персонаж | персонаж |
| Комплекс | 3 + 2i | комплекс | комплекс |
| Сырье | as.raw (10) | сырье | сырье |
Мы можем проверить тип переменной с помощью функции класса.
Пример 1: Проверка числовой переменной
# Declare variables of different types # Numeric x <- 28 class(x)
Выход:
## [1] "numeric"
Пример 2: Проверка символьной переменной
# String y <- "R is Fantastic" class(y)
Выход:
## [1] "character"
Пример 3: Проверка логической переменной
# Boolean z <- TRUE class(z)
Выход:
## [1] "logical"
Обратите внимание, что функция class() возвращает "numeric" для числа 28, хотя у числа 28 нет десятичной части. В R оно хранится как число с плавающей запятой типа double, и только функция typeof() это показывает. Следующее важное различие, которое стоит изучить, — это способ присвоения этим значениям имен.
Переменные в R
Переменные — это один из основных строительных блоков в R, хранящих значения, и они важны для любого, кто занимается анализом данных. Переменная в R может хранить число, объект, статистический результат, вектор, набор данных или предсказание модели — по сути, всё, что выдаёт R. Мы можем использовать эту переменную позже, просто указав её имя.
Чтобы объявить переменную в R, необходимо присвоить ей имя. Имя не должно содержать пробелов. Для соединения двух слов можно использовать символ подчеркивания (_).
Имена могут содержать буквы, цифры, точки и подчеркивания, но они должны начинаться с буквы или точки, а зарезервированные слова, такие как TRUE, FALSE и NULL, не могут использоваться в качестве имен. Для добавления значения к переменной используйте <- или =.
Вот синтаксис:
# First way to declare a variable: use the `<-` name_of_variable <- value # Second way to declare a variable: use the `=` name_of_variable = value
В командной строке мы можем написать следующие коды, чтобы увидеть, что произойдет:
Пример 1: Присвоить значение и вывести его на экран.
# Print variable x
x <- 42
x
Выход:
## [1] 42
Пример 2: Объявление второй переменной
y <- 10 y
Выход:
## [1] 10
Пример 3: Использование двух переменных в одном выражении
# We call x and y and apply a subtraction
x-y
Выход:
## [1] 32
Переменная, которая хранит несколько значений одного типа, называется вектором, и именно такую структуру ожидает практически каждая функция R.
Векторы в R
Вектор — это одномерная совокупность, в которой каждый элемент имеет один и тот же тип. Мы можем создать вектор, используя все основные типы данных R, изученные ранее. Самый простой способ создать вектор в R — использовать функцию c().
Пример 1: Создание числового вектора
# Numerical
vec_num <- c(1, 10, 49)
vec_num
Выход:
## [1] 1 10 49
Пример 2: Создание символьного вектора
# Character vec_chr <- c("a", "b", "c") vec_chr
Выход:
## [1] "a" "b" "c"
Пример 3: Создание логического вектора
# Boolean vec_bool <- c(TRUE, FALSE, TRUE) vec_bool
Выход:
##[1] TRUE FALSE TRUE
Если функция c() принимает смесь типов, она не выдаёт ошибку. Она незаметно преобразует каждый элемент в наиболее общий из присутствующих типов, так что c(1, "a", TRUE) становится символьным вектором. Мы также можем выполнять арифметические вычисления над векторами в R.
Пример 4: Сложение двух векторов поэлементно.
# Create the vectors vect_1 <- c(1, 3, 5) vect_2 <- c(2, 4, 6) # Take the sum of A_vector and B_vector sum_vect <- vect_1 + vect_2 # Print out total_vector sum_vect
Выход:
[1] 3 7 11
Сложение выполнялось поэлементно, поскольку оба вектора имеют одинаковую длину. Когда длины различаются, R использует более короткий вектор, повторяя его до тех пор, пока он не совпадет с более длинным, и выдает предупреждение только в том случае, если большая длина не кратна меньшей.
Пример 5: Разделите первые пять элементов на части.
В R можно разделить вектор на фрагменты. В некоторых случаях нас интересуют только первые пять элементов вектора. Для этого можно использовать команду [1:5].tracприсвойте значениям от 1 до 5.
# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]
Выход:
## [1] 1 2 3 4 5
Пример 6: Создание диапазона с помощью двоеточия Operaтор
Самый короткий способ создать диапазон значений — использовать оператор двоеточия (:) между двумя числами. Например, из приведенного выше примера мы можем написать c(1:10), чтобы создать вектор значений от одного до десяти.
# Faster way to create adjacent values
c(1:10)
Выход:
## [1] 1 2 3 4 5 6 7 8 9 10
Поскольку тип вектора незаметно меняется при смешивании, полезно знать, как проверять и преобразовывать типы по запросу.
Как проверить и преобразовать типы данных в R
Три семейства функций отвечают на три постоянно возникающих вопроса: что это такое, является ли это заданным типом и может ли это стать другим типом.
| семейство функций | Вопрос, на который он отвечает | Примеры |
|---|---|---|
| class(), typeof(), mode() | К какому типу относится это значение? | class(28), typeof(28), mode(28) |
| является.*() | Это значение типа X? | is.numeric(), is.character(), is.logical() |
| как.*() | Может ли это значение стать типом X? | as.numeric(), as.character(), as.integer() |
| str () | Как в целом выглядит этот объект? | str(vec_num) |
# Three different views of the same value x <- 28 class(x) # "numeric" -- the class used for method dispatch typeof(x) # "double" -- how R stores the value internally mode(x) # "numeric" -- the older S-style mode # Ask a yes/no question about a type is.numeric(x) # TRUE is.character(x) # FALSE # Convert between types as.character(x) # "28" as.integer("28") # 28 stored as an integer as.numeric("abc") # NA, with a coercion warning
Большинство неожиданностей здесь объясняются двумя правилами. Во-первых, class() сообщает класс, используемый для диспетчеризации методов, а typeof() сообщает внутреннее хранилище, поэтому 28 для одного является "числовым" типом, а для другого - "типом с плавающей запятой". Во-вторых, преобразование, которое не может быть успешным, не останавливает скрипт: as.numeric("abc") возвращает NA и выводит предупреждение о приведении типов, поэтому скрытые значения NA после импорта почти всегда указывают на проблему с типом. Та же логика лежит в основе... факторы, которые хранят категории в виде целочисленных кодов плюс таблица уровней.
После определения типов, следующим шагом будет подбор операторов, которые будут с ними работать.
R Арифметика OperaTORs
Сначала мы рассмотрим основные арифметические операторы в R. Ниже приведены арифметические операторы в языке программирования R и их значения:
| оператор | Описание |
|---|---|
| + | Дополнение |
| – | нижеtracпроизводство |
| * | Умножение |
| / | Разделение |
| ^ или ** | Возведение |
| %% | По модулю (остаток после деления) |
| %/% | Деление целых чисел (частное, остаток отбрасывается) |
Каждый из этих операторов векторизован, поэтому одно и то же выражение работает как с одним значением, так и со всем столбцом.
Пример 1: Дополнение
# An addition
3 + 4
Выход:
## [1] 7
Вы можете легко скопировать и вставить приведенный выше код R в... RStudio Консоль. В этой статье вывод отображается на строках, начинающихся с ##. Например, если мы напишем код print("Guru99") консоль выводит [1] "Guru99", что на этой странице будет отображаться как ## [1] "Guru99».
Символ ## обозначает строку выводимого текста, а число в квадратных скобках ([1]) — это индекс первого значения в этой строке, а не часть результата.
Предложения, начинающиеся с #, являются комментариями. Мы можем использовать # внутри скрипта R для добавления любых заметок, и R игнорирует их во время выполнения.
Пример 2: Умножение
# A multiplication
3*5
Выход:
## [1] 15
Пример 3: Разделение
# A division
(5+5)/2
Выход:
## [1] 5
Пример 4: Возведение в степень
# Exponentiation
2^5
Выход:
## [1] 32
Пример 5: Модуль
# Modulo
28%%6
Выход:
## [1] 4
Арифметические операции выдают числа. Следующая группа операторов вместо этого выдает значения TRUE и FALSE.
R Реляционная (сравнительная) OperaTORs
Операторы сравнения сравнивают два значения и возвращают логический результат. Именно они формируют условия, используемые для фильтрации, и векторизуются точно так же, как и арифметические операторы.
| оператор | Описание |
|---|---|
| > | Больше |
| < | Less чем |
| >= | Больше или равно |
| <= | Less чем или равно |
| == | В точности равно |
| != | Не равно |
a <- 10 b <- 3 a > b # TRUE a < b # FALSE a >= 10 # TRUE a <= 3 # FALSE a == b # FALSE a != b # TRUE # Relational operators are vectorised scores <- c(45, 78, 90, 62) scores >= 60 # FALSE TRUE TRUE TRUE
Здесь экономят время две привычки. Используйте оператор == для сравнения и оператор <- для присваивания, поскольку одиночный знак = внутри условия — распространённая ошибка новичков. И избегайте использования оператора == для чисел с плавающей запятой: округление чисел с плавающей запятой означает, что 0.1 + 0.2 == 0.3 — это FALSE, поэтому проверка isTRUE(all.equal(0.1 + 0.2, 0.3)) является безопасной. Сравнения по отсортированные фреймы данных следуйте тем же правилам.
R Логический OperaTORs
С помощью логических операторов мы хотим возвращать значения внутри вектора на основе логических условий. В таблице ниже перечислены логические операторы, доступные в R.
Логические операторы в R заключаются в квадратные скобки []. Мы можем добавить столько условных операторов, сколько захотим, но их необходимо заключать в скобки. Для создания условного оператора можно использовать следующую структуру:
variable_name[(conditional_statement)]
Используя переменную `variable_name` в качестве имени переменной, которую мы хотим использовать в операторе, мы создаём логическое выражение, например, `variable_name > 0`. Наконец, мы используем квадратные скобки для завершения логического выражения. Ниже приведён пример логического выражения.
Пример 1: Сравните каждый элемент вектора
# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5
Выход:
## [1]FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
В приведенном выше выводе R считывает каждое значение и сравнивает его с утверждением logical_vector>5. Если значение строго больше пяти, то условие истинно, в противном случае — ложно. R возвращает вектор значений TRUE и FALSE.
Пример 2: Оставьте только те элементы, которые соответствуют условию.
В приведенном ниже примере мы хотим показатьtracДля этого мы можем заключить условие «строго больше пяти» в квадратные скобки, перед которыми будет указан вектор, содержащий эти значения.
# Print value strictly above 5
logical_vector[(logical_vector>5)]
Выход:
## [1] 6 7 8 9 10
Пример 3: Объединение двух условий
# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]
Выход:
## [1] 5 6
В примере 3 намеренно используется одинарный амперсанд &. Односимвольные операторы & и | сравнивают векторы поэлементно и возвращают вектор, что и требуется для подмножества. Двойные формы && и || возвращают одно значение и относятся к условиям if() и while(). Поскольку R 4.3.0Передача аргумента, содержащего более одного элемента, в функции && или || приводит к ошибке, а не к предупреждению, поэтому эти два семейства функций больше не взаимозаменяемы. Оператор ! отрицает условие, а xor() возвращает исключающее ИЛИ.
Задание на языке R OperaTORs
Операторы присваивания связывают значение с именем. В R их больше, чем в большинстве языков программирования, и эти различия имеют значение, когда код переходит в другую плоскость. Функции.
| оператор | Описание |
|---|---|
| <- | Левое назначение — идиоматический выбор в R. |
| = | Присваивание слева, но обычно используется для аргументов функций. |
| -> | Правильное назначение, допустимое, но редко используемое. |
| << - | Суперзадание, осуществляющее поиск в замкнутых пространствах. |
| - >> | Правильное суперназначение |
# Left assignment -- the idiomatic form count <- 5 # Equals sign: works, but reserve it for function arguments count = 5 round(3.14159, digits = 2) # Right assignment 5 -> count # Superassignment, used inside functions to reach an outer scope count <<- 5
В руководствах по стилю рекомендуется использовать операторы <- для создания объектов и = для именования аргументов внутри вызова функции, поскольку в этом случае эти две роли визуально различаются. Используйте <<- экономно: он изменяет объект вне текущей функции и затрудняет понимание кода. После того, как вы освоите присваивание и типы, следующие шаги будут следующими: импорт реальных данных и решаping это с дплир; Обзор языка R Это позволяет взглянуть на весь набор инструментов в контексте.

