Создать функцию обертки для нескольких отдельных функций - PullRequest
0 голосов
/ 27 января 2020

Я работаю над очисткой данных нескольких источников данных. Ради этого вопроса я создал пример примера. 3, надеюсь, простых вопроса

  1. Каков наилучший способ создания «основной функции», которая вызывает правильную функцию очистки и возвращает запрашиваемую df? У меня есть один способ сделать это ниже
  2. Нужно ли мне создавать отдельную мастер-функцию, если я хочу связать строку (я предполагаю, используя purrr::map_dfr) результаты в аргументе типа? Ex. Получить df для всех store вариантов, для type = "snack"?
  3. Допустим, я хочу использовать write_csv, чтобы написать отдельный .csv файл для каждого store и type, это аргумент, который я мог бы добавить в функцию для достижения вопроса 2? Как мне перейти к следующему выбору «store», если нет строк / ошибок без записи пустого файла .csv?

Пример функций:

library(tidyverse)

# function 1
get_focus_brands <- function(store = c("cinnabon", "auntie annes"),
                             type = c("snack", "drinks"),
                             clean_columns = TRUE){

  df <- tibble(
    ITEM_NAME = c("cinnabon","cookie"),
    price = c(3.99, 2.99)
  )

  if (clean_columns == TRUE) {
    df <- df %>% janitor::clean_names()
  }

  df
}

# function 2
get_bk <- function(type = c("snack", "drinks"),
                   clean_columns = TRUE){

  df <- tibble(
    ITEM_NAME = c("soft serve vanilla","cookie"),
    price = c(3.99, 2.99)
  )

  if(clean_columns == TRUE){
    df <- df %>% janitor::clean_names()
  }

  df

}
# master function that calls get function based on store name choise
get_fast_food <- function(store, ...){
  switch(store,
         "cinnabon" = 
           get_focus_brands(...),
         "auntie annes" = 
           get_focus_brands(...),
         "burger king" = 
           get_bk(...))
}

df <- get_fast_food(store = "cinnabon",
                    type = "snack",
                    clean_columns = TRUE)

df
...