Paketler ve Ad Alanları

Savunmacı R Programlama

Dr. Colin Gillespie

Jumping Rivers

Genel ortamınız

  • Varsayılan ortam .GlobalEnv'dir
  • Nesneler ortamlarda saklanır
  • İçeriği görmek için ls() kullanın
  • Bu ortam hızla dolar
  • Nesneleri karıştırmaya başlayabiliriz
n
# yoksa istediğim
N
Savunmacı R Programlama

Paketler ve ortamlar

  • Paketler, adlar için namespace kullanır
    • Ad alanını paketi içeren bir kutu gibi düşünebilirsiniz
  • Ad alanı düzeni korur
    • Klasörler gibi
Savunmacı R Programlama

Dışa aktarılan işlevler

  • library() size bu paket kutusuna doğrudan erişim verir
  • library("dplyr") size dplyr içindeki dışa aktarılan işlevlere doğrudan erişim sağlar
## 238 exported functions
getNamespaceExports("dplyr")
  • Alternatif olarak, :: ile bir işleve doğrudan erişebiliriz
## dplyr içindeki filter işlevi
dplyr::filter
Savunmacı R Programlama

Aynı fikirde zihinler

  • Bazen paket yazarları aynı işlev adını kullanır
## filter() işlevi
stats::filter()
dplyr::filter()
  • filter() yazarsam hangi sürüm çalışır?
  • Paket yükleme sırasına bağlı!
Savunmacı R Programlama

Aynı fikirde zihinler

  • Yardımına search() koşar
search()
# [1] ".GlobalEnv"         "package:dplyr"      "package:stats"  
# <Other packages>
Savunmacı R Programlama

Savunmacı olun

Ad alanı çakışmaları sadece can sıkıcı değildir

  • Teşhisi zor hatalara yol açabilir
Savunmacı R Programlama

conflicted paketi, işlev seçiminizi açık hale getirir

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")
Savunmacı R Programlama

Uyanma zamanı

Savunmacı R Programlama

Preparing Video For Download...