[1] "some text"
8 Базові типи даних R
8.1 Типізація в R
Усі мови програмування мають власну типізацію даних з якими працюють. Тип даних - це набір властивостей певних об’єктів та операцій, що можна з ними виконувати. Так, наприклад, з цілими числами можна виконувати арифметичні операції додавання, віднімання та інші. Набори символів (простими словами текст) зазвичай можуть використовуватися для пошуку у них елементів, редагування (шляхом видалення частини існуючого або додавання нового тексту), склеювання та розділення на частини.
У R, на відміну від строго типізованих мов програмування, тип даних визначається на основі поточного значення елемента і може змінюватися у процесі виконання.
Розгялнемо приклад коду з мови програмування C# (мова родом із C/Java):
Подібний код у C# передбачає створення нової змінної a типу int (integer - ціле число), а потім відбувається присвоєння для a текстового фрагмента (тип string у С#). Такий код не буде запущено і виникне помилка компіляції.
Розглянемо приклад коду з R:
Такий код виконається і на консоль буде виведено some text, адже у 1 першому рядку було присвоєно ціле число, у другому - текст. Таким чином R має динамічну типізацію, що дозволяє у ту ж саму змінну записати значення різних типів. Проте варто пам’ятати, що попереднє значення буде втрачено.
До базових типів даних у R варто віднести:
- Числа з дробовою частиною (
decimal numbers), як наприклад,4.0,15.214, що називаютьсяnumeric(s). - Натуральні числа (
natural numbers), як наприклад,4,15, що називаютьсяinteger(s). - Логічні значення (
boolean values), тобтоTRUEтаFALSE(які також можна скорочено записуватиTтаF), що називаютьсяlogical. - Текст або рядки (
string values), як наприклад,"Hello","12 is number", що називаютьсяcharacter(s).
Оголосимо для прикладу три змінні: my_numeric - число, my_character - текст, my_logical - логічне значення.
Замінимо значення my_character <- "5" та спробуємо знайти суму значень:
У результаті виклання даного коду ми отримаємо помилку, адже значення 5 та "5" є елементами різних типів даних, перевіримо типи за допомогю функції class():
Виконання коду class(5) показує нам, що 5є значенням числового типу даних numeric, а class("5") відповідає тексту character, тому арифметична операція додавання між цими значеннями неможлива.
8.2 Перевірка та приведення типів даних
У випадку коли тип даних потрібно визначити у процесі виконання програми/коду та перетворити значення використовується приведння типів даних.
Приведення типів даних - операція перетворення значення з одного типу даних в інший. Важливо памятати, що не завжди приведення типів даних може бути здійснено. Так, наприклад, значення "5" (character) можна досить просто привести до 5 (numeric), проте "five" не буде зрозумілим для інтерпритатора.
Для перевірки належності елемента до певного типу даних використовують спеціальну функцію is.назва_типу(значення). Ця функція повертає TRUE, якщо елемент належить даному типу і FALSE, якщо не належить.
Розглянемо приклад:
[1] TRUE
[1] FALSE
Для перетворення типу даних можна скористатися функцією as.назва_типу(значення). У результаті виконання функції буде повернуто значення потрібного типу або пусте значення NA, якщо таке приведення не є можливим:
[1] 10
Warning: NAs introduced by coercion
[1] NA
Результат виконання функцій можна записувати у змінні і використовувати у наступних обчисленнях:
Повний перелік типів та методів перевірки і приведення їх типів ображений нижче:
| Назва типу | Метод перевірки типу | Метод приведення типу |
|---|---|---|
| Array | is.array() | as.array() |
| Character | is.character() | as.character() |
| Complex | is.complex() | as.complex() |
| Dataframe | is.data.frame() | as.data.frame() |
| Double | is.double() | as.double() |
| Factor | is.factor() | as.factor() |
| List | is.list() | as.list() |
| Logical | is.logical() | as.logical() |
| Matrix | is.matrix() | as.matrix() |
| Numeric | is.numeric() | as.numeric() |
| Raw | is.raw() | as.raw() |
| Time series (ts) | is.ts() | as.ts() |
| Vector | is.vector() | as.vector() |
8.3 Приклади розв’язання завдань
Завдання 1. Сума введених чисел
Знайти суму введених з клавіатури чисел. Для введення інформації скористатися функцією readline(prompt = "Text").
Розв’язання:
Результат виконання: