Семинар БИВНИ –
Базовые Инструменты Воспроизводимых Научных Исследований
Для выполнения примеров рекомендуется установить: Интерпретатор языка R (c утилитами) r-project.org
Интегрированная среда разработки программ на R RStudio rstudio.com
# текст написаный после знака диез до конца строки игнорируется интерпретатором языка R
# такая строка называется комментарием
# коментарием #-> я буду показывать что выдает выражение в качестве результата
Функция curve() - для рисования для рисоваиния графика выражения, зависящего от x, или функции
Мы можем передать в качестве параметра имя функции без аргумента – sin
curve(sin,-3*pi,3*pi)
или вот вызов функции curve с выражением от х
curve((sin(2*x)-0.5)^2,-3*pi,3*pi)
фактические параметры подставляются при вызове функции вместо формальных например у функции curve такие формальные параметры:
curve(expr, from = NULL, to = NULL, n = 101, add = FALSE, type = “l”, xname = “x”, xlab = xname, ylab = NULL, log = NULL, xlim = NULL, …)
Если для параметра указано значение по умолчанию, его можно пропускать при вызове – он необязательный
Если мы не указали параметр n, то по умолчанию он получил значение 101 и предыдущий график был построен по 101 точке и выглядит не очень здорово. Теперь укажем, что нужно вычиcлить n=1000 точек при построении графика. А цвет можно задать параметром col="dark blue" от слова color.
curve((sin(2*x)-0.5)^2,-3*pi,3*pi,n=1000,col="dark blue")
Cпособ установления соотвествие между фактическими и формальными параметрами может быть:
curve(sin,-3*pi,3*pi)
curve(from=-pi,to=pi,expr=sin)
curve(sin,from=-pi,to=pi)
в базовых функциях рисоввания графиков (plot, curve, hist и др.) можно указывать стандартные графические параметры
col="цвет"
type="l" - линия, "h" - стобцовая диаграмма наподобие гистограммы (histogram), "p" - символы в точках, количество которых задается параметром n "b" - и символы и и отрезки, "o" – символы и линия графика, "n" – график не строить, а использовать значения функции и аргумента для построения осей координат, соответсвующих области изменения её аргумента и размаху значений а сами линии и символами можно добавить другими вызовами “рисовальных фукций” с параметром add=TRUE (добавить на предыдущий построенный график)
curve(sin,col="red", from=-pi,to=pi, n=20, type = "b")
параметр main задает подпись к всему графику, а xlab="название оси х" и ylab="название оси y" – подписи (labels) осей x и y
curve((sin(2*x)-0.5)^2,-3*pi,3*pi,col="red",main='my function',
ylab="y=(sin 2x-0,5)^2",n=600)
Оператор присваивания имеет форму: переменная <- значение Эту форму и рекомендуется использовать. Возможны и другие формы оператора присваивания значение -> переменная переменная = значение
s<-5
s
## [1] 5
Одной и той же переменной может позже переприсвоено другое значение:
s<-s+1
s
## [1] 6
В языке R оссобенно любят векторы – переменные, состоящие из однотипных компонент (либо все комроненты числовые, либо все логические, либо все строковые) Даже скалярная переменная считается вектором длинны 1
Фукция c() создает вектор по списку значений, созданный вектор значение присваивается переменной
v1<- c(1,4,-5)
v1
## [1] 1 4 -5
Выводимый в начале строки номер в квадратных скобках [1] указывает, какой номер имеет идущий за ним элемент массива (вектора/матрицы)
Если на вектроный аргумент натравить скалярную функцию, получиться вектор:
sin(v1)
## [1] 0.8414710 -0.7568025 0.9589243
v2<-sin(v1)
sin(v1) - v2
## [1] 0 0 0
Операции / * + - и ^ выполняются поэлементно
c(1,2,3,4)^3
## [1] 1 8 27 64
Логические сравнения
== равно (не путать с присваиванием = )
!= не равно
>= больше или равно
<=, < , >
и логические связки
& и
| или
выполняются поэлементно
c(1,2,3) == c(1,2,4)
## [1] TRUE TRUE FALSE
c(1,2,3) < c(1,2,4)
## [1] FALSE FALSE TRUE
функция class(объект) – показывает к какому типу (=классу) принадлежит объект или тип элементов массива
str(объект) – показвает структуру объекта
vnum<-c(1,2,3)
class(vnum)
## [1] "numeric"
str(vnum)
## num [1:3] 1 2 3
vchar<-c("раз","два","три")
class(vchar)
## [1] "character"
str(vchar)
## chr [1:3] "раз" "два" "три"
vlogic <- vnum < c(1,2,4)
vlogic
## [1] FALSE FALSE TRUE
class(vlogic)
## [1] "logical"
str(vlogic)
## logi [1:3] FALSE FALSE TRUE
m1 <- matrix(byrow = TRUE,
c(11,12,13,
21,22,23),nrow=2)
Если бы параметр byrow=FALSE, что по умолчанию так, вектор значений записался в виде матрицы по столбцам
m1
## [,1] [,2] [,3]
## [1,] 11 12 13
## [2,] 21 22 23
str(m1)
## num [1:2, 1:3] 11 21 12 22 13 23
Обращение к элементу
m1[2,3]
## [1] 23
Обращение к 3-му стобцу
m1[,3]
## [1] 13 23
По умолчанию, если матрица получается длины или ширины 1, она упрощается до вектора. Если вы не хотите этого, добавьте параметр drop=FALSE. Обращение к 3-му стобцу
m1[,3,drop=FALSE]
## [,1]
## [1,] 13
## [2,] 23
Два столбца – со 2го по 3й
m1[,2:3]
## [,1] [,2]
## [1,] 12 13
## [2,] 22 23
Два столбца – 1й и 3й
m1[,c(1,3)]
## [,1] [,2]
## [1,] 11 13
## [2,] 21 23
dim(m) – функция-свойство размерность матрицы/вектора/массива (dimention)
dim(m1)
## [1] 2 3
Изменяем размерность марицы, не удаляя данных
str(m1)
## num [1:2, 1:3] 11 21 12 22 13 23
dim(m1)<-c(1,6)
str(m1)
## num [1, 1:6] 11 21 12 22 13 23
m1
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 11 21 12 22 13 23
dim(m1) <-c(3,2)
str(m1)
## num [1:3, 1:2] 11 21 12 22 13 23
m1
## [,1] [,2]
## [1,] 11 22
## [2,] 21 13
## [3,] 12 23
Задаем матрицу системы
m<-matrix(
c(1,0,-1,
0,-33,2,
1,2,10),byrow =TRUE, nrow=3)
m
## [,1] [,2] [,3]
## [1,] 1 0 -1
## [2,] 0 -33 2
## [3,] 1 2 10
Задаем вектор свободных членов
b=c(5,-2,5)
dim(b)<-c(3,1)
b
## [,1]
## [1,] 5
## [2,] -2
## [3,] 5
Находим решение системы
x<-solve(m,b)
x
## [,1]
## [1,] 4.98910082
## [2,] 0.05994550
## [3,] -0.01089918
* – поэлементное умножение
%*% – матричное умножение
Проверка решение уравнения
b1<-m%*%x
b1
## [,1]
## [1,] 5
## [2,] -2
## [3,] 5
b
## [,1]
## [1,] 5
## [2,] -2
## [3,] 5
Попробуем поэлементно сравнить 2 матрицы на равенство
b1==b
## [,1]
## [1,] TRUE
## [2,] TRUE
## [3,] FALSE
Видимо нам не показываются разряды чисел в которых элементы матриц различаются. Установим новое количество значащих цифр при выводе числа
old_precision<- options(digits=17)
old_precision
## $digits
## [1] 7
Значит, по умолчанию показывалось 7 значащих цифр чисел
b
## [,1]
## [1,] 5
## [2,] -2
## [3,] 5
b1
## [,1]
## [1,] 5.0000000000000000
## [2,] -2.0000000000000000
## [3,] 5.0000000000000009
Теперь восстановим значение опции digits по умолчанию.
options(old_precision)
b1
## [,1]
## [1,] 5
## [2,] -2
## [3,] 5