Типове данни в 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() връща |
|---|---|---|---|
| логичен | TRUE | логически | логически |
| цяло число | 4L | цяло число | цяло число |
| Double (числово) | 4.5 | цифров | удвои |
| Характер | „R е фантастичен“ | характер | характер |
| Комплекс | 3+2i | комплекс | комплекс |
| Суров | като.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: Изграждане на диапазон с двоеточие OperaTor
Най-краткият начин за създаване на диапазон от стойности е чрез използване на оператора двоеточие (:) между две числа. Например, от горния пример можем да напишем 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() | Как изглежда този обект като цяло? | 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 е „числово“ за единия и „double“ за другия. Второ, преобразуване, което не може да бъде успешно, не спира скрипта: as.numeric("abc") връща NA и отпечатва предупреждение за преобразуване, така че безшумните NA след импортиране почти винаги са проблем с типа. Същата логика ги движи. фактори, които съхраняват категориите като целочислени кодове плюс таблица с нива.
След като типовете са определени, следват операторите, които действат върху тях.
R Аритметика Operaтори
Първо ще разгледаме основните аритметични оператори в R. Следват аритметичните оператори в програмирането на R и какво означават те:
| OperaTor | Descriptйон |
|---|---|
| + | Допълнение |
| - | Под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тори
Релационните оператори сравняват две стойности и връщат логически резултат. Те са операторите, които изграждат условията, използвани за филтриране, и се векторизират по абсолютно същия начин като аритметичните оператори.
| OperaTor | Descriptйон |
|---|---|
| > | По-велик от |
| < | 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 Логично Operaтори
С логическите оператори искаме да върнем стойности във вектора въз основа на логически условия. Таблицата по-долу изброява логическите оператори, налични в R.
Логическите оператори в R са обвити в [. Можем да добавим колкото желаем условни оператори, но трябва да ги включим в скоби. Можем да следваме тази структура, за да създадем условен оператор:
variable_name[(conditional_statement)]
Като име_на_променлива (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: Запазване само на съвпадащите елементи
В примера по-долу искаме да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 Operaтори
Операторите за присвояване свързват стойност с име. R предлага повече от тях от повечето езици за програмиране и разликите стават важни, след като кодът премине в... функции.
| OperaTor | Descriptйон |
|---|---|
| <- | Ляво присвояване, идиоматичният избор в 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 поставя цялата верига от инструменти в контекст.

