R/get.R

Defines functions lagosus_get

Documented in lagosus_get

#' Retrieve LAGOSUS flat files
#'
#' Retrieve LAGOSUS flat files from EDI.
#'
#' @export
#' @importFrom utils download.file
#' @importFrom rlang .data
#' @inheritParams lagosus_compile
#' @examples \dontrun{
#' # default to latest version
#' lagosus_get(dest_folder = LAGOSUS::lagosus_path())
#'
#' # get previous version(s)
#' # - recommended to install corresponding package version
#' # - See 'Legacy Versions' section of the README for instructions
#' }
lagosus_get <- function(locus_version = NA, locus_folder = NA, locus_overwrite = FALSE,
                        limno_version = NA, limno_folder = NA, limno_overwrite = FALSE,
                        geo_version = NA, geo_folder = NA, geo_overwrite = FALSE,
                        depth_version = NA, depth_folder = NA, depth_overwrite = FALSE,
                        dest_folder = NA){

  if(dest_folder != lagosus_path()) {
    warning("Set dest_folder to LAGOSUS::lagosus_path() so that data persists
between R sessions. \n")
  }


  check_version <- function(module, version) {
    outpath <- file.path(lagosus_path(), paste0(module, "_", version, ".rds"))
    if(file.exists(outpath) & !locus_overwrite) {
      warning("LAGOSUS data for this version already exists on the local machine.
    Re-download if neccessary using the 'overwrite` argument.'")
      return(invisible("LAGOS is the best"))
    }
  }

  check_latest <- function(module, version) {
    if(all(version != lagosus_version()) & !is.na(version)) {
      warning(
        paste0("Specified version '", version,
        "' does not match the most recent LAGOSUS version '",
        lagosus_version(), "' - If an older LAGOSUS version is desired, see the 'Legacy Versions' section of the README for instructions."))
    }
  }

    edi_baseurl   <- "https://portal.edirepository.org/nis/dataviewer?packageid="
    pasta_baseurl <- "http://pasta.lternet.edu/package/data/eml/edi/"

    message("Downloading the 'locus' module ...")
    check_version("locus", locus_version)
    check_latest("locus", locus_version)
    if(is.na(locus_version)) {
      locus_version <- dplyr::pull(
        lagosus_version()[lagosus_version()$modules == "locus",], "versions")
    }
    locus_base_edi   <- paste0(edi_baseurl, c("edi.854.1"))
    locus_base_pasta <- paste0(pasta_baseurl, "854/1")
    locus_dir        <- get_lagos_module(locus_base_edi, locus_base_pasta,
                                         "locus", locus_overwrite)

    message("Downloading the 'depth' module ...")
    check_version("depth", depth_version)
    check_latest("depth", depth_version)
    if(is.na(depth_version)) {
      depth_version <- dplyr::pull(
        lagosus_version()[lagosus_version()$modules == "depth",], "versions")
    }
    depth_base_edi   <- paste0(edi_baseurl, c("edi.1043.1"))
    depth_base_pasta <- paste0(pasta_baseurl, "1043/1")
    depth_dir        <- get_lagos_module(depth_base_edi, depth_base_pasta,
                                         "depth", depth_overwrite)

    # message("Downloading the 'limno' module ...")
    # limno_base_edi   <- paste0(edi_baseurl, c("edi.101.3"))
    # limno_base_pasta <- paste0(pasta_baseurl, "101/3")
    # limno_dir        <- get_lagos_module(limno_base_edi, limno_base_pasta,
    #                                      "limno", limno_overwrite)

    # message("Downloading the 'geo' module ...")
    # geo_base_edi   <- paste0(edi_baseurl, c("edi.99.5"))
    # geo_base_pasta <- paste0(pasta_baseurl, "99/5")
    # geo_dir        <- get_lagos_module(geo_base_edi, geo_base_pasta,
    #                                    "geo", geo_overwrite)    

  dir.create(dest_folder, showWarnings = FALSE)

  message("LAGOSUS downloaded. Now compressing to native R object ...")

  lagosus_compile(locus_version = locus_version,
                locus_folder = locus_dir,
                locus_overwrite = locus_overwrite,                
                depth_version = depth_version,
                depth_folder=depth_dir,
                depth_overwrite=depth_overwrite,
                limno_folder = NA,
                geo_folder   = NA,
                dest_folder  = dest_folder
                )

  return(invisible(list(locus_folder = locus_dir,
                        depth_folder=depth_dir,
                        limno_folder = NA,
                        geo_folder   = NA)))
}
cont-limno/LAGOSUS documentation built on Aug. 24, 2023, 10:01 a.m.