Типи даних у 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() поряд із чотирма поширеними типами.
| тип | Приклад значення | клас() повертає | повертає функцію typeof() |
|---|---|---|---|
| логічний | ІСТИНА | логічний | логічний |
| Ціле число | 4L | ціле | ціле |
| Double (числовий) | 4.5 | числовий | подвійний |
| Характер | «R – це чудово» | характер | характер |
| Комплекс | 3+2i | комплекс | комплекс |
| Сировина | як.сирець(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
Три сімейства функцій відповідають на три питання, які постійно виникають: що це таке, чи це даного типу, і чи може це стати іншим типом.
| Сімейство функцій | Питання, на яке воно відповідає | прикладів |
|---|---|---|
| клас(), тип(), режим() | Якого типу це значення? | клас(28), тип(28), режим(28) |
| є.*() | Чи це значення типу X? | є.числовим(), є.символьним(), є.логічним() |
| як.*() | Чи може це значення стати типу X? | як.числовий(), як.символ(), як.цілочисельний() |
| str () | Як цей об'єкт виглядає загалом? | рядок(номер_предмету) |
# 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 є "числовим" для одного та "double" для іншого. По-друге, перетворення, яке не може бути успішним, не зупиняє скрипт: as.numeric("abc") повертає NA та друкує попередження про приведення, тому мовчазні NA після імпорту майже завжди є проблемою типу. Та сама логіка керує цим. фактори, які зберігають категорії у вигляді цілочисельних кодів плюс таблицю рівнів.
Після визначення типів, наступним кроком є оператори, які з ними діють.
Р Арифметика Operaторс
Спочатку ми розглянемо основні арифметичні оператори в R. Нижче наведено арифметичні оператори в програмуванні на R та їх значення:
| Operaтор | Опис |
|---|---|
| + | Доповнення |
| - | нижче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 Реляційний (порівняння) Operaторс
Реляційні оператори порівнюють два значення та повертають логічний результат. Це оператори, які створюють умови, що використовуються для фільтрації, і вони векторизуються точно так само, як і арифметичні оператори.
| Operaтор | Опис |
|---|---|
| > | Більш чим |
| < | 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
Дві звички економлять тут час. Використовуйте == для порівняння та <- для присвоєння, оскільки одинарне = всередині умови є поширеною помилкою новачків. І уникайте == для чисел типу double: округлення з плаваючою комою означає, що 0.1 + 0.2 == 0.3 є ХИБНЕЮ, тому isTRUE(all.equal(0.1 + 0.2, 0.3)) є безпечною перевіркою. Порівняння на відсортовані кадри даних дотримуватися тих самих правил.
R Логічний Operaторс
За допомогою логічних операторів ми хочемо повертати значення всередині вектора на основі логічних умов. У таблиці нижче перелічені логічні оператори, доступні в 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. Якщо значення строго більше за п'ять, то умова має значення TRUE, інакше FALSE. R повертає вектор із TRUE та FALSE.
Приклад 2: Зберегти лише елементи, що збігаються
У наведеному нижче прикладі ми хочемо extracзначення, які відповідають лише умові «строго більше п'яти». Для цього ми можемо взяти умову в квадратні дужки, перед якими вказати вектор, що містить значення.
# 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 навмисно використовується одинарний амперсанд &. Односимвольні оператори & та | порівнюють вектори поелементно та повертають вектор, що саме потрібно для підмножини. Форми double && та || повертають одне значення та належать до умов if() та while(). Оскільки R 4.3.0, передача аргументу, довшого за один елемент, до && або || є помилкою, а не попередженням, тому ці дві родини більше не є взаємозамінними. Оператор ! заперечує умову, а xor() повертає виключне АБО.
Завдання R Operaторс
Оператори присвоєння прив'язують значення до імені. R пропонує їх більше, ніж більшість мов програмування, і відмінності стають важливими, коли код переходить до Функції.
| Operaтор | Опис |
|---|---|
| <- | Ліве присвоєння, ідіоматичний вибір в 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 це з dplyr; Огляд мови R розміщує весь ланцюжок інструментів у контексті.

