Введение в R

А. М. Ярославцев

Введение в R

Области приложения R

3 уровня организации языков и где на них находится R

Структура языка R

Особые задачи

Проверка графической подсистемы

(перед началом работы, чтобы убедиться, что графическая система работает корректно)

plot(density(rnorm(100)), col = "red")

Способы задания значения для переменной

(переменной x присваивается значений 5. Команды разделяются “;”)

x = 5;x
## [1] 5
x <- 5;x
## [1] 5
assign("x", 5);x
## [1] 5

Базовая функция c()

функция c() - соединяет элементы в вектор

x <- c(1, 3, 6, 7)
x
## [1] 1 3 6 7

Типы векторов

char <- c("8", "edge", "turn8k")
logic <- c(TRUE, FALSE, TRUE, FALSE)

Динамическая типизация

Вектор преобразуется к данным одного типа

dynam <- c(8, "dds", TRUE); dynam
## [1] "8"    "dds"  "TRUE"
dynam <- c(1, 0, 1, 1.1, TRUE); dynam
## [1] 1.0 0.0 1.0 1.1 1.0

Приоритет: Char(Текстовый)-> Numerical(Колич.)-> Logic(Логический)

Функции

x=function(arg1,arg2,…)

function - это собственное имя функции, оно приводит к вызову функции

arg1, arg2… - аргументы функции:

Пример позиционных функций:

log(x,base)

log - имя функции;

x, base - аргументы узнаются по порядку перечисления

log(x, 10)
## [1] 0.0000000 0.4771213 0.7781513 0.8450980

Пример именных функций:

log(base=base,x)

аргумент base задан по имени

log(base = 10, x)
## [1] 0.0000000 0.4771213 0.7781513 0.8450980

Логические операторы

<, >, <=, >=, ==(тождество)

x = 10
x < 5
## [1] FALSE
x > 5
## [1] TRUE
x == 10
## [1] TRUE

Математические операции

+, -, *, /, ^, sin(), cos(), sqrt()-корень, log()

x^10
## [1] 1e+10

Контрольное задание

x = 10/(5 - 5)

Ответ задание

x = 10/(5 - 5)
x
## [1] Inf

Inf - знак бесконечности

Правила операций с векторами

x <- c(2, 4, 5, 3, -4, 0)
x * 5
## [1]  10  20  25  15 -20   0
y <- c(5, 3)
x * y
## [1]  10  12  25   9 -20   0
x
## [1]  2  4  5  3 -4  0
z <- c(1, 2, 3, 4)
x * z
## Warning in x * z: longer object length is not a multiple of shorter object
## length
## [1]  2  8 15 12 -4  0

Длины векторов должны быть кратны

length(x) - функция измерения длины вектора

x <- c(2, 4, 5, 3, -4, 0)
length(x)
## [1] 6

Другие базовые функции

x <- c(3, 4, 6, -7, 8)
mean(x)
## [1] 2.8
m = sum(x)/length(x)
m
## [1] 2.8

Задание последовательности с помощью от:до

x = 2:10
x
## [1]  2  3  4  5  6  7  8  9 10
y = 5.1:1
y
## [1] 5.1 4.1 3.1 2.1 1.1
z = -5:10
z
##  [1] -5 -4 -3 -2 -1  0  1  2  3  4  5  6  7  8  9 10
w = -5:-10
w
## [1]  -5  -6  -7  -8  -9 -10

Задание последовательности с помощью seq

seq(from= ,to= ,by=)

z = seq(2, 5, 0.5); z
## [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0
y = seq(9, 2.5, -0.5);y
##  [1] 9.0 8.5 8.0 7.5 7.0 6.5 6.0 5.5 5.0 4.5 4.0 3.5 3.0 2.5
length(y); length(z)
## [1] 14
## [1] 7
z * y
##  [1] 18.00 21.25 24.00 26.25 28.00 29.25 30.00 11.00 12.50 13.50 14.00
## [12] 14.00 13.50 12.50

Задание последовательности с помощью rep

rep(x, times=)

x = c("A", "B", "C")
rep(x, 4)
##  [1] "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C"

Определение типа вектора

mode(x)

x <- 1:10
mode(x)
## [1] "numeric"
y <- x <= -5
y
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
mode(y)
## [1] "logical"
mode(mode(y))
## [1] "character"

Индексация векторов

x = 1:20;x
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
x[2]
## [1] 2
x[0]
## integer(0)

Задание диапазона индексов

x[5:9]
## [1] 5 6 7 8 9
x[c(3, 7, 8, 9, 20)]
## [1]  3  7  8  9 20

Исключение из списка индексов

x[-19]
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 20
x[-(1:6)]
##  [1]  7  8  9 10 11 12 13 14 15 16 17 18 19 20

Задание условий для индексов

x[x > 10]
##  [1] 11 12 13 14 15 16 17 18 19 20
x[TRUE]
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
y = c(TRUE, FALSE)
x[y]
##  [1]  1  3  5  7  9 11 13 15 17 19

Добавление элементов к вектору

создание пустого ветора

vector <- c() ;vector
## NULL
v2 <- c(TRUE, FALSE, T, T, F, TRUE)
vector = c(v2, vector); vector
## [1]  TRUE FALSE  TRUE  TRUE FALSE  TRUE
vector = c(F, vector); vector
## [1] FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
x = 1:3
x = c(5, x)
x
## [1] 5 1 2 3

Имена элементов вектора

x = 1:5
names(x)
## NULL

задание имен для элементов вектора

names(x) <- c("Первый", "Второй", "Третий", "Четвертый", "Пятый")
names(x)
## [1] "Первый"    "Второй"    "Третий"    "Четвертый" "Пятый"

Обращение к элементу вектора по имени

x["Первый"]
## Первый 
##      1

Функции для визуализации свойств векторов

Некоторые приемы

подтверждение, что логарифм натуральный

log(3) == log(3, base = exp(1))
## [1] TRUE

обращение к последнему элементу вектора

x = seq(5, 100, 0.1)
x[length(x)]
## [1] 100

Функции sort и order

order(x) показывает номера элементов в порядке возрастания значений

x <- c(-10, 2, 78, 34, -98, 23, 0, -8)
order(x)
## [1] 5 1 8 7 2 6 4 3

sort(x) проводит упорядочивание элементов вектора

sort(x)
## [1] -98 -10  -8   0   2  23  34  78

Связь между функциями sort и order

sort(x) == x[order(x)]
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

Контрольное задание

Получите из данного вектора a вектор, в котором будет обратный порядок элементов

a <- seq(-8,4,.5)
a
##  [1] -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5
## [15] -1.0 -0.5  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0

Ответ - получение вектора с обратным порядком элементов

a
##  [1] -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5
## [15] -1.0 -0.5  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0
x = a[length(a):1]
x
##  [1]  4.0  3.5  3.0  2.5  2.0  1.5  1.0  0.5  0.0 -0.5 -1.0 -1.5 -2.0 -2.5
## [15] -3.0 -3.5 -4.0 -4.5 -5.0 -5.5 -6.0 -6.5 -7.0 -7.5 -8.0

Контрольное задание

Вставьте число 99 в середину вектора a для округление используйте функцию round

Ответ - вставить число 99 в середину вектора a

a
##  [1] -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5
## [15] -1.0 -0.5  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0
length(a/2)
## [1] 25
round(length(a)/2)
## [1] 12
y = c(a[1:round(length(a)/2)], 99,
      a[(round(length(a)/2) + 1):length(a)])
y
##  [1] -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 99.0 -2.0
## [15] -1.5 -1.0 -0.5  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0

Контрольное задание

Докажите, что arcos(cos(x)) = x

Ответ - доказательство arcos(cos(x)) = x

x = c(0, 1.5, 2);x
## [1] 0.0 1.5 2.0
y = acos(cos(x)); y
## [1] 0.0 1.5 2.0
x == y 
## [1] TRUE TRUE TRUE

Пример на повторение

Вспомним, что можно задать имена элементам вектора

x = c(sin(10), log(5,8), log(3,exp(1)), log(38.6,10), cos(pi + 1), exp(1)^(cos(0)), atan(+Inf))

names(x) = c("sin(10)", "log8(5)", "ln3", "lg(38.6)", "cos(pi+1)", "e^cos(0)", "arctn(+Inf)");

sort(x)
##     sin(10)   cos(pi+1)     log8(5)         ln3 arctn(+Inf)    lg(38.6) 
##  -0.5440211  -0.5403023   0.7739760   1.0986123   1.5707963   1.5865873 
##    e^cos(0) 
##   2.7182818

