Zdroj: https://physics.ujep.cz/~jskvor/ZZD/ZZD-cv2.html

rm(list=ls())
library(dplyr)
library(DescTools)

Definujte funkci fibonacci, která bude mít jeden vstupní parametr. Tento parametr bude udávat počet členů Fibonacciho posloupnosti, které budou vráceny na výstupu. Fibonacciho posloupnost je definována rekurentním vztahem xi=xi−1+xi−2, kde x1=0 a x2=1

fibonacci <- function(n){
  x1 <- 0
  x2 <- 1
  i <- 0
  if (n > 2){
  while(i < n){
    x <- x1 + x2
    x1 <- x2
    x2 <- x
    i <- i + 1
  }
  }
  return(x)
}

fibonacci(6)
[1] 13

Definujte funkci pro řešení kořenů kvadratické rovnice ax2+bx+c=0 Parametry a, b a c budou zadány jako vstupy funkce. Na základě hodnoty diskriminantu rozhodněte, jaká řešení rovnice má. Funkce vždy vrátí vektor dvou hodnot

kvadrkor <- function(a,b,c){
  disc <- b*b-4*a*c
  
  if(disc < 0){
    x1 <- "na"
    x2 <- "na"
  }else if(disc == 0){
    x1 <- (-b)/2*a
    x2 <- x1
  }else{
    x1 <- ((-b) + sqrt(disc)) / 2*a
    x2 <- ((-b) - sqrt(disc)) / 2*a
  }
  return(c(x1,x2))
}

kvadrkor(2,-63,8)
[1] 125.4899992   0.5100008

Využijte vestavěnou tabulku iris a zkontrolujte její strukturu. Jaký je počet řádků a sloupců? Jaké obsahuje datové typy?

str(iris)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
head(iris)
colnames(iris)[2]
[1] "Sepal.Width"
for(i in 1:4){
  print(colnames(iris)[i])
  print(mean(iris[,i]))
  print(sd(iris[,i]))
  print("")
}
[1] "Sepal.Length"
[1] 5.843333
[1] 0.8280661
[1] ""
[1] "Sepal.Width"
[1] 3.057333
[1] 0.4358663
[1] ""
[1] "Petal.Length"
[1] 3.758
[1] 1.765298
[1] ""
[1] "Petal.Width"
[1] 1.199333
[1] 0.7622377
[1] ""
summary(iris$Species)
    setosa versicolor  virginica 
        50         50         50 

Načtení tabulky z HTML

Získejte seznam všech tabulek z webu https://ki.ujep.cz/cs/historie/. Z druhé tabulky zkuste pomocí indexace logickou hodnotou vybrat řádky, pro které je hodnota ve sloupci “Dosud na UJEP” rovna textu “ANO”. Výsledek přidejte do seznamu jako novou tabulku.

Všechny tři tabulky uložte do xlsx dokumentu jako oddělené listy.

library(rvest)
URL <- "https://ki.ujep.cz/cs/historie/"
tables <- html_table(read_html(URL))
table2 <- data.frame(tables[2])
summary(table2)
      X1                 X2                 X3                 X4           
 Length:10          Length:10          Length:10          Length:10         
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
str(table2)
'data.frame':   10 obs. of  4 variables:
 $ X1: chr  "Jméno" "Doc. RNDr. Jan Kopka, CSc." "Ing. Zdeněk Fikar" "Ing. Mgr. Jiří Barilla" ...
 $ X2: chr  "Od" "1987" "1991" "1993" ...
 $ X3: chr  "Do" "1991" "1993" "1996" ...
 $ X4: chr  "Dosud na UJEP?" "NE" "NE" "ANO" ...
print(table2[1,])
colnames(table2) <- table2[1,]
table2 <- table2[-1,]
print(table2)
table3 <- table2[table2$`Dosud na UJEP?`=="ANO",]
install.packages("writexl")
library(writexl)

file_path <- "output.xlsx"
tbls_lst <- list(table, table2, table3)
for (i in seq_along(tbls_lst)){
  write_xlsx(tbls_lst[i], path = file_path, sheet = paste0("Table_", i))
}
LS0tDQp0aXRsZTogIkNWXzIiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpaZHJvajogIGh0dHBzOi8vcGh5c2ljcy51amVwLmN6L35qc2t2b3IvWlpEL1paRC1jdjIuaHRtbA0KYGBge3J9DQpybShsaXN0PWxzKCkpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShEZXNjVG9vbHMpDQpgYGANCg0KIERlZmludWp0ZSBmdW5rY2kgZmlib25hY2NpLCBrdGVyw6EgYnVkZSBtw610IGplZGVuIHZzdHVwbsOtIHBhcmFtZXRyLg0KIFRlbnRvIHBhcmFtZXRyIGJ1ZGUgdWTDoXZhdCBwb8SNZXQgxI1sZW7FryBGaWJvbmFjY2lobyBwb3Nsb3Vwbm9zdGksIA0KIGt0ZXLDqSBidWRvdSB2csOhY2VueSBuYSB2w71zdHVwdS4gDQogRmlib25hY2NpaG8gcG9zbG91cG5vc3QgamUgZGVmaW5vdsOhbmEgcmVrdXJlbnRuw61tIHZ6dGFoZW0NCiB4aT14aeKIkjEreGniiJIyLCBrZGUgeDE9MCBhIHgyPTENCg0KYGBge3J9DQpmaWJvbmFjY2kgPC0gZnVuY3Rpb24obil7DQogIHgxIDwtIDANCiAgeDIgPC0gMQ0KICBpIDwtIDANCiAgaWYgKG4gPiAyKXsNCiAgd2hpbGUoaSA8IG4pew0KICAgIHggPC0geDEgKyB4Mg0KICAgIHgxIDwtIHgyDQogICAgeDIgPC0geA0KICAgIGkgPC0gaSArIDENCiAgfQ0KICB9DQogIHJldHVybih4KQ0KfQ0KDQpmaWJvbmFjY2koNikNCmBgYA0KDQogRGVmaW51anRlIGZ1bmtjaSBwcm8gxZllxaFlbsOtIGtvxZllbsWvIGt2YWRyYXRpY2vDqSByb3ZuaWNlDQogYXgyK2J4K2M9MA0KIFBhcmFtZXRyeSBhLCBiIGEgYyBidWRvdSB6YWTDoW55IGpha28gdnN0dXB5IGZ1bmtjZS4NCiBOYSB6w6FrbGFkxJsgaG9kbm90eSBkaXNrcmltaW5hbnR1IHJvemhvZG7Em3RlLCBqYWvDoSDFmWXFoWVuw60gcm92bmljZSBtw6EuDQogRnVua2NlIHbFvmR5IHZyw6F0w60gdmVrdG9yIGR2b3UgaG9kbm90DQpgYGB7cn0NCmt2YWRya29yIDwtIGZ1bmN0aW9uKGEsYixjKXsNCiAgZGlzYyA8LSBiKmItNCphKmMNCiAgDQogIGlmKGRpc2MgPCAwKXsNCiAgICB4MSA8LSAibmEiDQogICAgeDIgPC0gIm5hIg0KICB9ZWxzZSBpZihkaXNjID09IDApew0KICAgIHgxIDwtICgtYikvMiphDQogICAgeDIgPC0geDENCiAgfWVsc2V7DQogICAgeDEgPC0gKCgtYikgKyBzcXJ0KGRpc2MpKSAvIDIqYQ0KICAgIHgyIDwtICgoLWIpIC0gc3FydChkaXNjKSkgLyAyKmENCiAgfQ0KICByZXR1cm4oYyh4MSx4MikpDQp9DQoNCmt2YWRya29yKDIsLTYzLDgpDQpgYGANCiBWeXXFvmlqdGUgdmVzdGF2xJtub3UgdGFidWxrdSBpcmlzIGEgemtvbnRyb2x1anRlIGplasOtIHN0cnVrdHVydS4NCiBKYWvDvSBqZSBwb8SNZXQgxZnDoWRrxa8gYSBzbG91cGPFrz8gSmFrw6kgb2JzYWh1amUgZGF0b3bDqSB0eXB5Pw0KYGBge3J9DQpzdHIoaXJpcykNCmhlYWQoaXJpcykNCmNvbG5hbWVzKGlyaXMpWzJdDQpmb3IoaSBpbiAxOjQpew0KICBwcmludChjb2xuYW1lcyhpcmlzKVtpXSkNCiAgcHJpbnQobWVhbihpcmlzWyxpXSkpDQogIHByaW50KHNkKGlyaXNbLGldKSkNCiAgcHJpbnQoIiIpDQp9DQoNCnN1bW1hcnkoaXJpcyRTcGVjaWVzKQ0KYGBgDQogTmHEjXRlbsOtIHRhYnVsa3kgeiBIVE1MDQogDQogWsOtc2tlanRlIHNlem5hbSB2xaFlY2ggdGFidWxlayB6IHdlYnUgaHR0cHM6Ly9raS51amVwLmN6L2NzL2hpc3RvcmllLy4NCiBaIGRydWjDqSB0YWJ1bGt5IHprdXN0ZSBwb21vY8OtIGluZGV4YWNlIGxvZ2lja291IGhvZG5vdG91IHZ5YnJhdCDFmcOhZGt5LA0KIHBybyBrdGVyw6kgamUgaG9kbm90YSB2ZSBzbG91cGNpIOKAnERvc3VkIG5hIFVKRVDigJ0gcm92bmEgdGV4dHUg4oCcQU5P4oCdLiANCiBWw71zbGVkZWsgcMWZaWRlanRlIGRvIHNlem5hbXUgamFrbyBub3ZvdSB0YWJ1bGt1Lg0KDQogVsWhZWNobnkgdMWZaSB0YWJ1bGt5IHVsb8W+dGUgZG8geGxzeCBkb2t1bWVudHUgamFrbyBvZGTEm2xlbsOpIGxpc3R5Lg0KYGBge3J9DQpsaWJyYXJ5KHJ2ZXN0KQ0KVVJMIDwtICJodHRwczovL2tpLnVqZXAuY3ovY3MvaGlzdG9yaWUvIg0KdGFibGVzIDwtIGh0bWxfdGFibGUocmVhZF9odG1sKFVSTCkpDQp0YWJsZTIgPC0gZGF0YS5mcmFtZSh0YWJsZXNbMl0pDQpzdW1tYXJ5KHRhYmxlMikNCnN0cih0YWJsZTIpDQpwcmludCh0YWJsZTJbMSxdKQ0KY29sbmFtZXModGFibGUyKSA8LSB0YWJsZTJbMSxdDQp0YWJsZTIgPC0gdGFibGUyWy0xLF0NCnByaW50KHRhYmxlMikNCnRhYmxlMyA8LSB0YWJsZTJbdGFibGUyJGBEb3N1ZCBuYSBVSkVQP2A9PSJBTk8iLF0NCmBgYA0KDQpgYGB7cn0NCmluc3RhbGwucGFja2FnZXMoIndyaXRleGwiKQ0KbGlicmFyeSh3cml0ZXhsKQ0KDQpmaWxlX3BhdGggPC0gIm91dHB1dC54bHN4Ig0KdGJsc19sc3QgPC0gbGlzdCh0YWJsZSwgdGFibGUyLCB0YWJsZTMpDQpmb3IgKGkgaW4gc2VxX2Fsb25nKHRibHNfbHN0KSl7DQogIHdyaXRlX3hsc3godGJsc19sc3RbaV0sIHBhdGggPSBmaWxlX3BhdGgsIHNoZWV0ID0gcGFzdGUwKCJUYWJsZV8iLCBpKSkNCn0NCmBgYA0K