R/latest_version.R

Defines functions latest_version

# Find the latest version of an output file
latest_version <- function(dir, name, ext = ".csv", n = 1) {
  
  # Get files matching extension
  files <- dir %>% list.files() %>% stringr::str_subset(ext)
  
  # If name is missing, assume all files in dir have the same name
  if (!missing(name)) {
    
    name <- as.list(name)
    
    # Add string separator to name (if needed)
    #if (!stringr::str_ends(name[1], "_")) name <- stringr::str_c(name, "_")
    name <- purrr::map(
      name, ~ dplyr::if_else(
        !stringr::str_ends(.x, "_"), stringr::str_c(.x, "_"), .x
      )
    )
    
    # Get files matching name
    files <- name %>%
      purrr::map(
        ~ stringr::str_subset(files, paste0("\\b", .x, "[:upper:]"))
      ) %>%
      # Drop names with no files
      purrr::compact()
  } else {
    files <- list(files)
  }
  
  # Find file(s) with the latest date tag
  ext_len <- stringr::str_length(ext)
  
  dates <- files %>%
    purrr::map(stringr::str_sub, -10 - ext_len, -1 - ext_len) %>%
    purrr::map(lubridate::ymd) %>%
    purrr::map(vctrs::vec_sort, direction = "desc") %>%
    purrr::map(vctrs::vec_slice, 1:n)
  
  out <- files %>%
    purrr::map2(
      dates, ~ stringr::str_subset(.x, stringr::str_c(.y, collapse = "|"))
    ) %>%
    purrr::map(~ file.path(dir, .x))

  # Return path to latest file(s)
  purrr::simplify(out)
}
grahamstewart12/dscalr documentation built on Sept. 11, 2020, 9:01 a.m.