fill.if<-function(test,ifyes,ifnot) {
if (test)
return(ifyes)
else
return(ifnot)
}
info<-function(what=NULL) {
if (GAMLj_INFO) {
if (!is.null(what))
print(what)
}
}
c.real<-function(...) {
obj <- c(...)
obj[!is.null(obj)]
}
.afield<-function(aList,what) {
aList[[what]]
}
### apply for list of lists
lolapply<-function(listOfLists,tracer=seq_along(listOfLists),FUN=identity,...) {
results<-list()
for (i in seq_along(tracer)) {
aList<-try(listOfLists[[i]],silent = T)
if ("try-error" %in% class(aList))
res<-NULL
else
res<-FUN(aList,...)
results[[tracer[i]]]<-res
}
results
}
list_field<-function(listOfLists,tracer,field)
lolapply(listOfLists,tracer,.afield,what=field)
flat_list<-function(aList) unique(unlist(aList))
flat_named_list<-function(aList,field) unique(unlist((sapply(aList, function(a) a[[field]]))))
concat<-function(a,b) {
a[[length(a)+1]]<-b
a
}
remove_a_from_b<-function(a,b) {
.fun<-function(x,remove) {
out=FALSE
for (rem in remove)
if (is.something(grep(rem,x,fixed = T)))
out=TRUE
if (out)
NULL
else
x
}
if (!is.list(b))
b<-as.list(b)
rr<-rapply(b,.fun,how="list",remove=a)
rr[!sapply(rr, is.null)]
}
findTerms<-function(what,terms,order=1) {
if (!is.something(terms))
return(FALSE)
unlist(lapply(terms,function(a) {
if (length(a)>=order)
any(sapply(what,function(b) b %in% a))
else
FALSE
}))
}
sourcifyList<-function(option,def) {
alist<-option$value
test<-all(sapply(alist,function(a) a$type)==def)
if (test)
return("")
paste0(option$name,"=c(",paste(sapply(alist,function(a) paste0(a$var,' = \"',a$type,'\"')),collapse=", "),")")
}
####### models and formuals #########
expand.formula<-function(aform) {
af<-paste(aform[[2]],paste(attr(terms(aform),"term.labels"),collapse = " + "),sep=" ~ ")
af<-as.formula(af)
af
}
#### This function run an expression and returns any warnings or errors without stopping the execution.
try_hard<-function(exp,max_warn=5) {
.results<-list(error=FALSE,warning=list(),message=FALSE,obj=FALSE)
.results$obj <- withCallingHandlers(
tryCatch(exp, error=function(e) {
mark("SOURCE:")
mark(conditionCall(e))
.results$error<<-conditionMessage(e)
NULL
}), warning=function(w) {
if (length(.results$warning)==max_warn)
.results$warning[[length(.results$warning)+1]]<<-"Additional warnings are present."
if (length(.results$warning)<max_warn)
.results$warning[[length(.results$warning)+1]]<<-conditionMessage(w)
invokeRestart("muffleWarning")
}, message = function(m) {
.results$message<<-conditionMessage(m)
invokeRestart("muffleMessage")
})
if (!isFALSE(.results$error)) {
mark("CALLER:")
mark(rlang::enquo(exp))
mark("ERROR:")
mark(.results$error)
}
if(length(.results$warning)==0) .results$warning<-FALSE
if(length(.results$warning)==1) .results$warning<-.results$warning[[1]]
return(.results)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.