Начало работы с R

Скачивание и установка ПО

Для выполнения примеров рекомендуется установить: Интерпретатор языка R (c утилитами) r-project.org

Интегрированная среда разработки программ на R RStudio rstudio.com

Семинар 1 (12 февраля)

Изученные на семинаре темы:

  1. Комментарии
  2. Вызов функций и передача параметров на примере функции curve()
  3. Построение графиков функций при помощи функций базовой графики R
  4. Оператор присваивания
  5. Векторы/матрицы
  6. Решение системы линейных уравнений
  7. Изменние опций

Комментарии

# текст написаный после знака диез до конца строки игнорируется интерпретатором языка 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пособ установления соотвествие между фактическими и формальными параметрами может быть:

  1. позиционным: первый фактический соотвествует первому формальному и т.д.

curve(sin,-3*pi,3*pi)

  1. по имени (тогда порядок передаваемых параметров можно менять)

curve(from=-pi,to=pi,expr=sin)

  1. комбинация предыдущих способов сначала по позиции, потом по имени

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

Изменение глобальных опций сессии пользователя в R

Попробуем поэлементно сравнить 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