Тип данных — это класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены. С помощью типов данных мы можем представлять привычные нам сущности, такие как числа, строки и т.д. В языке R существует 5 базовых типов данных:
Название | Тип данных |
---|---|
complex |
комплексные числа |
character |
строки |
integer |
целые числа |
logical |
логические (булевы) |
numeric |
числа с плавающей точкой |
Числа — основной тип данных в R. К ним относятся числа c плавающей точкой и целые числа.
Сложение и вычитание:
2 + 3## [1] 52 - 3## [1] -1
Умножение и деление:
2 * 3## [1] 65 / 3## [1] 1.666667
Целочисленное деление %/%
:
5 %/% 3## [1] 1
Остаток от деления %%
:
5 %% 3## [1] 2
Возведение в степень:
2 ^ 3## [1] 82 ** 3## [1] 8
Как правило, в настоящих программах числа в явном виде встречаются лишь иногда. Поскольку одно и то же число может выполнять разные функции в разных выражениях, в программе вводят переменные и присваивают им значения с помощью оператора <-
либо =
:
a <- 5b = 3
Чтобы вывести значение переменной на экран, достаточно просто ввести его:
a## [1] 5b## [1] 3
Мы можем выполнить над переменными все те же операции что и над константами:
a + b## [1] 8
Новую переменную можно создать на основе значений существующих переменных и констант:
d = be = a + df = e + 2.5d## [1] 3e## [1] 8f## [1] 10.5
Противоположное по знаку число получается добавлением унарного оператора -
перед константой или переменной:
f = -2f## [1] -2f = -ef## [1] -8
Операция взятия остатка от деления бывает полезной, например, когда мы хотим выяснить, является число четным или нет:
d %% 2## [1] 1e %% 2## [1] 0
В качестве аргумента функции можно использовать переменную, константу, а также выражения:
sqrt(a)## [1] 2.236068tan(1.5)## [1] 14.10142abs(a + b - 2.5)## [1] 5.5
Вы также можете легко вкладывать функции одна в одну, и записывать результат в переменную:
b = sqrt(sin(a) + 2)b## [1] 1.020331
Строки состоят из символов. Чтобы создать строковую переменную, необходимо заключить текст строки в кавычки:
s = "В историю трудно войти, но легко вляпаться (М.Жванецкий)"s## [1] "В историю трудно войти, но легко вляпаться (М.Жванецкий)"
Длину строки в символах можно узнать с помощью функции nchar()
nchar(s)## [1] 56
Конкатенация — сцепление строк — выполняется с помощью функции paste()
:
s1 = "В историю трудно войти,"s2 = "но легко вляпаться"s3 = "(М.Жванецкий)"paste(s1, s2, s3)## [1] "В историю трудно войти, но легко вляпаться (М.Жванецкий)"
Конкатенировать можно не только строки, но и числа:
year = 1950pop = 1850s1 = "Максимальная численность населения в Детройте пришлась на"s2 = "год и составила"s3 = "тыс. чел"paste(s1, year, s2, pop, s3)## [1] "Максимальная численность населения в Детройте пришлась на 1950 год и составила 1850 тыс. чел"
Для создания даты используется функция as.Date()
. В качестве аргумента функции необходимо задать дату, записанную в виде строки:
birth = as.Date('1986/02/18')birth## [1] "1986-02-18"
Сегодняшнюю дату вы можете узнать с помощью специальной функции Sys.Date()
:
current = Sys.Date()current## [1] "2024-09-03"
Вычитание дат дает интервал во времени:
current - birth## Time difference of 14077 days
Сложение даты и интервала дает новую дату:
current + 40## [1] "2024-10-13"
Логические переменные возникают там, где нужно проверить условие. Переменная логического типа может принимать значение TRUE
(истина) или FALSE
(ложь). Для их обозначения также возможны более компактные константы T
и F
соответственно.
Следующие операторы приводят к возникновению логических переменных:
==
) --- проверка равенства операндов!=
) --- проверка неравенства операндов<
) --- первый аргумент меньше второго<=
) --- первый аргумент меньше или равен второму>
) --- первый аргумент больше второго>=
) --- первый аргумент больше или равен второмуПример логических операций:
a = 1b = 2a == b## [1] FALSEa != b## [1] TRUEa > b## [1] FALSEa < b## [1] TRUE
Если необходимо проверить несколько условий одновременно, их можно комбинировать с помощью логических операторов. Наиболее популярные среди них:
&&
) - проверка истинности обоих условий ||
) - проверка истинности хотя бы одного из условий!
) - отрицание операнда (истина меняется на ложь, ложь на истину)c=3(b>a) && (c>b)## [1] TRUE(a>b) && (c>b)## [1] FALSE(a>b) || (c>b)## [1] TRUE!(a>b)## [1] TRUE
Определение типа данных осуществляется с помощью функции class()
:
class(1)## [1] "numeric"class(0.5)## [1] "numeric"class(1 + 2i)## [1] "complex"class("sample")## [1] "character"class(TRUE)## [1] "logical"class(as.Date('1986-02-18'))## [1] "Date"
Преобразование типов данных осуществляется с помощью функций семейства as(d, type)
, где d
— это входная переменная, а type
— название типа данных, к которому эти данные надо преобразовать (см. таблицу в начале главы). Несколько примеров:
k = 1m = as(k, "character")m## [1] "1"class(m)## [1] "character"n = as(m, "numeric")n## [1] 1class(n)## [1] "numeric"
Для функции as()
существуют обертки (wrappers), которые позволяют записывать такие преобразования более компактно и выглядят как as.<datatype>(d)
, где datatype
--- название типа данных:
m = as.character(k)m## [1] "1"class(m)## [1] "character"n = as.numeric(m)n## [1] 1class(n)## [1] "numeric"d = as.Date('1986-02-18')d## [1] "1986-02-18"class(d)## [1] "Date"
Если преобразовать число c плавающей точкой до целого, то дробная часть будет отброшена:
as.integer(2.7)## [1] 2
После преобразования типа данных к переменной будут применимы только те функции, которые определены для данного типа данных:
a = 2.5b = as.character(a)b + 2## Error in b + 2: non-numeric argument to binary operatornchar(b)## [1] 3
Для проверки типа данных можно использовать функции семейства is.<datatype>
:
is.integer(2.7)## [1] FALSEis.numeric(2.7)## [1] TRUEis.character('Привет!')## [1] TRUE
Особое значение имеют функции проверки пустых переменных (имеющих значение NA
- not available), которые могут получаться в результате несовместимых преобразований или пропусков в данных:
as.integer('Привет!')## [1] NA
Для ввода данных через консоль можно воспользоваться функцией readline()
, которая будет ожидать пользовательский ввод и нажатие клавиши Enter, после чего вернет введенные данные в виде строки.
Предположим, пользователь вызывает эту функцию и вводит с клавиатуры 1024
:
a = readline()
Выведем результат на экран:
a## [1] "1024"
Функция readline()
всегда возвращает строку, поэтому если вы ожидаете ввод числа, полученное значение необходимо явным образом преобразовать к числовому типу
Для вывода данных в консоль можно воспользоваться тремя способами:
Source
)print()
cat()
()
Функция print()
работает точно так же, как и просто название переменной с новой строки, отличаясь лишь двумя особенностями:
print()
явным образом говорит о том, что вы хотите вывести в консоль некую информациюprint()
работает при любых методах запуска программы, в том числе методом Source
.a = 1024a## [1] 1024print(a)## [1] 1024b = "Fourty winks in progress"b## [1] "Fourty winks in progress"print(b)## [1] "Fourty winks in progress"print(paste("2 в степени 10 равно", 2^10))## [1] "2 в степени 10 равно 1024"print(paste("Сегодняшняя дата - ", Sys.Date()))## [1] "Сегодняшняя дата - 2024-09-03"
Функция cat()
отличается от print()
следующими особенностями:
cat()
выводит значение переменной, и не печатает ее измерения и внешние атрибуты.cat()
принимает множество аргументов и может осуществлять конкатенацию строк аналогично функции paste()
cat()
не возвращает никакого значений, в то время как print()
возвращает значение, переданное ей в качестве аргумента.cat()
можно использовать только для атомарных типов данных. Для классов (таких как Date) она будет выводит содержимое объекта, которое может не совпадать с тем, что пользователь ожидает вывести cat(b)## Fourty winks in progresscat("2 в степени 10 равно", 2^10)## 2 в степени 10 равно 1024cat("Сегодняшнаяя дата -", Sys.Date())## Сегодняшнаяя дата - 19969
Вывод с помощью круглых скобок позволяет выводить результат выполнения выражения:
(a = rnorm(1)) # сгенерируем случайное число, запишем в переменную и выведем на экран## [1] -0.2802329(b = 2 * a) # переменная a доступна, ее можно использовать и далее для вычислений## [1] -0.5604657
Проверка условий позволяет осуществлять так называемое ветвление в программе. Ветвление означает, что при определенных условиях (значениях переменных) будет выполнен один программный код, а при других условиях — другой.
Для проверки условий используется условный оператор if --- else if --- else следующего вида:
if (condition) { statement1} else if (condition) { statement2} else { statement3}
Например, сгенерируем случайное число, округлим его до одного знака после запятой и проверим относительно нуля:
(a = round(rnorm(1), 1))## [1] -0.6if (a < 0){ cat('Получилось отрицательное число!')} else if (a > 0) { cat('Получилось положительное число!')} else { cat('Получился нуль!')}## Получилось отрицательное число!
Условия часто нужны для обработки пользовательского ввода:
cat('Введите широту вашей точки:')phi = as.numeric(readline())
Пользователь вводит 68
, мы оцениваем результат:
if (!is.na(phi)) { # проверяем, получилось ли преобразовать к числу if (abs(phi) >= 66.562 & abs(phi) <= 90) { # выполняем проверку на заполярность cat('Точка находится в Заполярье') } else { cat('Точка не находится в Заполярье') }} else { cat('Необходимо ввести число!') # оповещаем о некорректном вводе}## Точка находится в Заполярье
Оператор переключения (switch) является удобен, когда надо сделать выбор на основе конечного множества значений. Например, определим столицу Федерального округа по его названию:
name = "Приволжский"capital = switch(name, 'Центральный' = 'Москва', 'Северо-Западный' = 'Санкт-Петербург', 'Южный' = 'Ростов-на-Дону', 'Северо-Кавказский' = 'Пятигорск', 'Приволжский' = 'Нижний Новгород', 'Уральский' = 'Екатеринбург', 'Сибирский' = 'Новосибирск', 'Дальневосточный' = 'Хабаровск')print(capital)## [1] "Нижний Новгород"
Тип данных — это класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены. С помощью типов данных мы можем представлять привычные нам сущности, такие как числа, строки и т.д. В языке R существует 5 базовых типов данных:
Название | Тип данных |
---|---|
complex |
комплексные числа |
character |
строки |
integer |
целые числа |
logical |
логические (булевы) |
numeric |
числа с плавающей точкой |
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |