Типы данных в R с примером

⚡ Умное резюме

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

  • 🔘 AtomТипы микросхем: В R каждое значение хранится в виде логического значения, целого числа, числа с плавающей запятой, комплексного числа, символа или необработанного значения.
  • ☑️ Проверка типов: Функции class(), typeof() и mode() описывают значение с трех разных точек зрения.
  • векторы: Функция c() создает одномерную коллекцию, в которой каждый элемент имеет один и тот же тип.
  • 🧪 OperaТорс: Арифметические, реляционные, логические операторы и операторы присваивания охватывают практически все базовые выражения R.
  • 🇧🇷 Выбор подмножества: Квадратные скобки, объединенные с логическим условием, фильтруют векторные элементы в одну строку.
  • ⚠️ Примечание к версии: В версии R 4.3.0 аргумент && или ||, длина которого превышает единицу, превращался в ошибку.

Типы данных в 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 с указанием их значений.

Логические операторы в 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 Это позволяет взглянуть на весь набор инструментов в контексте.

Часто задаваемые вопросы (FAQ)

Вектор содержит элементы только одного типа, а смешение типов приводит к приведению типов к определенному типу. Список содержит что угодно в каждом ячейке, включая другие списки, фреймы данных или функции, поэтому объекты модели являются списками.

Когда два вектора разной длины встречаются с оператором, R повторяет более короткий вектор до тех пор, пока длины не совпадут. c(1,2,3,4) + c(1,2) дает 2 4 4 6. Предупреждение появляется только в том случае, если большая длина не является кратной.

NA обозначает пропущенное значение в векторе. NULL обозначает отсутствие объекта и имеет нулевую длину. NaN — это неопределенный числовой результат, например, 0/0. Inf — это деление на ноль, например, 1/0.

Оператор %in% проверяет принадлежность и возвращает TRUE для каждого левого элемента, найденного в правом векторе. c(2,7) %in% c(1,2,3) возвращает TRUE FALSE. Он заменяет длинные цепочки сравнений ==, соединенных оператором |.

Выбрать матрица для числовых сеток и линейной алгебры, фрейм данных для таблиц, столбцы которых различаются по типу, и а список когда элементы имеют разную форму.

Введенная в R 4.1.0, директива |> передает значение слева от себя в первый аргумент функции справа. Она объединяет шаги без вложенных вызовов и не требует пакета, в отличие от конвейера magrittr %>%.

Искусственный интеллект выявляет несоответствия типов, предлагает преобразования as.* и создает черновой код перекодирования на основе выборки строк. Он также предлагает этапы проектирования признаков перед выполнением операции. машинного обучения или Модель построена. Всегда проверяйте сгенерированный код на соответствие вашим данным.

Да. RStudio 2023.09.0 и более поздние версии поставляются с этой программой. Второй пилот GitHub Интеграция, позволяющая автодополнять выражения R непосредственно в коде. Требуется подписка на Copilot, и администраторы должны включить её на RStudio Server или Posit Workbench.

Подведем итог этой публикации следующим образом: