Арифметика и простые функции
ВR существуют много функций для управления данными. Самая простая из них c():
> c (1:5, seq (10, 11, 0.2))
[1] 1.0 2.0 3.0 4.0 5.0 10.0 10.2 10.4 10.6 10.8 11.0
Вектора могут управляться классическими арифметическими выражениями:
> x <-c (1,2,3,4)
> y <-c (1,1,1,1)
> z <-x + y
> z
[1] 2.0 3.0 4.0 5.0
С векторами различной длины также можно выполнять различные арифметические действия; в этом случае, самый короткий вектор будет использоваться в вычислениях несколько раз при этом длина длинного вектора должна быть кратна длине короткого вектора.
Например:
> x <-c (1,2,3,4)
> y <-c (1,2)
> z <-x+y
> z
[1] 2 4 4 6
> x <-c (1,2,3)
> y <-c (1,2)
> z <-x+y
Warning message:
longer object length
is not a multiple of shorter object length in: x + y (Предупреждающее сообщение:Объект большей длины не кратен объекту меньшей длины в: x + y)
> z
[1] 2 4 4
В этом случаеR выдает предупреждающее сообщение, а не ошибку. Таким образом, операция может быть выполнена.
Если мы хотим добавить (или умножить) одно и то же значение ко всем элементам вектора, то это можно сделать следующим образом:
> x <-c (1,2,3,4)
> а<-10
> z <-a*x
> z
[1] 10 20 30 40
Для создания выражений могут быть использованы следующие арифметические операторы:+,-, *,/, и ^ (для степеней), %% (x %% y - остаток от деления), и %/% (x % / % y для деления нацело (возвращает целую часть от деления)).
В выражении можно использовать также функции.
Некоторые из функций представлены в следующей таблице:
sum(x) | Сумма элементов объекта х |
prod(x) | Произведение элементов объекта х |
max(x) | Максимальное значение из объекта х |
min(x) | Минимальное значение из объекта х |
which.max(x) | Индекс максимального значения объекта х |
which.min(x) | Индекс минимального значения объекта х |
range(x) | Минимальное и максимальное значения объекта х |
length(x) | Число элементов в объекте х |
mean(x) | Среднее значение элементов объекта х |
median(x) | Медиана объекта х |
var(x) или cov(x) | Дисперсия элементов(рассчитанная на n-1); если х матрица или data.frame, то вычисляется дисперсионно-ковариационная матрица. |
cor(x) | Корреляция матрицы х. |
var(x,y) или cov(x) | Ковариация между х и у или между столбцами х и столбцами у, если х и у матрицы или data.frames |
cor(x,y) | Линейная корреляция между х и у или корреляционную матрицу, если они матрицы или data.frames |
Все эти функции возвращают единственное значение (вектор длины 1), кроме range() и var(), cov() и cor(), которые могут возвращать матрицу.
Следующие функции возвращают более сложные результаты:
round(x,n) | округляет элементы x до n знаков после запятой |
rev(x) | перестановка элементов x в обратном порядке |
sort(x) | сортирует элементы x в возрастающем порядке; сортировать в убывающем порядке rev(sort(x)) |
rank(x) | выдает классы элементов x |
log(x,base) | вычисляет логарифм x с основным base |
pmin(x,y,...) | вектор, в котором i-й элемент минимальный из x [i], y [i]... |
pmax (x, y...) | вектор, в котором I-й элемент максимальный из x [i], y [i]... |
cumsum(x) | вектор, i-й элемент которого является суммой от x [1] до x [i] |
cumprod (x) | вектор, i-й элемент которого является произведением от x [1] до x [i] |
cummin (x) | вектор, i-й элемент которого является минимальным из элементов от x [1] до x [i] |
cummax (x) | вектор, i-й элемент которого является максимальный из элементов от x [1] до x [i] |
match(x,y) | возвращает вектор той же длины что и вектор x с элементами x, которые находятся в y (иначе NA) |
choose(n,k) | вычисляет комбинации k событий среди n повторений |
na.omit(x) | игнорирует наблюдения с отсутствующими данными (NA) (игнорирует соответствующую строку, если x является матрицей или data.frame) |
na.fail(x) | выдает сообщение об ошибках, если x содержит NA (s) |
table(x) | возвращает таблицу с номерами различных значений x (обычно для целых чисел или коэффициентов(факторов)) |
subset(x,...) | возвращает выборку x относительно критерия (...) в зависимости от режима x (обычно для сравнения: x$V1 <10); если x - data.frame, опция select позволяет идентифицировать переменные, которые будут сохранены |
Операции с матрицами
R имеет средства для вычисления матриц и управления ими. Матрица может быть создана при помощифункции matrix():
> matrix (data=5, nr=2, nc=2)
[, 1] | [, 2] | |
[1,] | ||
[2,] |
> matrix (1:6, nr=2, nc=3)
[, 1] | [, 2] | [, 3] | |
[1,] | |||
[2,] |
Функции rbind() и cbind() связывают (объединяют) матрицы относительно строк или столбцов, соответственно:
> m1 <-matrix (data=1, nr=2, nc=2)
> m2 <-matrix (data=2, nr=2, nc=2)
> rbind (m1, m2)
[,1] | [,2] | |
[1,] | ||
[2,] | ||
[3,] | ||
[4,] |
> cbind (m1, m2)
[,1] | [,2] | [,3] | [,4] | |
[1,] | ||||
[2,] |
Оператор произведения двух матриц – “% * %”. Например, рассматривая две матрицы m1 и m2 созданные выше:
> rbind (m1, m2) % * % cbind (m1, m2)
мы получим следующий результат:
[,1] | [,2] | [,3] | [,4] | |
[1,] | ||||
[2,] | ||||
[3,] | ||||
[4,] |
> cbind (m1, m2) % * % rbind (m1, m2)
[,1] | [,2] | |
[1,] | ||
[2,] |
Транспонирование матрицы производится функцией t(); эта функция также подходит для data.frame.
Функция diag() может использоваться, чтобы извлечь или изменить диагональ матрицы, или для построения диагональной матрица.
> diag (m1)
[1] 1 1
> diag (rbind (m1, m2) % * % cbind (m1, m2))
[1] 2 2 8 8
> diag (m1) <-10
> m1
[,1] | [,2] | |
[1,] | ||
[2,] |
> diag (3)
[,1] | [,2] | [,3] | |
[1,] | |||
[2,] | |||
[3,] |
> v <-c (10,20,30)
> diag (v)
[,1] | [,2] | [,3] | |
[1,] | |||
[2,] | |||
[3,] |
> diag (2.1, nr=3, nc=5)
[,1] | [,2] | [,3] | [,4] | [,5] | |
[1,] | 2.1 | 0.0 | 0.0 | ||
[2,] | 0.0 | 2.1 | 0.0 | ||
[3,] | 0.0 | 0.0 | 2.1 |
Графики в R
R предлагает большое разнообразие графиков. Чтобы понять идею, можно напечатать demo (graphics). Простоневозможно описать все возможностиR в отображении графиков, особенно когда каждый графическая функция имеет большое количество параметров.
Сначала несколько подробностей относительно того, как управлять графическими окнами.