Типи даних у R із прикладом

⚡ Розумний підсумок

Типи даних у R визначають, як значення зберігаються в пам'яті, а оператори вирішують, що R може з ними робити. Тут розглядаються вектори, змінні, арифметичні, реляційні, логічні оператори та оператори присвоєння з прикладами, що їх можна виконати.

  • 🔘 Atomтипи інтегральних схем: R зберігає кожне значення як логічне, ціле, число типу double, комплексне, символьне або необроблене.
  • ☑️ Перевірка типів: 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() поряд із чотирма поширеними типами.

тип Приклад значення клас() повертає повертає функцію 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 з їхніми значеннями

Логічні оператори в 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 розміщує весь ланцюжок інструментів у контексті.

Поширені запитання

Вектор містить елементи лише одного типу, а змішування типів призводить до приведення. Список містить будь-що в кожному слоті, включаючи інші списки, фрейми даних або функції, тому об'єкти моделі є списками.

Коли два вектори різної довжини зустрічаються з оператором, 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. Він замінює довгі ланцюжки порівнянь ==, об'єднані за допомогою |.

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

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

Помічники штучного інтелекту позначають невідповідності типів, пропонують перетворення as.* та створюють чернетки коду перекодування на основі вибірки рядків. Вони також пропонують кроки розробки функцій перед навчання за допомогою машини модель підходить. Завжди перевіряйте згенерований код на відповідність вашим даним.

Так. RStudio 2023.09.0 та пізніші версії постачаються Копілот GitHub інтеграція, яка безпосередньо завершує вирази R. Потрібна підписка на Copilot, і адміністратори повинні ввімкнути її на RStudio Server або Posit Workbench.

Підсумуйте цей пост за допомогою: