Date Редакция Категория comp Теги R

Основным типом данных в 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

Элементы списка выбираются тремя различными методами:

  1. с помощью квадратных скобок []. Полученный в результате объект тоже будет списком, даже если он окажется единичной длины;
  2. с помощью двойных квадратных скобок [[]]. Возвращенный объект будет того же типа, каким он был до включения в список;
  3. можно использовать имена элементов списка. Для выбора по имени используется знак доллара $.
> 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