Логические операции

A U B - объединение

Контрольное задание - Логические операции

x = seq(-10,10,1)

Выбрать все элементы x от -10 до -3 и от 0 до 6, за исключением 3

Ответ - Логические операции

x = seq(-10,10,1)
y = x[(x >= -10 & x <= -3) | (x >= 0 & x <= 6 & x != 3)]
y
##  [1] -10  -9  -8  -7  -6  -5  -4  -3   0   1   2   4   5   6

Тип данных: фактор и функция summary()

Cпециальный класс векторов - факторы (factors) предназначен для хранения кодов соответствующих уровней номинальных признаков (классификаторов).

Для преобразования числового (или текстового) вектора в фактор в R существует одноименная функция factor(), например: x = factor(“Mouse”)

f = c(rep("mouse", 3), rep("rat", 2), rep("fly", 11))
f = rep(c("mouse", "rat", "fly"), c(3, 2, 11))
summary(f)
##    Length     Class      Mode 
##        16 character character
x = factor(f)
summary(x)
##   fly mouse   rat 
##    11     3     2

Функция summary для количественных векторов

summary(1:10)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    3.25    5.50    5.50    7.75   10.00
summary(1:10)[4]
## Mean 
##  5.5

Контрольное задание - Тип данных фактор

Создайте последовательность ДНК и посчитайте долю каждого нуклеотида

dna=factor(rep(c("T","G","C","A"),c(26,48,16,10)))
summary(dna)
##  A  C  G  T 
## 10 16 48 26

Ответ - Тип данных фактор

dna=factor(rep(c("T","G","C","A"),c(26,48,16,10)))
sum(summary(dna))
## [1] 100
ratio=summary(dna)/sum(summary(dna))
ratio
##    A    C    G    T 
## 0.10 0.16 0.48 0.26

Функция sample()

sample(dna)
##   [1] G T G G G C T G G G A G G A T T A G G G T G C G T C G A G T C T G C T
##  [36] T G G G T G C G G G G G G G G G T C T G C G G G T G G G T G G A G G A
##  [71] G A G C C T T C C T C C A T T A T C T G G G T T G C T G T A
## Levels: A C G T
#sample(dna,size = 104, replace = FALSE) выдаст сообщение об ошибке
sample(dna, size = 30, replace = F)
##  [1] G G T G G C T G G G G T G C G C G T T G G C T C C T G G T C
## Levels: A C G T
ratio = summary(factor(dna)) / length(dna); ratio
##    A    C    G    T 
## 0.10 0.16 0.48 0.26
sampledna = sample(dna, size = 100000, replace = TRUE)
ratio1 = summary(factor(sampledna)) / length(sampledna); ratio1
##       A       C       G       T 
## 0.10006 0.15993 0.48100 0.25901
sampleATGC = sample(c("A","T","G","C"), size = 100000, replace = TRUE)
ratio2 = summary(factor(sampleATGC)) / length(sampleATGC); ratio2
##       A       C       G       T 
## 0.24938 0.25156 0.24945 0.24961

Функции union(x,y),intersect(x,y),setdiff(x,y)

x=1:10
y=6:14
union(x,y)
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14
intersect(x,y)
## [1]  6  7  8  9 10
setdiff(x,y)
## [1] 1 2 3 4 5
setdiff(y,x)
## [1] 11 12 13 14

Удаление всех переменных из памяти

rm(list=ls())

Функция cumsum()

расчет кумулятивного значения

cumsum(1:10)
##  [1]  1  3  6 10 15 21 28 36 45 55

Контрольное задание

Создайте длинные последовательности ДНК с заданными пропорциями элементов, например, доля G=0.5, а остальных - одинаковая

Ответ - создание последовательности с заданными пропорциями

dna2=sample(c("A","T","G","G","G","C"), size=3826513,replace=TRUE)
ratio=summary(factor(dna2))/length(dna2); ratio
##         A         C         G         T 
## 0.1665893 0.1665647 0.4999709 0.1668752
dna2=sample(c("A","T","G","C"), size=3826513,prob=c(.5/3,.5/3,.5,.5/3),replace=TRUE)
ratio=summary(factor(dna2))/length(dna2); ratio
##         A         C         G         T 
## 0.1667513 0.1664824 0.4998846 0.1668817

Data frames -Таблицы данных

см. далее