R — весёлый калькулятор

R можно использовать как весёлый калькулятор:

5 + 9
## [1] 14

Что-нибудь более интересное:

a <- factorial(4)
b <- 2^3
a + b
## [1] 32

Признайся, шалунишка, ты всегда мечтал поделить на ноль?

a <- 1/0
a
## [1] Inf

Что можно делать с бесконечностью?

1/(a - 9)
## [1] 0

Возьмём арктангенс!

atan(Inf)
## [1] 1.571

Ба! Да это же \( \pi/2 \):

pi/2
## [1] 1.571

Но с неопределенностью ничего не поделаешь

0/0
## [1] NaN

NaN расшифровывается как <>

А теперь векторы

Вектор из чисел по порядку:

a <- 3:10
a
## [1]  3  4  5  6  7  8  9 10

Вектор из одинаковых чисел:

b <- rep(777, times = 5)
b
## [1] 777 777 777 777 777

Вектор из конкретных чисел:

vect <- c(5, -4, 1)

Что можно делать с вектором?

sum(vect)
## [1] 2

Хотите среднее арифметическое?

mean(vect)
## [1] 0.6667

Генерация случайных величин

Хочу 300 случайныхх натуральных чисел от 1 до 5 с повторами! И побыстрее!

h <- sample(1:5, 300, rep = TRUE)

Краткая информация о векторе \( h \) и начало вектора \( h \)

str(h)
##  int [1:300] 2 3 1 1 4 2 2 1 5 1 ...
head(h)
## [1] 2 3 1 1 4 2

Хочу сгенирировать выборку из 500 значений случайной величины \( X \) с вероятностями:

\( X \) -2 3 7
\( P() \) 0.1 0.2 0.7

Зададим вектор вектор возможных значений и вектор вероятностей

x.val <- c(-2, 3, 7)
x.pr <- c(0.1, 0.2, 0.7)

Получаем выборку из 500 значений:

s <- sample(x.val, 500, rep = TRUE, x.pr)
str(s)
##  num [1:500] -2 7 3 3 7 7 3 7 3 3 ...

Два простеньких графика

Первое шаманское заклинание, вызывает духов-построителей красивых графиков!

require(ggplot2)
## Loading required package: ggplot2

Простенькая гистограмма

qplot(factor(s), main = "Гистограмма")

plot of chunk unnamed-chunk-18

И еще простенький график

x <- rnorm(500)  # 500 нормальных величин со средним 0 и дисперсией 1
y <- rnorm(500)  # 500 нормальных величин со средним 0 и дисперсией 1
qplot(x, y, main = "Точечки")

plot of chunk unnamed-chunk-19

Отбор значений

Выберем из вектора \( s \) значения больше \( 0 \):

b <- s[s > 0]
b
##   [1] 7 3 3 7 7 3 7 3 3 7 7 7 7 7 7 3 7 7 7 7 7 3 7 7 7 7 7 7 7 7 3 7 7 7 7
##  [36] 7 7 7 3 7 7 7 7 3 7 7 7 3 7 3 3 3 7 7 7 7 3 3 3 7 7 7 7 3 7 3 7 3 7 7
##  [71] 7 7 3 7 3 7 7 7 7 3 7 7 7 3 7 7 7 7 3 7 7 7 7 3 7 3 3 7 7 7 7 3 3 7 7
## [106] 7 7 7 7 7 3 3 3 7 7 7 7 7 7 3 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
## [141] 7 7 7 3 3 7 7 7 7 7 3 7 3 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 7 3 3 3 7 3 3
## [176] 7 3 7 7 3 7 7 7 7 7 7 7 7 7 7 7 7 7 3 7 3 3 7 7 3 3 7 7 7 7 7 3 7 3 7
## [211] 7 7 7 3 7 7 3 7 7 7 7 7 7 7 7 7 7 7 3 7 7 7 7 3 3 7 3 3 7 3 7 7 7 3 7
## [246] 7 3 7 7 3 7 7 7 7 3 7 7 7 7 7 7 7 7 3 7 3 7 7 3 7 3 7 7 7 7 7 3 3 3 7
## [281] 7 7 7 7 7 7 3 7 3 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 7 7 7 7 3 7 7 7 7 7 7
## [316] 7 3 7 3 7 7 7 3 7 7 3 7 7 7 7 7 7 7 7 3 7 7 7 3 7 3 7 7 7 7 3 3 3 7 7
## [351] 3 7 7 7 7 7 7 7 7 7 3 3 7 7 7 7 7 7 7 7 7 3 7 7 7 7 7 3 7 3 7 7 7 7 7
## [386] 3 7 7 3 7 7 3 3 3 3 3 7 3 3 7 3 3 3 7 7 3 7 7 7 7 3 7 7 7 7 7 7 3 7 3
## [421] 7 3 7 7 7 3 3 7 7 7 7 3 7 3 7 7 7 7 7 7 7 7 7 3 7 7 7 3
str(b)
##  num [1:448] 7 3 3 7 7 3 7 3 3 7 ...

Можно выбрать конкретные \( s \), например с 6-го по 20-ое:

s[6:20]
##  [1]  7  3  7  3  3  7  7  7  7  7  7  3 -2 -2  7

Хочу 5-ое, 7-ое и 13-ое!

s[c(5, 7, 13)]
## [1] 7 3 7

Можно узнать, сколько значений равно 3:

sum(s == 3)
## [1] 115

Еще полезная штучка — количество чисел в векторе

length(b)
## [1] 448