R це середовище в якому можна:
Виконувати будь-які обчислення;
Програмувати;
Будувати графіки;
2 + 3
## [1] 5
3*6
## [1] 18
5 - 2
## [1] 3
6/2
## [1] 3
2^3
## [1] 8
Команди можна закоментовувати знаком #
(2 + 3*4)/2 #5 - 3
## [1] 7
крапка з комою (або наступний рядок) відділяють різні вирази
1+2*3^2; 2^3*2
## [1] 19
## [1] 16
Спочатку виконується піднесення до степеня, потім множення і ділення, потім сума і різниця. Дужки мають пріоритет над всім. Якщо операції мають однаковий пріоритет, то зліва направо.
Математик Лейбніц показав, що \(n^3 - n\) завжди ділиться на 3. Давайте ми це перевіримо для деяких \(n\):
(2^3-2)/3
## [1] 2
(2^3-2)/3
## [1] 2
(3^3-3)/3
## [1] 8
(4^3-4)/3
## [1] 20
(5^3-5)/3
## [1] 40
Перевірити (для деяких значень) також твердження:
\(n^2 - n\) завжди ділиться на 2
\(n^4 - n\) завжди ділиться на 4
\(n^5 - n\) завжди ділиться на 5
Загальне твердження не можна довести будь-якою кількістю успішних одиночних експериментів але можна спростувати одним неуспішним.
Цілочисельне ділення і залишок
5 %/% 3
## [1] 1
5 %% 3
## [1] 2
Давайте переведемо 256 хвилин у години.
exp(1)
## [1] 2.718282
exp(log(5))
## [1] 5
sin(pi/2)
## [1] 1
cos(pi/2)
## [1] 6.123234e-17
max(4,2,5,1) # максимум
sum(4,2,5,1) # сума
prod(4,2,5,1) # добуток
factorial(4) # факторіал
sqrt(4) # квадратний корінь
Складні задачі з мого 11 класу
що більше \(e^\pi\) чи \(\pi^e\)?
що більше \(3^\pi\) чи \(\pi^3\)?
help(solve)
?solve
help("exp")
help.start()
help.search("solve")
??solve
example(exp)
example("*")
x <- 5 # Загальноприйнята форма присвоєння
x
## [1] 5
6 -> y # Можливо але незвично
y
## [1] 6
z = 8 # Можливо але незвично
z
## [1] 8
4 == 4
## [1] TRUE
4 == 5
## [1] FALSE
4 == 3 + 1
## [1] TRUE
2 < 3
## [1] TRUE
3 <= 4
## [1] TRUE
3 != 5
## [1] TRUE
TRUE & TRUE
TRUE & FALSE
TRUE | FALSE
FALSE | FALSE
FALSE | TRUE
TRUE & TRUE
## [1] TRUE
TRUE & FALSE
## [1] FALSE
TRUE | FALSE
## [1] TRUE
FALSE | FALSE
## [1] FALSE
FALSE | TRUE
## [1] TRUE
5 > 3 & 0 != 1
5 > 3 & 0 != 0
! TRUE
! FALSE
! ( 5 == 5 )
Графік сінуса
plot(sin, from=-10, to=10)
Графік кореня
plot(sqrt,from=0,to=10)
Одним з найважливіших об’єктів в R є вектори. Вектор - це послідовність чогось.
Головні функції для створення векторів: с(), seq(), rep()
c(2,5,3,7)
## [1] 2 5 3 7
c(1,2,3,4,5,6,7,8,9,10)
## [1] 1 2 3 4 5 6 7 8 9 10
seq(from=1,to=10,by=3)
seq(from=3,to=7)
seq(1,11,3)
seq(3,7)
help(seq)
example(seq)
seq(from, to, by)
from - з якого числа починати
to - на якому числі закінчувати (не перевищувати)
by - з яким кроком йти
3:7 # це те саме, що seq(3,7,1)
## [1] 3 4 5 6 7
Створіть вектор всіх чисел від 1 до 100
Отримати наступні послідовності:
Всі непарні числа від 1 до 100
Всі числа, що кратні 5 від 1 до 200
Числа виду \(n\pi\) де \(n\) від 1 до 10
Як зробити послідовність 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1?
Як зробити послідовність 2 4 6 8 10 1 3 5 7 9?
Які типи взагалі існують в R? Атомарних типів 5:
Вектор містить елементи одного типу!
c("a","b","c","d")
## [1] "a" "b" "c" "d"
c(T,F,T)
## [1] TRUE FALSE TRUE
c(TRUE,FALSE,TRUE)
## [1] TRUE FALSE TRUE
class(c("a","b","c","d"))
## [1] "character"
class(c(T,F,T))
## [1] "logical"
class(1:3)
## [1] "integer"
x <- c(T,F,T)
x
## [1] TRUE FALSE TRUE
as.character(x)
## [1] "TRUE" "FALSE" "TRUE"
Якого типу вектори?
y <- c(1.7, "a")
y <- c(TRUE, 2)
y <- c("a", TRUE)
Функція повторення послідовностей має форму:
rep(x, times = 1, length.out = NA, each = 1)
rep(x, times = 1, len = NA, each = 1)
rep(c(1,2,3),3)
## [1] 1 2 3 1 2 3 1 2 3
rep(c(1,2,3),1:3)
## [1] 1 2 2 3 3 3
rep(c(1,2,3),each = 3)
## [1] 1 1 1 2 2 2 3 3 3
rep(c(1,2,3),2,each = 3)
## [1] 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3
rep(1:4,2)
rep(1:4,times = 2, length.out = 5)
rep(1:4, each = 2)
rep(1:4, c(2,2,2,2))
rep(1:4, c(1,1,1,2))
rep(0:2,3)
rep(7:9,2:4)
x <- c(12,15,13,17,11)
x[4]
x[3:5]
x[-2]
x[-(3:5)]
c(2,5,3) + c(4,2,7)
1:5 + 1:10
1:5 + 2
c(2,5,3) * c(4,2,7)
## [1] 8 10 21
1:3*5
## [1] 5 10 15
1:3*1:6
## [1] 1 4 9 4 10 18
x <- 1:100
x^2
## [1] 1 4 9 16 25 36 49 64 81 100 121
## [12] 144 169 196 225 256 289 324 361 400 441 484
## [23] 529 576 625 676 729 784 841 900 961 1024 1089
## [34] 1156 1225 1296 1369 1444 1521 1600 1681 1764 1849 1936
## [45] 2025 2116 2209 2304 2401 2500 2601 2704 2809 2916 3025
## [56] 3136 3249 3364 3481 3600 3721 3844 3969 4096 4225 4356
## [67] 4489 4624 4761 4900 5041 5184 5329 5476 5625 5776 5929
## [78] 6084 6241 6400 6561 6724 6889 7056 7225 7396 7569 7744
## [89] 7921 8100 8281 8464 8649 8836 9025 9216 9409 9604 9801
## [100] 10000
Створити послідовність \(\frac{n(n + 1)}{2}\) і порівняти її з сумою \(1 + 2 + ... + n\)
Створити послідовність \(\frac{n^2(n + 1)^2}{4}\) і порівняти її з сумою \(1^3 + 2^3 + ... + n^3\)
x <- 1:5
x > 3
f <- x > 3
x[f]
x <- 1:100
f <- (x %% 2) == 1
x[f]
## [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45
## [24] 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91
## [47] 93 95 97 99
y <- 1:100
y[y>50] <- 0
y
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
## [47] 47 48 49 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [70] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [93] 0 0 0 0 0 0 0 0
length(x) # довжина вектора (кількість елементів)
rev(x) # повернути вектор навпаки
sort(x) # сортувати вектор у певному порядку
unique(x) # вивести значення х без повторів
square <- function(x) {
x^2
}
square(1:5)
## [1] 1 4 9 16 25
my_percent <- function(x, p) {
x * p/100
}
my_percent_growth <- function(x, p){
x * (1 + p/100)
}
Людина дає гроші банку. Банк визначає ставку. Потім щорічно банк додає до суми відсотки. За рік отримаємо:
my_percent_growth(100,15)
## [1] 115
my_percent_growth <- function(x, p, n = 1){
x * (1 + p/100)^n
}
my_percent_growth(100,15,10)
## [1] 404.5558
my_percent_growth(100,15,20)
## [1] 1636.654
my_percent_growth(100,15,30)
## [1] 6621.177
Якщо поділити 72 на відсотки ми отримаємо час подвоєння депозита.
Завдання. Перевірити це правило.
Що вигідніше покласти 100 грн на 10 років під 15 відсотків, чи 500 на рік під 15 відсотків?
head(faithful)
## eruptions waiting
## 1 3.600 79
## 2 1.800 54
## 3 3.333 74
## 4 2.283 62
## 5 4.533 85
## 6 2.883 55
час виверження час очікування
Задача. Створимо два вектори
eruptions <- faithful$eruptions
waiting <- faithful$waiting
Давайте напишемо функцію для обчислення середнього значення
average <- function(x){
??
}
plot(faithful)
1.1. 1 1 3 3 5 5 7 7 1 1 3 3 5 5 7 7
1.2. 3 5 7 9 11 8 10 12 14 16
1.3. 2 3 4 5 7 8 9 10 12 13 14 15
1.4. 2 4 6 9 11 13 16 18 20 20 22 24 27 29 31 34 36 38
2.1. Кількість вимірів у векторі
2.2. Суму всіх елементів
2.3 Кількість всіх елементів, що більші за середнє.
Створити послідовність Фібоначчі: 1, 1, 2, 3, 5, 8, … Кожен наступний дорівнює сумі двох попередніх. Перші два - одиниці. Обчислити перші 100 елементів.
Створити послідовність за попереднім правилом для початкових чисел 1, 3.
Перевірити що \(n^3 + (n+1)^3 + (n+2)^3\) ділиться на 9.
Створити послідовність чисел, що діляться на 3 або 7 або 9 без залишку.