R/object.R

Defines functions Object

Documented in Object

#' Initiate an object with self saving method.
#'
#' @param objectname A symbol or a character
#'
#' @return an environment
#' @export
#'
#' @examples Object(world)
Object <- function(objectname){
  chr_objname <- expr_objname <- rlang::enexpr(objectname)
  # browser()
  chr_objname <- rlang::expr_deparse(expr_objname)
  if(exists(chr_objname)){
    readline(message(chr_objname, " exists. Do you want to overwrite it? (yes/no)")) -> overwrite
    if(overwrite!="yes") return()
  }
  flag_chr <- stringr::str_detect(chr_objname,"\"")
  if(flag_chr) {
    chr_objname |> stringr::str_remove_all("\"") -> chr_objname
    expr_objname <- rlang::parse_expr(chr_objname)
  }

  rlang::expr(
    !!expr_objname <- list()
  ) -> declare_obj
  eval(declare_obj, envir = .GlobalEnv)
  list(
    save=function(){
      filename = file.path("data",paste0(chr_objname,".Rds"))
      if(!dir.exists("data")) dir.create("data")
      saveRDS(.GlobalEnv[[chr_objname]], filename)
      message(filename," is saved.")
    }
  ) -> value2assign
  assign(chr_objname, value2assign, envir = .GlobalEnv)
}
tpemartin/econWeb documentation built on Oct. 6, 2022, 1:14 a.m.