Balíčky a jmenné prostory

Defenzivní programování v R

Dr. Colin Gillespie

Jumping Rivers

Globální prostředí

  • Výchozí prostředí je .GlobalEnv
  • Objekty jsou uloženy v prostředích
  • Obsah zobrazíte pomocí ls()
  • Toto prostředí se rychle zaplní
  • Objekty se začnou míchat
n
# or did I want
N
Defenzivní programování v R

Balíčky a prostředí

  • Balíčky používají jmenné prostory jako prostor pro názvy
    • Jmenný prostor si lze představit jako schránku s balíčkem
  • Jmenný prostor pomáhá udržovat pořádek
    • Podobně jako složky
Defenzivní programování v R

Exportované funkce

  • library() poskytuje přímý přístup ke schránce balíčku
  • library("dplyr") zpřístupní exportované funkce balíčku dplyr
## 238 exported functions
getNamespaceExports("dplyr")
  • Alternativně lze použít :: pro přímý přístup k funkci
## The filter function from dplyr
dplyr::filter
Defenzivní programování v R

Velké mysli myslí stejně

  • Autoři různých balíčků někdy používají stejný název funkce
## The filter() function
stats::filter()
dplyr::filter()
  • Když napíšu filter(), kterou verzi dostanu?
  • Záleží na pořadí načtení balíčků!
Defenzivní programování v R

Velké mysli myslí stejně

  • Na pomoc přichází search()
search()
# [1] ".GlobalEnv"         "package:dplyr"      "package:stats"  
# <Other packages>
Defenzivní programování v R

Buďte obezřetní

Konflikty jmenných prostorů nejsou jen nepříjemné

  • Mohou způsobit těžko odhalitelné chyby
Defenzivní programování v R

Balíček conflicted vyžaduje explicitní volbu funkce

library("conflicted")
library("dplyr")
filter
#Error: [conflicted] `filter` found in 2 packages.
#Either pick the one you want with `::` 
# * dplyr::filter
# * stats::filter
#Or declare a preference with `conflict_prefer()`
# * conflict_prefer("filter", "dplyr")
# * conflict_prefer("filter", "stats")
Defenzivní programování v R

Čas se probudit

Defenzivní programování v R

Preparing Video For Download...