Samsung_042026 Advertisement Samsung_042026 Advertisement Samsung_042026 Advertisement

Jazyk R pre úplných začiatočníkov I. - inštalácia a prehľad syntaxe

Digitálne zručnosti
0

V rámci konferencie OSS Conf na Žilinskej univerzite sa konal workshop „Jazyk R pre úplných začiatočníkov“. Workshop s praktickými príkladmi viedla a podklady pripravila Martina Litschmannová z VSB-TUO Ostrava. Z workshopov sa nerobil záznam, no vzhľadom k zaujímavej téme a výborne pripraveným materiálom som sa pokúsil vytvoriť videá z pohľadu účastníka.

Jazyk R je primárne určený pre štatistiku, analýzu a vizualizáciu dát. Prvá časť je venovaná inštalácii a prehľadu syntaxe jazyka R

Inštalácia jazyka R

Na stránke https://www.r-project.org/ v menu Download -> CRAN a vyberte odkaz pre 0-Cloud.

Pri inštalácii pre Windows kliknite na „install R for the first time“, ďalej už uvidíte odkaz

pre stiahnutie inštalačného súboru, ktorý stiahnite, spustite a vykonajte inštaláciu.

Pri inštalácii pre OS X stiahnite inštaláciu pre najnovšiu verziu – odkaz nabehnete pod

„Latest release“

Pre užívateľov Windows odporúčame nainštalovať RTools pre inštaláciu niektorých pokročilých knižníc. Na stránke https://www.r-project.org/ v menu Download -> CRAN a vyberte odkaz pre 0-Cloud, pokračujte Download R for Windows. Kliknite na Rtools a stiahnite si inštalačný súbor pre vašu verziu softvéru R a spustite ho.

Vývojové prostredie RStudio je na https://rstudio.com/products/rstudio/download/

Zdrojový kód

# ...................................................
# ............ Martina Litschmannová ................
# ... Katedra aplikované matematiky, FEI, VŠB-TUO ...
# ...................................................
 
# ....................................
# Operátory a základní početní operace
# ....................................
 
# Základní aritmetika
2 + 4
6 - 9
4 * 2.5
5 / 2
3^7
 
# Pokročilejší matematické funkce
factorial(5)   # Faktoriál: 5!
choose(5, 2)   # Kombinační číslo: 5 nad 2
 
# používáme výhradně kulaté závorky ().
(((10 + 2) * (340 - 33)) - 2) / 3  
 
# Relační (logické) operátory - výstupem je TRUE / FALSE
5 >= 3              # Neostrá nerovnost analogicky <=
5 < 3               # Ostrá nerovnost analogicky >
5 == 3              # Porovnání rovnosti
5 != 3              # Nerovnost
3 %in% c(1, 3, 4)   # Prvková inkluze
                    # nachází se hodnota v daném vektoru
# Logické spojky
5 >= 3 & 6 < 2      # Logické "AND"
5 >= 3 | 6 < 2      # Logické "OR"
 
# ....................
# Základní datové typy
# ....................
 
# Definování objektu, přiřazení hodnoty do paměti
# V R je standardem používat šipku "<-",
# operátor "=" je s ní ekvivalentní.
a <- 2 + 3
a = 2 + 3
a  # Explicitní výpis obsahu proměnné do konzole
 
# Přehled základních atomických datových typů:
a <- 2            # typu 'numeric' (reálné číslo)
b <- "písmenko"   # typu 'character' (textový řetězec)
c <- 5 > 1        # typu 'logical' (TRUE / FALSE)
 
# Ověření datového typu objektu
class(a)
class(b)
class(c)
 
# Převod (přetypování) mezi datovými typy:
# as.*() – např. při nápravě textově importovaných čísel.
as.character(a)   # Číslo se mění na textový řetězec
as.numeric(c)     # TRUE se mění na 1 (FALSE na 0)
as.logical(a)     # Nenulová čísla se mění na TRUE (0 na FALSE)
 
# .........................
# Základní datové struktury
# .........................
# Vektor - Všechny prvky MUSÍ být stejného typu.
# Vytváří se funkcí c() (combine/concatenate).
 
c(5, 9, 6, 1)
 
# Generování posloupností
1:10            # Celá čísla od 1 do 10
10:1            # Sestupná řada od 10 do 1
seq(1, 10, 2)   # Sekvence: od, do, krok (zde lichá čísla)
rep(5, 20)      # Replikace: opakuj hodnotu 5 celkem 20krát
 
# Vektor textových řetězců
c("A", "B", "C") # Složky musí být striktně v uvozovkách
 
# Implicitní konverze:
# Pokud do c() vložíte různé typy,
# R je převede na nejflexibilnější typ (text).
c("A", 1, "C", 4)   # Čísla 1 a 4 se vnitřně změní na "1" and "4"
 
# Příklad: Vektor všech sudých čísel z intervalu (10, 30)
x <- seq(12, 28, 2)
x
 
# Indexování a výběr prvků
x[1]         # První prvek vektoru x
x[-1]        # Všechny prvky vektoru x KROMĚ prvního
x[c(1, 5)]   # První a pátý prvek vektoru x
x[3:8]       # Třetí až osmý prvek vektoru x
 
# Podmíněný výběr (Filtrování na základě logických podmínek)
x[x > 20]             # Vrátí pouze prvky, které splňují x > 20
x[x > 14 & x < 20]    # Filtrace s logickým "A ZÁROVEŇ"
x[x < 14 | x > 20]    # Filtrace s logickým "NEBO"
 
# Modifikace prvků vektoru pomocí indexace a přiřazení
x
x[2] <- 0        # Přepíše druhý prvek vektoru hodnotou 0
x
x
x[x < 20] <- 0   # Hromadný přepis: všechny prvky menší než 20 na 0
x
 
# .....................................
# Faktor reprezentuje kategoriální data
# .....................................
 
# Rozdíl mezi textem a faktorem:
vel <- c("S", "S", "M", "L", "XL", "M", "L")
vel   # Obyčejný textový vektor
 
velikosti <- factor(c("S", "S", "M", "L", "XL", "M", "L"))
velikosti   # Vektor typu factor – pod výpisem vidíme přehled "Levels"
 
# Zjištění povolených variant (kategorií) proměnné
levels(velikosti)
 
# Ruční definice pořadí kategorií
velikosti <- factor(velikosti, levels = c("S", "M", "L", "XL"))
table(velikosti)  # Tabulka četností jednotlivých kategorií
 
# Přejmenování kategorií pomocí argumentu labels
velikosti2 <- factor(
  velikosti,
  levels = c("S", "M", "L", "XL"),
  labels = c("small", "medium", "large", "extra large")
)
table(velikosti2)
 
# Využití labels ke slučování kategorií
velikosti3 <- factor(
  velikosti,
  levels = c("S", "M", "L", "XL"),
  labels = c("S", "M", "L a větší", "L a větší")
)
table(velikosti3)
levels(velikosti3)
 
# ......
# Matice
# ......
 
# Dvourozměrné pole. Všechny buňky musí obsahovat shodný datový typ.
 
# Plnění matice po sloupcích (byrow = FALSE, výchozí nastavení R)
A <- matrix(c(3, 4, 6, 7, 3, 2), nrow = 2, ncol = 3, byrow = FALSE)
 
# Plnění matice po řádcích (byrow = TRUE)
B <- matrix(c(3, 4, 6, 7, 3, 2), nrow = 2, byrow = TRUE)
 
C <- matrix(c(3, 4, 6, 7, 3, 2), nrow = 3, byrow = FALSE)
 
# Ukázka implicitní konverze v matici
# přítomnost textu převede celou matici na typ character
D <- matrix(c(3, "A", 6, "B", 3, "C"), nrow = 3, ncol = 2)
D
 
# Indexování matic [řádek, sloupec]
A
A[1, 3]     # Prvek v 1. řádku a 3. sloupci
A[1, ]      # Výběr celého prvního řádku (vypíše se jako vektor)
A[, 2:3]    # Výběr všech řádků, ale pouze z 2. a 3. sloupce
 
# Matice a matematické operace
A
B
A + B       # Sčítání matic (prvek po prvku)
A - B       # Odčítání matic (prvek po prvku)
A * B       # Skalární násobení (prvek po prvku)
 
# Maticové násobení reprezentuje operátor `%*%`
# počet sloupců první matice se musí rovnat počtu řádků druhé.
 
# Násobíme např. matici A (2x3) s maticí C (3x2):
A
C
A %*% C     # Výsledkem je maticový součin o rozměru (2x2)
 
# Praktické využití:
# Tvorba kontingenčních / sdružených tabulek četností
# Zadání: Počty triček na skladě Dámská: 10xS, 15xM, 2xL, 4xXL;
#                                Pánská: 8xS, 9xM, 2xL, 10xXL)
tabulka <- matrix(
  c(10, 15, 2, 4,
    8, 9, 2, 10),
  ncol = 2,
  byrow = FALSE
)
 
# Pojmenování dimenzí matice pro přehlednost výstupu
rownames(tabulka) <- c("S", "M", "L", "XL")
colnames(tabulka) <- c("damske", "panske")
tabulka
 
# .........................
# Datový rámec (data.frame)
# .........................
# Jde o tabulku, kde jednotlivé sloupce mohou mít RŮZNÉ datové typy
 
data <- data.frame(
  jmena = c("Alice", "Bob"),
  vek = c(25, 30),
  student = c(TRUE, FALSE)
)
 
data
View(data) # Spustí vestavěný grafický prohlížeč tabulky v RStudiu
# Odkazování a extrakce konkrétních sloupců z data.frame
data[["jmena"]] # Vrátí sloupec jako vektor
data$jmena      # Rychlý a v R nejběžnější přístup k proměnné
 
 
# ...........................
# Definování vlastních funkcí
# ...........................
 
# Funkce definujeme pomocí klíčového slova function().
# V kulatých závorkách určíme vstupní argumenty, ve složených {} tělo algoritmu.
funkce <- function(x, y) {
  (x^2) + (y^2) # R automaticky vrací výsledek posledního řádku (netřeba psát return)
}
 
# Volání uživatelské funkce
funkce(10, 15)
 
# Definice funkce s výchozím (defaultním) nastavením argumentu
pozdrav <- function(osloveni = "Martino") {
  paste0("Ahoj ", osloveni, "!")
}
 
pozdrav()            # Argument vynechán – použije se výchozí "Martino"
pozdrav("všichni")   # Argument zadán – výchozí hodnota se přemaže
 
# paste0(): Slučuje textové řetězce dohromady bez mezer
 
# ..........................................
# POZOR – častá chyba při převodu na numeric
#...........................................
 
# Pokud se pokusíme převést text, který nelze interpretovat jako číslo,
# R dosadí vnitřní indikační hodnotu NA (Not Available - chybějící údaj)
 
as.numeric("123")     # Funguje: text obsahuje pouze číselné znaky
as.numeric("123abc")  # Selže: generuje NA a Warning
 
# Ukázka chování na vektoru dat:
test <- c("10", "20", "abc", "30")
test
as.numeric(test)      # Výstup: [1] 10 20 NA 30 + Varování "NAs introduced by coercion"
 
# DOPORUČENÍ Z PRAXE: Práce s nečistými daty
# Před nuceným přetypováním nejprve
# prozkoumáme strukturu a unikátní hodnoty.
unique(test)
 
# Ruční ošetření známé anomálie
# nahrazení textu "abc" za systémové NA
test[test == "abc"] <- NA
as.numeric(test)
 
# Alternativa: Potlačení varovných hlášení
# vhodné pro čisté automatické skripty)
suppressWarnings(as.numeric(test))
# Varování se neskryje, pouze se nezobrazí uživateli
Zobrazit Galériu

Ľuboslav Lacko­

Všetky autorove články
jazyk R Martina Litschmannová

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať