Další užitečné triky

Zrychlení opakovaného Knit HTML

Pokud jste vytvořili časově náročnější dokument v R Markdown, což se stává například při kreslení grafů či analýze většího množství dat, může být opakované vytváření html dokumentu obtěžující. Přitom ale potřebujete editovat text, opravovat překlepy apod. Pomocí jednoduchého triku můžete proces Knit HTML výrazně urychlit.

Stačí, když v hlavičce každé sekce kódu v R uvedete parametr cache=TRUE.

```{r, cache=TRUE}
náročné výpočty...
```

Pokud chcete tuto volbu nastavit hromadně pro všechny bloky kódu v celém dokumentu, použijte na začátku souboru následující zaklínadlo.

```{r setoptions, echo=FALSE}
library(knitr)
opts_chunk$set(cache=TRUE)
```

Všechny bloky se zapnutou cache se provedou jen jednou. Teprve, pokud v nich samotných uděláte změnu, spustí se znovu. Jinak budou brány jejich výstupy z cache.

Příkaz sessionInfo()

Pokud chcete zaznamenat replikovatelný postup, použití R Markdown dokumentu je dobrým začátkem. Výhodou je, že kromě textu popisujícího experiment jsou zobrazeny i příkazy a jejich výstupy, takže si každý může postup zkontrolovat a případně sám znovu provést.

Problém ovšem je, že každý uživatel může mít trochu jinou verzi dílčích knihoven i samotného R. Přestože by většina základních postupů měla napříč různými verzemi knihoven poskytovat stejné výsledky, nemusí tomu tak být vždy. Proto je dobré uvést konkrétní verze všech částí, které jste k provedení programu použili. K tomu slouží následující příkaz.

sessionInfo()
## R version 4.3.1 (2023-06-16 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 18363)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Czech_Czechia.utf8  LC_CTYPE=Czech_Czechia.utf8   
## [3] LC_MONETARY=Czech_Czechia.utf8 LC_NUMERIC=C                  
## [5] LC_TIME=Czech_Czechia.utf8    
## 
## time zone: Europe/Prague
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] digest_0.6.32   R6_2.5.1        fastmap_1.1.1   xfun_0.39      
##  [5] cachem_1.0.8    knitr_1.43      htmltools_0.5.5 rmarkdown_2.23 
##  [9] cli_3.6.1       sass_0.4.6      jquerylib_0.1.4 compiler_4.3.1 
## [13] rstudioapi_0.14 tools_4.3.1     evaluate_0.21   bslib_0.5.0    
## [17] rlang_1.1.1     jsonlite_1.8.7

Výhodou je, pokud ho necháte přímo součástí R Markdown dokumentu, že bude vypisovat vždy ty verze knihoven, se kterými byl aktuální výsledný dokument vyroben.

Zkušení odborníci v něm pak najdou vše, co potřebují. Zvláště důležité je provedení tohoto příkazu v případě, že máte podezření na chybu v nějaké knihovně a žádáte o pomoc na internetových fórech. Uvést přesné verze použitých knihoven je pak naprostá samozřejmost.

Funkce dput()

Někdy bychom potřebovali obsah proměnné převést na programový kód, který by takovou proměnnou vytvořil. Slouží k tomu funkce dput().

datasets::islands
##           Africa       Antarctica             Asia        Australia 
##            11506             5500            16988             2968 
##     Axel Heiberg           Baffin            Banks           Borneo 
##               16              184               23              280 
##          Britain          Celebes            Celon             Cuba 
##               84               73               25               43 
##            Devon        Ellesmere           Europe        Greenland 
##               21               82             3745              840 
##           Hainan       Hispaniola         Hokkaido           Honshu 
##               13               30               30               89 
##          Iceland          Ireland             Java           Kyushu 
##               40               33               49               14 
##            Luzon       Madagascar         Melville         Mindanao 
##               42              227               16               36 
##         Moluccas      New Britain       New Guinea  New Zealand (N) 
##               29               15              306               44 
##  New Zealand (S)     Newfoundland    North America    Novaya Zemlya 
##               58               43             9390               32 
##  Prince of Wales         Sakhalin    South America      Southampton 
##               13               29             6795               16 
##      Spitsbergen          Sumatra           Taiwan         Tasmania 
##               15              183               14               26 
## Tierra del Fuego            Timor        Vancouver         Victoria 
##               19               13               12               82
dput(datasets::islands)
## c(Africa = 11506, Antarctica = 5500, Asia = 16988, Australia = 2968, 
## `Axel Heiberg` = 16, Baffin = 184, Banks = 23, Borneo = 280, 
## Britain = 84, Celebes = 73, Celon = 25, Cuba = 43, Devon = 21, 
## Ellesmere = 82, Europe = 3745, Greenland = 840, Hainan = 13, 
## Hispaniola = 30, Hokkaido = 30, Honshu = 89, Iceland = 40, Ireland = 33, 
## Java = 49, Kyushu = 14, Luzon = 42, Madagascar = 227, Melville = 16, 
## Mindanao = 36, Moluccas = 29, `New Britain` = 15, `New Guinea` = 306, 
## `New Zealand (N)` = 44, `New Zealand (S)` = 58, Newfoundland = 43, 
## `North America` = 9390, `Novaya Zemlya` = 32, `Prince of Wales` = 13, 
## Sakhalin = 29, `South America` = 6795, Southampton = 16, Spitsbergen = 15, 
## Sumatra = 183, Taiwan = 14, Tasmania = 26, `Tierra del Fuego` = 19, 
## Timor = 13, Vancouver = 12, Victoria = 82)

© 5. 1. 2016 Tomáš Bořil,