1
0
ml_measurement_error_public/simulations/RemembR/R/RemembeR.R

81 lines
1.7 KiB
R

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()