R/save_temp_data.R

Defines functions save_temp_data

Documented in save_temp_data

#' Save object as RDS file
#'
#' @param object R object
#' @param dir_to_save a character vector with the directory name. Default is NULL and save object in the "data/temp" if it exists.
#'
#' @importFrom fs dir_exists file_exists
#' @importFrom here here
#' @importFrom usethis ui_stop ui_field ui_todo ui_done ui_info
#'
#' @export
#'
#' @examples
#' \dontrun{
#' # create and save a R object
#' awesome <- "not too much!"
#' misc::create_dirs("ma-box")
#' save_temp_data(object = awesome, dir_to_save = "ma-box")
#' # using default directories from `misc::create_dirs()`
#' create_dirs()
#' so_good <- "Yep!"
#' save_temp_data(object = so_good)
#'
#' # reading many temp data
#' ext <- "\\.[rRdDsS]$"
#' # list files
#' files <- list.files(
#'   path = "data/temp",
#'   pattern = ext,
#'   full.names = TRUE
#' )
#' # loop over files
#' for (i in files) {
#'   # read temporary file
#'   tmp <- readRDS(file = i)
#'   # remove extension from filename
#'   obj_name <- gsub(
#'     pattern = ext,
#'     replacement = "",
#'     x = basename(i)
#'   )
#'   # assign name
#'   assign(obj_name, tmp)
#' }
#' }
save_temp_data <- function(object, dir_to_save = NULL) {
  obj_name <- deparse(substitute(object))
  if (is.null(dir_to_save)) {
    dir_to_save <- "data/temp"
    if (!fs::dir_exists(dir_to_save)) {
      usethis::ui_stop("{usethis::ui_field(here::here(dir_to_save))} does not exists! Use `misc::create_dirs()`")
    }
  }
  if (!fs::dir_exists(dir_to_save)) {
    usethis::ui_stop("{usethis::ui_field(here::here(dir_to_save))} does not exists! Use `misc::create_dirs('{ui_field(dir_to_save)}')` before.")
  }
  name_to_save <- paste0(dir_to_save, "/", obj_name, ".rds")
  if (!fs::file_exists(name_to_save)) {
    usethis::ui_todo("Saving {usethis::ui_field(here::here(name_to_save))}...")
    saveRDS(object = object, file = name_to_save)
    usethis::ui_done("{usethis::ui_field(here::here(name_to_save))} saved!")
  } else {
    usethis::ui_info("File {usethis::ui_field(here::here(name_to_save))} already exists!")
  }
}
kguidonimartins/misc documentation built on Dec. 20, 2024, 7:03 p.m.