Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Programování v R Úlohy k procvičení

Logo Matematická biologie

Úlohy k procvičení

Cvičení 1.Vytvořte dávku odd.R, uvnitř ní definujte vektor v s hodnotami 1, 3, 4, 5, 6, 7, 10 a výstupní proměnnou pocet, která vrátí počet lichých čísel vektoru v.

Řešení

v <- c(1, 3, 4, 5, 6, 7, 10)
 
sude <- v %% 2 
pocet <- sum(sude) 
 
cat('Pocet lichych cisel: ', pocet, 'n')
... dávku uložit s názvem odd.R, načítání a spouštění: source("odd.R")

 

 

 

 

 

 

Cvičení 2. Vytvořte funkci oddf.R, která pro libovolný vstupní vektor či vrátí počet lichých čísel. Zkontrolujte, zda vstupní objekt obsahuje pouze numerické hodnoty a zda jsou všechny tyto hodnoty celá čísla.

Řešení

oddf <- function(x){ 
 
if (is.numeric(x) & is.real(x)){ 
pocet <- sum(x %% 2) 
 
return(pocet) 
}... funkci uložit s názvem odd.R,
načítání funkce: source("odd.R"),
spouštění funkce: pocet <- oddf(v)

 

 

 

 

 

 

 

Cvičení 3.Vytvořte funkci mattovec.R, která pro vstupní matici vypíše vektor jejích po sloupcích seřazených prvků. Zajistěte, aby pro diagonální matice byla vypisována pouze diagonála a pro dolní/horní trojúhelníkové matice pouze dolní/horní část.

Řešení

mattovec <- function(A){ 
 
if (sum(A - diag(diag(A))) == 0){ 
vec <- diag(A)
}
else if (sum(A[!lower.tri(A, diag=T)]) == 0){ 
vec <- A[lower.tri(A, diag=T)]
}
else if (sum(A[!upper.tri(A, diag=T)]) == 0){ 
vec <- A[upper.tri(A, diag=T)] 
else vec <- as.vector(A) 
  
return(vec) 
}
source("mattovec.R"), vec <- mattovec(matrix(1:4, 2))

 

 

 

 

 

 

 

 

 

 

 

Cvičení 4. Vytvořte funkci product.R, která pro dvě vstupní celočíselné hodnoty n a k vrátí jejich součin, aniž by byla použita operace násobení. Povolena je pouze operace sčítání.

Řešení

product <- function(n, k){ 
 
if (round(n)-n != 0 | round(k)-k != 0){ 
stop('Nejde o celociselne hodnoty!') 
else if (n==0 | k==0){ 
soucin <- 0 
}
else {soucin <- 0 
for (i in 1:k){
soucin <- soucin + n 
}} 
 
return(soucin) 
source("product.R"), soucin <- product(2, 3)

 

 

 

 

 

 

 

 

 

 

 

Cvičení 5. Pro usnadnění práce rybářům vytvořte funkci ryby.R, která pro vstupní vektor představující hmotnosti postupně vylovených ryb rybáře upozorní, kdy je třeba dávat další ryby do nové kádě. Nosnost každé kádě je 20 kg. Kolik kádí budou rybáři pro svůj úlovek potřebovat (výstupní proměnná kad)? Ošetřete, aby váhy vylovených ryb byla pouze kladná reálná čísla. 
Funkci vyzkoušejte na náhodně vygenerovaném vektoru hmotností 25 ryb s hmotnostmi mezi 1-5 kg, hmotnosti zaokrouhlete na jedno desetinné místo.

Řešení

ryby <- function(x){ 
 
kad <- 0 
 
if (all(is.real(x) & x>0)){ 
while (sum(x) >= 50){ 
index <- max(which(cumsum(x) <= 20)) 
x <- x[index:length(x)] 
kad <- kad + 1 
 } 
 } 
else stop("Nejedna se o vektor kladnych realnych cisel!") 
 
return(kad) 
}
source("ryby.R")
r <- round(runif(min=1, max=5, n=25), digits=1)
kad <- ryby(r)

 

 

 

 

 

 

 

 

 

 

 

 

 

Cvičení 6. Soubor les.dat obsahuje informace o šířce kmene 45 stromů ve dvou lokalitách lesa. Použijte vhodné příkazy pro zjištění průměrné, minimální a maximální šířky kmene pro každou z lokalit.

Řešení

load("les.dat")
tapply(les$sirka, INDEX=les$lokalita, mean)
tapply(les$sirka, INDEX=les$lokalita, min)
tapply(les$sirka, INDEX=les$lokalita, max)

 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity