defa u lt arg u ments
play

Defa u lt arg u ments IN TR OD U C TION TO W R ITIN G FU N C TION - PowerPoint PPT Presentation

Defa u lt arg u ments IN TR OD U C TION TO W R ITIN G FU N C TION S IN R Richie Co on C u rric u l u m Architect at DataCamp toss _ coin () tro u bles toss_coin <- function(n_flips, p_head) { coin_sides <- c("head",


  1. Defa u lt arg u ments IN TR OD U C TION TO W R ITIN G FU N C TION S IN R Richie Co � on C u rric u l u m Architect at DataCamp

  2. toss _ coin () tro u bles toss_coin <- function(n_flips, p_head) { coin_sides <- c("head", "tail") weights <- c(p_head, 1 - p_head) sample(coin_sides, n_flips, replace = TRUE, prob = weights) } Set the defa u lt in the signat u re toss_coin <- function(n_flips, p_head = 0.5) { coin_sides <- c("head", "tail") weights <- c(p_head, 1 - p_head) sample(coin_sides, n_flips, replace = TRUE, prob = weights) } INTRODUCTION TO WRITING FUNCTIONS IN R

  3. A template w ith defa u lts my_fun <- function(data_arg1, data_arg2, detail_arg1 = default1) { # Do something } INTRODUCTION TO WRITING FUNCTIONS IN R

  4. Other t y pes of defa u lt args(median) function (x, na.rm = FALSE, ...) library(jsonlite) args(fromJSON) function (txt, simplifyVector = TRUE, simplifyDataFrame = simplifyVector, simplifyMatrix = simplifyVector, flatten = FALSE, ...) INTRODUCTION TO WRITING FUNCTIONS IN R

  5. NULL defa u lts B y con v ention , this means The f u nction w ill do some special handling of this arg u ment . Please read the docs . args(set.seed) function (seed, kind = NULL, normal.kind = NULL) INTRODUCTION TO WRITING FUNCTIONS IN R

  6. Categorical defa u lts 1. Pass a character v ector in the signat u re . 2. Call match.arg() in the bod y. args(prop.test) function (x, n, p = NULL, alternative = c("two.sided", "less", "greater"), conf.level = 0.95, correct = TRUE) Inside the bod y alternative <- match.arg(alternative) INTRODUCTION TO WRITING FUNCTIONS IN R

  7. C u tting a v ector b y q u antile cut_by_quantile <- function(x, n, na.rm, labels, interval_type) { probs <- seq(0, 1, length.out = n + 1) quantiles <- quantile(x, probs, na.rm = na.rm, names = FALSE) right <- switch(interval_type, "(lo, hi]" = TRUE, "[lo, hi)" = FALSE) cut(x, quantiles, labels = labels, right = right, include.lowest = TRUE) } x : A n u meric v ector to c u t n : The n u mber of categories to c u t x into na.rm : Sho u ld missing v al u e be remo v ed ? labels : Character labels for the categories interval_type : Sho u ld ranges be open on the le � or right ? INTRODUCTION TO WRITING FUNCTIONS IN R

  8. Cat heart w eights quantile(cats$Hwt) 0% 25% 50% 75% 100% 6.300 8.950 10.100 12.125 20.500 1 data ( cats , package = " MASS ") INTRODUCTION TO WRITING FUNCTIONS IN R

  9. C u tting b y q u antile cut(x, quantile(x)) INTRODUCTION TO WRITING FUNCTIONS IN R

  10. Let ' s practice ! IN TR OD U C TION TO W R ITIN G FU N C TION S IN R

  11. Passing arg u ments bet w een f u nctions IN TR OD U C TION TO W R ITIN G FU N C TION S IN R Richie Co � on C u rric u l u m Architect at DataCamp

  12. Calc u lating the geometric mean x %>% log() %>% mean() %>% exp() INTRODUCTION TO WRITING FUNCTIONS IN R

  13. Wrapping this in a f u nction calc_geometric_mean <- function(x) { x %>% log() %>% mean() %>% exp() } INTRODUCTION TO WRITING FUNCTIONS IN R

  14. Handling missing v al u es calc_geometric_mean <- function(x, na.rm = FALSE) { x %>% log() %>% mean(na.rm = na.rm) %>% exp() } INTRODUCTION TO WRITING FUNCTIONS IN R

  15. Using ... calc_geometric_mean <- function(x, ...) { x %>% log() %>% mean(...) %>% exp() } INTRODUCTION TO WRITING FUNCTIONS IN R

  16. The tradeoff Bene � ts Less t y ping for y o u No need to match signat u res Dra w backs Yo u need to tr u st the inner f u nction The interface is not as ob v io u s to u sers INTRODUCTION TO WRITING FUNCTIONS IN R

  17. Let ' s practice ! IN TR OD U C TION TO W R ITIN G FU N C TION S IN R

  18. Checking arg u ments IN TR OD U C TION TO W R ITIN G FU N C TION S IN R Richie Co � on C u rric u l u m Architect at DataCamp

  19. The geometric mean calc_geometric_mean <- function(x, na.rm = FALSE) { x %>% log() %>% mean(na.rm = na.rm) %>% exp() } calc_geometric_mean(letters) Error in log(.) : non-numeric argument to mathematical function INTRODUCTION TO WRITING FUNCTIONS IN R

  20. Checking for n u meric v al u es 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'. INTRODUCTION TO WRITING FUNCTIONS IN R

  21. asserti v e makes errors eas y INTRODUCTION TO WRITING FUNCTIONS IN R

  22. Checking t y pes of inp u ts assert_is_numeric() assert_is_character() is_data.frame() ... is_two_sided_formula() is_tskernel() INTRODUCTION TO WRITING FUNCTIONS IN R

  23. Using asserti v e to check 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'. INTRODUCTION TO WRITING FUNCTIONS IN R

  24. Checking x is positi v e 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 contains non-positive values. There was 1 failure: Position Value Cause 1 2 -1 too low INTRODUCTION TO WRITING FUNCTIONS IN R

  25. is _* f u nctions assert_is_numeric() is_numeric() ( ret u rns logical v al u e ) assert_all_are_positive() is_positive() ( ret u rns logical v ector ) is_non_positive() INTRODUCTION TO WRITING FUNCTIONS IN R

  26. C u stom checks 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. INTRODUCTION TO WRITING FUNCTIONS IN R

  27. Fi x ing inp u t use_first(c(1, 4, 9, 16)) [1] 1 Warning message: Only the first value of c(1, 4, 9, 16) (= 1) will be used. coerce_to(c(1, 4, 9, 16), "character") [1] "1" "4" "9" "16" Warning message: Coercing c(1, 4, 9, 16) to class ‘character’. INTRODUCTION TO WRITING FUNCTIONS IN R

  28. Fi x ing 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 Warning messages: 1: Only the first value of na.rm (= 1) will be used. 2: Coercing use_first(na.rm) to class ‘logical’. INTRODUCTION TO WRITING FUNCTIONS IN R

  29. Let ' s practice ! IN TR OD U C TION TO W R ITIN G FU N C TION S IN R

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend