Paket dan Namespace

Pemrograman R Defensif

Dr. Colin Gillespie

Jumping Rivers

Global environment Anda

  • Lingkungan default adalah .GlobalEnv
  • Objek disimpan di environment
  • Untuk melihat isinya, gunakan ls()
  • Environment ini cepat penuh
  • Kita bisa mulai tertukar objek
n
# atau yang saya maksud
N
Pemrograman R Defensif

Paket dan environment

  • Paket memakai namespace sebagai ruang nama
    • Anggap namespace sebagai kotak yang berisi paket
  • Namespace membantu tetap rapi
    • Mirip folder
Pemrograman R Defensif

Fungsi yang diekspor

  • library() memberi akses langsung ke kotak paket ini
  • library("dplyr") memberi akses ke fungsi yang diekspor di dplyr
## 238 exported functions
getNamespaceExports("dplyr")
  • Atau gunakan :: untuk mengakses fungsi langsung
## Fungsi filter dari dplyr
dplyr::filter
Pemrograman R Defensif

Pikiran hebat bisa sama

  • Kadang penulis paket memakai nama fungsi yang sama
## Fungsi filter()
stats::filter()
dplyr::filter()
  • Jika saya ketik filter() versi mana yang dipakai?
  • Tergantung urutan paket dimuat!
Pemrograman R Defensif

Pikiran hebat bisa sama

  • search() jadi penolong
search()
# [1] ".GlobalEnv"         "package:dplyr"      "package:stats"  
# <Other packages>
Pemrograman R Defensif

Bersikap defensif

Bentrok namespace bukan sekadar merepotkan

  • Dapat menimbulkan bug yang sulit didiagnosis
Pemrograman R Defensif

Paket conflicted membantu Anda memilih fungsi secara eksplisit

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")
Pemrograman R Defensif

Saatnya fokus

Pemrograman R Defensif

Preparing Video For Download...