Основным типом данных в R является вектор. Вектор -- это последовательность элементов одного типа: числового (numeric), символьного (character) или логического (logical)
> x <- c(1.5, 6, 8.3, 9, 6, 6, 2e-4) # числовой вектор
> s <- c("s", "t", "r", "i", "n", "g", "another string") # символьный вектор
> b <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE) # логический вектор
x
-- это имя переменной, <-
-- функция присвоения, c()
-- функция создания вектора (от англ. "concatenate" -- собрать).
Элементы векторов нумеруются с единицы и выбираются при помощи функции-квадратной скобки (именно так -- квадратная скобка '['
-- это тоже функция)
> x[1]
[1] 1.5
Последовательности значений формируются при помощи двоеточия ':'
> v1 = 1:4
> v2 = -2:1
> -5:5
[1] -5 -4 -3 -2 -1 0 1 2 3 4 5
Из векторов в R строятся все остальные типы данных. Например, скаляр -- это вектор единичной длины.
> a = 3
> a[1]
[1] 3
> a[2]
[1] NA
Отрицательная индексация в векторах означает: показать все индексы за исключением отрицательного.
> v1
[1] 1 2 3 4
> v1[1:4]
[1] 1 2 3 4
> v1[-1]
[1] 2 3 4
Логическая индексация: показать элементы вектора, удовлетворяющие логическому условию (как в MATLAB-е).
> v1[v1>2]
[1] 3 4
Матрица (matrix) в R -- это специальный тип вектора, обладающий некоторыми добавочными свойствами: атрибутами, позволяющими интерпретировать его как совокупность строк и столбцов. Многомерные матрицы в R принято называть массивами (array).
> m1 = matrix(v1, nrow=2, ncol=2) # матрица 2х2
> m1
[,1] [,2]
[1,] 1 3
[2,] 2 4
> m2 = rbind(v1,v2) # объединение векторов по строкам
> m2
[,1] [,2] [,3] [,4]
v1 1 2 3 4
v2 -2 -1 0 1
> m3 = cbind(v1,v2) # объединение векторов по столбцам
> m3
v1 v2
[1,] 1 -2
[2,] 2 -1
[3,] 3 0
[4,] 4 1
Элементы матрицы выбираются так же, как и векторы, только используется несколько индексов
> m3[4,2]
v2
1
Кроме того у векторов, а значит и у матриц, может быть атрибут names
(имя), и тогда к элементу можно обратиться по имени, например
> m3[2,"v2"]
v2
-1
Данные различных типов в R могут хранится в списках (list) и таблицах (data frame). Cписки похожи на векторы, но могут содержать элементы любого типа. Таблицы хранят двумерные данных, но, в отличие от матриц, позволяют находится в разных колонках данным разных типов. По сути, таблица -- это список колонок.
> l = list(x,s,b)
> l
[[1]]
[1] 1.5000 6.0000 8.3000 9.0000 6.0000 6.0000 0.0002
[[2]]
[1] "s" "t" "r" "i" "n" "g" "another string"
[[3]]
[1] TRUE FALSE TRUE TRUE FALSE TRUE TRUE
Структуру данных, хранящихся в переменной, можно узнать с помощью функции
str()
. Например, для только что созданного списка, это:
> str(l)
List of 3
$ : num [1:7] 1.5 6 8.3 9 6 6 0.0002
$ : chr [1:7] "s" "t" "r" "i" ...
$ : logi [1:7] TRUE FALSE TRUE TRUE FALSE TRUE TRUE
Элементы списка выбираются тремя различными методами:
- с помощью квадратных скобок
[]
. Полученный в результате объект тоже будет списком, даже если он окажется единичной длины; - с помощью двойных квадратных скобок
[[]]
. Возвращенный объект будет того же типа, каким он был до включения в список; - можно использовать имена элементов списка. Для выбора по имени используется знак доллара
$
.
> l[1]
[[1]]
[1] 1.5000 6.0000 8.3000 9.0000 6.0000 6.0000 0.0002
> str(l[1])
List of 1
$ : num [1:7] 1.5 6 8.3 9 6 6 0.0002
> l[[1]]
[1] 1.5000 6.0000 8.3000 9.0000 6.0000 6.0000 0.0002
> str(l[[1]])
num [1:7] 1.5 6 8.3 9 6 6 0.0002
Имена элементам присваивают функцией names()
> names(l) <- c("numeric","character","logical")
> l["logical"]
$logical
[1] TRUE FALSE TRUE TRUE FALSE TRUE TRUE
> l$logical
[1] TRUE FALSE TRUE TRUE FALSE TRUE TRUE
Данные, которые мы рассматривали до сих пор -- числовые, строковые и логические -- можно так или иначе представить при помощи "обычных" чисел. Если этого сделать нельзя, то такие данные называют категориальными. Например, цвет светофора может принимать три значения: red, yellow, green, но эти значения нельзя складывать или применять к ним другие арифметические операции.
Для представления категориальных данных в R существуют факторы (factor). Например, для цвета светофора (lights
) можно создать фактор с тремя "уровнями" (levels):
> lights <- factor(c("red","yellow","green"))
> lights
[1] red yellow green
Levels: green red yellow
Комментарии
comments powered by Disqus