Stručný úvod do jazyka R

Mojmír Vinkler, 2.3.2016

Kde programovat v R

R jako "lepší" kalkulačka

In [8]:
sqrt((42 + 4.2)^2 + sin(exp(1) * pi))
Out[8]:
66.0058629417514

Proměnné

In [9]:
a = 1
# operator <- je stejny jako =
b <- 2
c = a + b
c
Out[9]:
3

Základní datové typy

In [44]:
# numericky typ
a = 2
a = 2.2

# retezec (string)
a = 'text'

# true / false
a = TRUE
a = FALSE
a = T
a = F

# vektor
a = c(1,2,3)
a = 1:3

Operátory

In [20]:
1 == 1
1 != 2
1 < 2
!TRUE
is.na(NaN)
is.null(NULL)
Out[20]:
TRUE
Out[20]:
TRUE
Out[20]:
TRUE
Out[20]:
TRUE
Out[20]:
TRUE

Pokročilé datové typy

In [13]:
# matice
A = matrix(1:9, 3, 3)
A = rbind(c(1,2,3), c(4,5,6), c(7,8,9))
A
Out[13]:
123
456
789
In [50]:
# dataframe (= matice s pojemnovanymi sloupci)
df = data.frame(a=c(1,2,3), b=c('a', 'b', 'c'))
head(df)
Out[50]:
ab
11a
22b
33c

Operace s vektory

In [26]:
a = c(1,2,3)
b = c(3,4,5)
# scitani / nasobeni po slozkach
print(a + b)
print(a * b)
# skalarni soucin
print(a %*% b)
[1] 4 6 8
[1]  3  8 15
     [,1]
[1,]   26

Operace s maticemi

In [33]:
A = matrix(1, 2, 3)

# nasobeni po slozkach
A * A
Out[33]:
111
111
In [36]:
# maticove nasobeni
A %*% t(A)
Out[36]:
33
33

Vyber prvku z vektoru / matice / dataframe

In [55]:
a = 1:10
a[4]
Out[55]:
4
In [58]:
A = matrix(1:9, 3, 3)
# prvek
A[1,3]

# 1. radek
A[1,]

# 1. sloupec
A[,1]
Out[58]:
7
Out[58]:
  1. 1
  2. 4
  3. 7
Out[58]:
  1. 1
  2. 2
  3. 3
In [61]:
A = data.frame(a=c(1,2,3), b=c('a', 'b', 'c'))
# sloupec `a`
A[,'a']
# prvni radek
A[1,]
# sloupce `a` a `b`
A[,c('a', 'b')]
Out[61]:
  1. 1
  2. 2
  3. 3
Out[61]:
ab
11a
Out[61]:
ab
11a
22b
33c

Zakladni funkce

In [29]:
a = c(1,2,3)
sum(a)
mean(a)
max(a)
min(a)
sd(a)
Out[29]:
6
Out[29]:
2
Out[29]:
3
Out[29]:
1
Out[29]:
1

Grafika

In [40]:
x = 1:100
y = sin(0.1 * x)
plot(x, y, xlab='x-ova osa', ylab='y-ova osa', main='Hlavni popisek')
In [2]:
require(datasets)
pairs(iris[1:4], main="Edgar Anderson's Iris Data", pch=21,
       bg = c("red", "green3", "blue")[unclass(iris$Species)])

Funkce

In [2]:
secti = function(a, b, c=1){
    return(a + b + c)
}

secti(3, 4)
secti(3, 4, c=2)
Out[2]:
8
Out[2]:
9

If-else podminky

In [47]:
odpoved = 42
if(odpoved == 42){
    print('Spravna odpoved')
} else if(abs(odpoved - 42) <= 2){
    print('Skoro...')
} else {
    print('Spatna odpoved')
}
[1] "Spravna odpoved"

Cykly

In [42]:
for(i in 1:10){
    print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

Načítání dat

In [11]:
data = read.table('data-3d-base-xyz.txt', header=TRUE)
head(data)
Out[11]:
idsexx.By.Bz.Bx.BAy.BAz.BAx.POdxy.POdxz.POdxx.POsiny.POsinz.POsin
11F128.88139.95476.2127.59155.73340.571.28154.85364.29184.78160.36363.71
22F144.89150.63466.31138.7160.68335.7281.42153.36358.42198.78171.97359
33F111.33136.22457.02109.14144.94338.0454.77130.4347.57164.88154.13347.47
44F126.33159.01468.65122.69171.45337.1370.44180.89351.68178.47160.87351.34
55F133.05120473.65134.91144.22349.878.17144.41367.27188.57148.28366.3
66F111.08112.4467.09101.96125.41339.1848.74106.06356.22156.4149.17356.69

Používání externích knihoven / skriptů

In [ ]:
# instalace knihovny
install.packages('circular')

# nacteni knihovny k pouziti (zpristupni funkce k pouziti)
library(circular)

# nacteni vsech funkci z externiho skriptu
source('moje-funkce.R')

Funkce apply

Pomocí apply můžete aplikovat danou funkci na všechny řádky / sloupce matice (nebo data.frame).

In [16]:
# prumerna hodnota sloupce
apply(data[,c('x.B', 'y.B', 'z.B')], 2, mean)
Out[16]:
x.B
131.159833333333
y.B
150.173666666667
z.B
472.173
In [17]:
# prumerna hodnota radku
apply(data[,c('x.B', 'y.B', 'z.B')], 1, mean)
Out[17]:
  1. 248.343333333333
  2. 253.943333333333
  3. 234.856666666667
  4. 251.33
  5. 242.233333333333
  6. 230.19
  7. 260.48
  8. 234.366666666667
  9. 252.056666666667
  10. 255.56
  11. 247.336666666667
  12. 256.783333333333
  13. 251.656666666667
  14. 251.873333333333
  15. 244.54
  16. 245.306666666667
  17. 267.15
  18. 241.38
  19. 264.163333333333
  20. 253.586666666667
  21. 258.603333333333
  22. 251.326666666667
  23. 248.66
  24. 263.656666666667
  25. 245.936666666667
  26. 242.936666666667
  27. 245.273333333333
  28. 247.003333333333
  29. 245.106666666667
  30. 253.003333333333
  31. 259.76
  32. 259.563333333333
  33. 238.706666666667
  34. 241.3
  35. 297.066666666667
  36. 251.23
  37. 243.476666666667
  38. 295.453333333333
  39. 257.78
  40. 245.533333333333
  41. 265.073333333333
  42. 241.823333333333
  43. 252.323333333333
  44. 258.583333333333
  45. 236.6
  46. 242.52
  47. 246.923333333333
  48. 258.183333333333
  49. 233.713333333333
  50. 250.59
  51. 221.23
  52. 245.823333333333
  53. 239.04
  54. 259.253333333333
  55. 264.586666666667
  56. 251.513333333333
  57. 266.53
  58. 246.426666666667
  59. 252.41
  60. 258.47

Další funkce

In [25]:
# funkce pro vypisovani na konzoli
cat('Vypis', 'text', 42, '\n', 'na dalsi radek')
Vypis text 42 
 na dalsi radek