library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.2
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.5
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.4 ✔ forcats 0.5.2
## Warning: package 'readr' was built under R version 4.2.3
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(nycflights13)
## Warning: package 'nycflights13' was built under R version 4.2.3
library(Lahman)
## Warning: package 'Lahman' was built under R version 4.2.3
Kita sering ingin menggunakan dua atau lebih fungsi transformasi
secara berurutan. Misalnya, kita ingin memfilter mobil
yang mpgmenempuh jarak kurang dari 20 mil per galon di
jalan raya, lalu mengurutkan mobil yang tersisa menurut ukuran mesin
( displ) dalam urutan menurun. Ada beberapa cara naif untuk
melakukan ini. Satu adalah:
arrange(filter(mpg, hwy >= 20), desc(displ))
## # A tibble: 156 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 chevrolet corvette 7 2008 8 manu… r 15 24 p 2sea…
## 2 chevrolet corvette 6.2 2008 8 manu… r 16 26 p 2sea…
## 3 chevrolet corvette 6.2 2008 8 auto… r 15 25 p 2sea…
## 4 chevrolet corvette 5.7 1999 8 manu… r 16 26 p 2sea…
## 5 chevrolet corvette 5.7 1999 8 auto… r 15 23 p 2sea…
## 6 ford mustang 5.4 2008 8 manu… r 14 20 p subc…
## 7 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 8 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 9 pontiac grand prix 5.3 2008 8 auto… f 16 25 p mids…
## 10 ford mustang 4.6 1999 8 auto… r 15 21 r subc…
## # … with 146 more rows
Menyusun fungsi dengan cara ini sering kali bukan praktik yang baik karena akan sulit melacak tanda kurung, terutama jika Anda menumpuk beberapa fungsi. Metode yang sedikit lebih baik (namun masih belum ideal) adalah melakukan satu transformasi pada satu waktu, menyimpan hasil antara di sepanjang jalan:
filtered_mpg <- filter(mpg, hwy >= 20)
arrange(filtered_mpg, desc(cyl))
## # A tibble: 156 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a6 quattro 4.2 2008 8 auto… 4 16 23 p mids…
## 2 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 3 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 4 chevrolet corvette 5.7 1999 8 manu… r 16 26 p 2sea…
## 5 chevrolet corvette 5.7 1999 8 auto… r 15 23 p 2sea…
## 6 chevrolet corvette 6.2 2008 8 manu… r 16 26 p 2sea…
## 7 chevrolet corvette 6.2 2008 8 auto… r 15 25 p 2sea…
## 8 chevrolet corvette 7 2008 8 manu… r 15 24 p 2sea…
## 9 ford mustang 4.6 1999 8 auto… r 15 21 r subc…
## 10 ford mustang 4.6 1999 8 manu… r 15 22 r subc…
## # … with 146 more rows
Pendekatan ini menghindari penyatuan, tetapi menimbulkan redundansi:
nama filtered_mpgdiperkenalkan dan kemudian segera
digunakan sebagai argumen di dalam arrange. Akan jauh lebih
baik untuk menggabungkan langkah-langkah ini. Untungnya,
tidyverse memiliki cara untuk melakukannya dengan
menggunakan konstruksi yang disebut pipe .
Pipe menyediakan cara untuk melewati kebutuhan untuk memberi nama kumpulan data perantara, hanya untuk segera memasukkannya ke dalam fungsi transformasi berikutnya sejalan. Inilah cara transformasi ganda di atas dilakukan dengan menggunakan pipe:
mpg %>%
filter(hwy >= 20) %>%
arrange(desc(cyl))
## # A tibble: 156 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a6 quattro 4.2 2008 8 auto… 4 16 23 p mids…
## 2 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 3 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 4 chevrolet corvette 5.7 1999 8 manu… r 16 26 p 2sea…
## 5 chevrolet corvette 5.7 1999 8 auto… r 15 23 p 2sea…
## 6 chevrolet corvette 6.2 2008 8 manu… r 16 26 p 2sea…
## 7 chevrolet corvette 6.2 2008 8 auto… r 15 25 p 2sea…
## 8 chevrolet corvette 7 2008 8 manu… r 15 24 p 2sea…
## 9 ford mustang 4.6 1999 8 auto… r 15 21 r subc…
## 10 ford mustang 4.6 1999 8 manu… r 15 22 r subc…
## # … with 146 more rows
Kita harus membaca ini sebagai, “Mulailah dengan mpg,
masukkan ke filter, lalu masukkan hasilnya ke
arrange.” Kami menghindari penyatuan dan memasukkan nama
set data perantara. Operator %>%mengambil kumpulan data
yang mendahuluinya dan memasukkannya ke dalam fungsi yang
mengikutinya.
Pipe mengarah ke kode yang lebih jelas dan mudah dibaca, dan kami akan menggunakannya terus-menerus.