Memeriksa argumen

Pengantar Penulisan Fungsi di R

Richie Cotton

Data Evangelist at DataCamp

Rata-rata geometri

calc_geometric_mean <- function(x, na.rm = FALSE) {
  x %>%
    log() %>%
    mean(na.rm = na.rm) %>%
    exp()
}
calc_geometric_mean(letters)
Error in log(.) : argumen non-numerik untuk fungsi matematika
Pengantar Penulisan Fungsi di R

Memeriksa nilai numerik

calc_geometric_mean <- function(x, na.rm = FALSE) {

if(!is.numeric(x)) {
stop("x is not of class 'numeric'; it has class '", class(x), "'.")
}
x %>% log() %>% mean(na.rm = na.rm) %>% exp() }
Error in calc_geometric_mean(letters) : 
  x is not of class 'numeric'; it has class 'character'.
Pengantar Penulisan Fungsi di R

assertive memudahkan error

shutterstock_743531290-with-text.jpg

Pengantar Penulisan Fungsi di R

Memeriksa tipe masukan

  • assert_is_numeric()
  • assert_is_character()
  • is_data.frame()
  • ...
  • is_two_sided_formula()
  • is_tskernel()
Pengantar Penulisan Fungsi di R

Menggunakan assertive untuk memeriksa x

calc_geometric_mean <- function(x, na.rm = FALSE) {

assert_is_numeric(x)
x %>% log() %>% mean(na.rm = na.rm) %>% exp() }
 Error in calc_geometric_mean(letters) : 
  is_numeric : x is not of class 'numeric'; it has class 'character'.
Pengantar Penulisan Fungsi di R

Memeriksa x positif

calc_geometric_mean <- function(x, na.rm = FALSE) {
  assert_is_numeric(x)

assert_all_are_positive(x)
x %>% log() %>% mean(na.rm = na.rm) %>% exp() }
calc_geometric_mean(c(1, -1))
Error in calc_geometric_mean(c(1, -1)) :
  is_positive : x berisi nilai non-positif.
Ada 1 kegagalan:
  Posisi Nilai   Penyebab
1        2    -1 terlalu rendah
Pengantar Penulisan Fungsi di R

Fungsi is_*

  • assert_is_numeric()
  • assert_all_are_positive()
  • is_numeric() (mengembalikan nilai logis)
  • is_positive() (mengembalikan vektor logis)
  • is_non_positive()
Pengantar Penulisan Fungsi di R

Pemeriksaan kustom

calc_geometric_mean <- function(x, na.rm = FALSE) {
  assert_is_numeric(x)

if(any(is_non_positive(x), na.rm = TRUE)) { stop("x contains non-positive values, so the geometric mean makes no sense.") }
x %>% log() %>% mean(na.rm = na.rm) %>% exp() }
calc_geometric_mean(c(1, -1))
Error in calc_geometric_mean(c(1, -1)) : 
  x contains non-positive values, so the geometric mean makes no sense.
Pengantar Penulisan Fungsi di R

Memperbaiki masukan

use_first(c(1, 4, 9, 16))
[1] 1
Pesan peringatan:
Hanya nilai pertama dari c(1, 4, 9, 16) (= 1) yang akan digunakan.
coerce_to(c(1, 4, 9, 16), "character")
[1] "1"  "4"  "9"  "16"
Pesan peringatan:
Mengonversi c(1, 4, 9, 16) ke kelas ‘character’.
Pengantar Penulisan Fungsi di R

Memperbaiki na.rm

calc_geometric_mean <- function(x, na.rm = FALSE) {
  assert_is_numeric(x)
  if(any(is_non_positive(x), na.rm = TRUE)) {
    stop("x contains non-positive values, so the geometric mean makes no sense.")
  }

na.rm <- coerce_to(use_first(na.rm), target_class = "logical")
x %>% log() %>% mean(na.rm = na.rm) %>% exp() }
calc_geometric_mean(1:5, na.rm = 1:5)
[1] 2.605171
Pesan peringatan:
1: Hanya nilai pertama dari na.rm (= 1) yang akan digunakan. 
2: Mengonversi use_first(na.rm) ke kelas ‘logical’.
Pengantar Penulisan Fungsi di R

Ayo berlatih!

Pengantar Penulisan Fungsi di R

Preparing Video For Download...