X-Git-Url: https://code.communitydata.science/ml_measurement_error_public.git/blobdiff_plain/588bdd7ed74cf8fe8fd0f15df58a6a40c26ebae5..cb1e895ff1e3359db17d918caa67b758c0d7e901:/simulations/RemembR/R/RemembeR.R?ds=sidebyside diff --git a/simulations/RemembR/R/RemembeR.R b/simulations/RemembR/R/RemembeR.R new file mode 100644 index 0000000..8f4938e --- /dev/null +++ b/simulations/RemembR/R/RemembeR.R @@ -0,0 +1,80 @@ +library(filelock) + +init.remember <- function(){ + + if(exists("r") == FALSE){ + if(file.exists(remember.file)){ + if(!exists("remember.file.lock")) + init.file.lock() + lck <- lock(remember.file.lock, exclusive = FALSE) + r <<- readRDS(remember.file) + unlock(lck) + } else { + r <<- list() + } + } + +} + +remember.file <<- "remembr.RDS" +init.file.lock <- function(){ + remember.file.lock <<- paste0(remember.file,"_LOCK") +} + +remember.prefix <<- "" + + +change.remember.file <- function(file,clear=FALSE){ + if(!clear){ + remember.file <<- file + init.file.lock() + save.remember() + } else { + remember.file <<- file + rm(r,pos=globalenv()) + init.remember() + } +} +set.remember.prefix <- function(prefix){ + remember.prefix <<- prefix +} + +load.if.exists <- function(){ + if(file.exists(remember.file)){ + if(!exists("remember.file.lock")) + init.file.lock() + lck <- lock(remember.file.lock, exclusive = FALSE) + r <<- readRDS(remember.file) + unlock(lck) + } else { + r <<- list() + } +} + +remember <- function(var,name,lock=T){ + + init.remember() + + load.if.exists() + + if(remember.prefix == ""){ + r[[name]] <<- var + } else { + if(is.null(r[[remember.prefix]])){ + r[[remember.prefix]] <<- list() + } + r[[remember.prefix]][[name]] <<- var + } + + save.remember() +} + +save.remember <- function(lock=T){ + if(!exists("remember.file.lock")) + init.file.lock() + + lck <- lock(remember.file.lock, exclusive=TRUE) + saveRDS(r,file=remember.file) + unlock(lck) +} +init.remember()