Skip to contents


library(saferDev)


Datasets

pos <- 2
name <- "mean"


Datasets info

pos # integer indicating the position of the environment checked
> [1] 2
name # character vector of the name of the function that will be checked
> [1] "mean"


Simple example

env_check(pos = 1)
> [1] "SOME VARIABLES OF THE CHECKED ENVIRONMENT UNNAMED ARE ALSO PRESENT IN :\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), names[nh], parentenv, handlers[[nh]]): name\n.GlobalEnv: .Random.seed name pos\nSEARCH PATH CHECKED:\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n.GlobalEnv\npackage:saferDev\npackage:stats\npackage:graphics\npackage:grDevices\npackage:utils\npackage:datasets\npackage:methods\nAutoloads\ntools:callr\npackage:base\n"
env_check(pos = 2)
> [1] "SOME VARIABLES OF THE CHECKED ENVIRONMENT UNNAMED ARE ALSO PRESENT IN :\neval_with_user_handlers(expr, envir, enclos, user_handlers): enclos envir expr\nwithCallingHandlers(withVisible(eval_with_user_handlers(expr, envir, enclos, user_handlers)), warning = wHandler, error = eHandler, message = mHandler): expr\ndoTryCatch(return(expr), name, parentenv, handler): expr\ntryCatchOne(expr, names, parentenv, handlers[[1]]): expr\ntryCatchList(expr, classes, parentenv, handlers): expr\ntryCatch(expr, error = function(e) {\n    call <- conditionCall(e)\n    if (!is.null(call)) {\n        if (identical(call[[1]], quote(doTryCatch))) \n            call <- sys.call(-4)\n        dcall <- deparse(call, nlines = 1)\n        prefix <- paste(\"Error in\", dcall, \": \")\n        LONG <- 75\n        sm <- strsplit(conditionMessage(e), \"\\n\")[[1]]\n        w <- 14 + nchar(dcall, type = \"w\") + nchar(sm[1], type = \"w\")\n        if (is.na(w)) \n            w <- 14 + nchar(dcall, type = \"b\") + nchar(sm[1], type = \"b\")\n        if (w > LONG) \n            prefix <- paste0(prefix, \"\\n  \")\n    }\n    else prefix <- \"Error : \"\n    msg <- paste0(prefix, conditionMessage(e), \"\\n\")\n    .Internal(seterrmessage(msg[1]))\n    if (!silent && isTRUE(getOption(\"show.error.messages\"))) {\n        cat(msg, file = outFile)\n        .Internal(printDeferredWarnings())\n    }\n    invisible(structure(msg, class = \"try-error\", condition = e))\n}): expr\ntry(f, silent = TRUE): expr\nevaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos, debug = debug, last = i == length(out), use_try = stop_on_error != 2, keep_warning = keep_warning, keep_message = keep_message, log_echo = log_echo, log_warning = log_warning, output_handler = output_handler, include_timing = include_timing): enclos envir expr\nevaluate::evaluate(...): enclos envir expr\nin_dir(input_dir(), expr): expr\nin_input_dir(evaluate(code, envir = env, new_device = FALSE, keep_warning = if (is.numeric(options$warning)) TRUE else options$warning, keep_message = if (is.numeric(options$message)) TRUE else options$message, stop_on_error = if (is.numeric(options$error)) options$error else {\n    if (options$error && options$include) \n        0\n    else 2\n}, output_handler = knit_handlers(options$render, options))): expr\nwithCallingHandlers(if (tangle) process_tangle(group) else process_group(group), error = function(e) if (xfun::pkg_available(\"rlang\", \"1.0.0\")) rlang::entrace(e)): expr\nwithCallingHandlers(expr, error = function(e) {\n    loc = if (is.function(fun)) \n        trimws(fun(label))\n    else \"\"\n    if (loc != \"\") \n        loc = sprintf(\" at lines %s\", loc)\n    message(one_string(handler(e, loc)))\n}): expr\nxfun:::handle_error(withCallingHandlers(if (tangle) process_tangle(group) else process_group(group), error = function(e) if (xfun::pkg_available(\"rlang\", \"1.0.0\")) rlang::entrace(e)), function(e, loc) {\n    setwd(wd)\n    write_utf8(res, output %n% stdout())\n    paste0(\"\\nQuitting from lines \", loc)\n}, if (labels[i] != \"\") sprintf(\" [%s]\", labels[i]), get_loc): expr\nknitr::knit(knit_input, knit_output, envir = envir, quiet = quiet): envir\nrmarkdown::render(envir = globalenv(), ...): envir\n(function (what, args, quote = FALSE, envir = parent.frame()) \n{\n    if (!is.list(args)) \n        stop(\"second argument must be a list\")\n    if (quote) \n        args <- lapply(args, enquote)\n    .Internal(do.call(what, args, envir))\n})(base::quote(function (..., seed = NULL) \n{\n    if (!is.null(seed)) {\n        set.seed(seed)\n        if (requireNamespace(\"htmlwidgets\", quietly = TRUE)) {\n            htmlwidgets::setWidgetIdSeed(seed)\n        }\n    }\n    rmarkdown::render(envir = globalenv(), ...)\n}), base::quote(list(input = \"/__w/saferDev/saferDev/vignettes/articles/env_check.Rmd\", output_file = \"env_check.html\", output_dir = \"/__w/saferDev/saferDev/docs/articles\", intermediates_dir = \"/tmp/RtmpNUEMfl\", encoding = \"UTF-8\", seed = 1014, output_format = list(knitr = list(opts_knit = NULL, opts_chunk = list(dev = \"ragg_png\", dpi = 96, fig.width = 7.29166666666667, fig.height = 4.50659250103008, fig.retina = 2, dev.args = list(bg = NA), fig.ext = \"png\", other.parameters = list()), knit_hooks = NULL, \n    opts_hooks = NULL, opts_template = NULL), pandoc = list(to = \"html\", from = \"markdown+autolink_bare_uris+tex_math_single_backslash\", args = c(\"--standalone\", \"--section-divs\", \"--table-of-contents\", \"--toc-depth\", \"2\", \"--template\", \"/tmp/RtmpNUEMfl/filee243e2eeab1.html\", \"--highlight-style\", \"pygments\"), keep_tex = FALSE, latex_engine = \"pdflatex\", ext = NULL, convert_fun = NULL, lua_filters = c(\"/__w/_temp/Library/rmarkdown/rmarkdown/lua/pagebreak.lua\", \"/__w/_temp/Library/rmarkdown/rmarkdown/lua/latex-div.lua\"\n)), keep_md = FALSE, clean_supporting = FALSE, df_print = \"default\", pre_knit = function (...) \n{\n    options(width = purrr::pluck(pkg, \"meta\", \"code\", \"width\", .default = 80))\n    if (is.function(old_pre)) {\n        old_pre(...)\n    }\n}, post_knit = function (...) \n{\n    op(base(...), overlay(...))\n}, pre_processor = function (...) \n{\n    op(base(...), overlay(...))\n}, intermediates_generator = function (original_input, intermediates_dir) \n{\n    copy_render_intermediates(original_input, intermediates_dir, !self_contained)\n}, post_processor = function (metadata, input_file, output_file, ...) \n{\n    original_output_file <- output_file\n    output_file <- overlay(metadata, input_file, output_file, ...)\n    if (!is.null(attr(output_file, \"post_process_original\"))) \n        base(metadata, input_file, original_output_file, ...)\n    base(metadata, input_file, output_file, ...)\n}, file_scope = NULL, on_exit = function () \n{\n    if (is.function(base)) \n        base()\n    if (is.function(overlay)) \n        overlay()\n}), output_options = NULL, quiet = TRUE)), envir = base::quote(<environment>), quote = base::quote(TRUE)): envir\nbase::do.call(base::do.call, base::c(base::readRDS(\"/tmp/RtmpNUEMfl/callr-fun-e2453401aab\"), base::list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv, quote = TRUE): envir\nbase::withCallingHandlers({\n    NULL\n    base::saveRDS(base::do.call(base::do.call, base::c(base::readRDS(\"/tmp/RtmpNUEMfl/callr-fun-e2453401aab\"), base::list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv, quote = TRUE), file = \"/tmp/RtmpNUEMfl/callr-res-e2434f2c600\", compress = FALSE)\n    base::flush(base::stdout())\n    base::flush(base::stderr())\n    NULL\n    base::invisible()\n}, error = function(e) {\n    {\n        callr_data <- base::as.environment(\"tools:callr\")$`__callr_data__`\n        err <- callr_data$err\n        if (FALSE) {\n            base::assign(\".Traceback\", base::.traceback(4), envir = callr_data)\n            utils::dump.frames(\"__callr_dump__\")\n            base::assign(\".Last.dump\", .GlobalEnv$`__callr_dump__`, envir = callr_data)\n            base::rm(\"__callr_dump__\", envir = .GlobalEnv)\n        }\n        e <- err$process_call(e)\n        e2 <- err$new_error(\"error in callr subprocess\")\n        class <- base::class\n        class(e2) <- base::c(\"callr_remote_error\", class(e2))\n        e2 <- err$add_trace_back(e2)\n        cut <- base::which(e2$trace$scope == \"global\")[1]\n        if (!base::is.na(cut)) {\n            e2$trace <- e2$trace[-(1:cut), ]\n        }\n        base::saveRDS(base::list(\"error\", e2, e), file = base::paste0(\"/tmp/RtmpNUEMfl/callr-res-e2434f2c600\", \".error\"))\n    }\n}, interrupt = function(e) {\n    {\n        callr_data <- base::as.environment(\"tools:callr\")$`__callr_data__`\n        err <- callr_data$err\n        if (FALSE) {\n            base::assign(\".Traceback\", base::.traceback(4), envir = callr_data)\n            utils::dump.frames(\"__callr_dump__\")\n            base::assign(\".Last.dump\", .GlobalEnv$`__callr_dump__`, envir = callr_data)\n            base::rm(\"__callr_dump__\", envir = .GlobalEnv)\n        }\n        e <- err$process_call(e)\n        e2 <- err$new_error(\"error in callr subprocess\")\n        class <- base::class\n        class(e2) <- base::c(\"callr_remote_error\", class(e2))\n        e2 <- err$add_trace_back(e2)\n        cut <- base::which(e2$trace$scope == \"global\")[1]\n        if (!base::is.na(cut)) {\n            e2$trace <- e2$trace[-(1:cut), ]\n        }\n        base::saveRDS(base::list(\"error\", e2, e), file = base::paste0(\"/tmp/RtmpNUEMfl/callr-res-e2434f2c600\", \".error\"))\n    }\n}, callr_message = function(e) {\n    base::try(base::signalCondition(e))\n}): expr\ndoTryCatch(return(expr), name, parentenv, handler): expr\ntryCatchOne(expr, names, parentenv, handlers[[1]]): expr\ntryCatchList(expr, names[-nh], parentenv, handlers[-nh]): expr\ndoTryCatch(return(expr), name, parentenv, handler): expr\ntryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), names[nh], parentenv, handlers[[nh]]): expr\ntryCatchList(expr, classes, parentenv, handlers): expr\nbase::tryCatch(base::withCallingHandlers({\n    NULL\n    base::saveRDS(base::do.call(base::do.call, base::c(base::readRDS(\"/tmp/RtmpNUEMfl/callr-fun-e2453401aab\"), base::list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv, quote = TRUE), file = \"/tmp/RtmpNUEMfl/callr-res-e2434f2c600\", compress = FALSE)\n    base::flush(base::stdout())\n    base::flush(base::stderr())\n    NULL\n    base::invisible()\n}, error = function(e) {\n    {\n        callr_data <- base::as.environment(\"tools:callr\")$`__callr_data__`\n        err <- callr_data$err\n        if (FALSE) {\n            base::assign(\".Traceback\", base::.traceback(4), envir = callr_data)\n            utils::dump.frames(\"__callr_dump__\")\n            base::assign(\".Last.dump\", .GlobalEnv$`__callr_dump__`, envir = callr_data)\n            base::rm(\"__callr_dump__\", envir = .GlobalEnv)\n        }\n        e <- err$process_call(e)\n        e2 <- err$new_error(\"error in callr subprocess\")\n        class <- base::class\n        class(e2) <- base::c(\"callr_remote_error\", class(e2))\n        e2 <- err$add_trace_back(e2)\n        cut <- base::which(e2$trace$scope == \"global\")[1]\n        if (!base::is.na(cut)) {\n            e2$trace <- e2$trace[-(1:cut), ]\n        }\n        base::saveRDS(base::list(\"error\", e2, e), file = base::paste0(\"/tmp/RtmpNUEMfl/callr-res-e2434f2c600\", \".error\"))\n    }\n}, interrupt = function(e) {\n    {\n        callr_data <- base::as.environment(\"tools:callr\")$`__callr_data__`\n        err <- callr_data$err\n        if (FALSE) {\n            base::assign(\".Traceback\", base::.traceback(4), envir = callr_data)\n            utils::dump.frames(\"__callr_dump__\")\n            base::assign(\".Last.dump\", .GlobalEnv$`__callr_dump__`, envir = callr_data)\n            base::rm(\"__callr_dump__\", envir = .GlobalEnv)\n        }\n        e <- err$process_call(e)\n        e2 <- err$new_error(\"error in callr subprocess\")\n        class <- base::class\n        class(e2) <- base::c(\"callr_remote_error\", class(e2))\n        e2 <- err$add_trace_back(e2)\n        cut <- base::which(e2$trace$scope == \"global\")[1]\n        if (!base::is.na(cut)) {\n            e2$trace <- e2$trace[-(1:cut), ]\n        }\n        base::saveRDS(base::list(\"error\", e2, e), file = base::paste0(\"/tmp/RtmpNUEMfl/callr-res-e2434f2c600\", \".error\"))\n    }\n}, callr_message = function(e) {\n    base::try(base::signalCondition(e))\n}), error = function(e) {\n    NULL\n    if (FALSE) {\n        base::try(base::stop(e))\n    }\n    else {\n        base::invisible()\n    }\n}, interrupt = function(e) {\n    NULL\n    if (FALSE) {\n        e\n    }\n    else {\n        base::invisible()\n    }\n}): expr\nSEARCH PATH CHECKED:\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n.GlobalEnv\npackage:saferDev\npackage:stats\npackage:graphics\npackage:grDevices\npackage:utils\npackage:datasets\npackage:methods\nAutoloads\ntools:callr\npackage:base\n"


Argument pos

env_check(pos = 1) # check the object "NULL" in the environment one step above the env_check() environment
> [1] "SOME VARIABLES OF THE CHECKED ENVIRONMENT UNNAMED ARE ALSO PRESENT IN :\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), names[nh], parentenv, handlers[[nh]]): name\n.GlobalEnv: .Random.seed name pos\nSEARCH PATH CHECKED:\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n.GlobalEnv\npackage:saferDev\npackage:stats\npackage:graphics\npackage:grDevices\npackage:utils\npackage:datasets\npackage:methods\nAutoloads\ntools:callr\npackage:base\n"


Argument name

env_check(name = "mean") # check if the object "mean" is in the environment one step above the env_check() environment, and if yes, returns if the same name exists in above environments
> [1] "SOME VARIABLES OF THE CHECKED ENVIRONMENT mean ARE ALSO PRESENT IN :\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), names[nh], parentenv, handlers[[nh]]): name\n.GlobalEnv: .Random.seed name pos\nSEARCH PATH CHECKED:\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n.GlobalEnv\npackage:saferDev\npackage:stats\npackage:graphics\npackage:grDevices\npackage:utils\npackage:datasets\npackage:methods\nAutoloads\ntools:callr\npackage:base\n"


Argument safer_check

env_check(safer_check = TRUE) # with TRUE, checkings are performed before main code running
> [1] "SOME VARIABLES OF THE CHECKED ENVIRONMENT UNNAMED ARE ALSO PRESENT IN :\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), names[nh], parentenv, handlers[[nh]]): name\n.GlobalEnv: .Random.seed name pos\nSEARCH PATH CHECKED:\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n.GlobalEnv\npackage:saferDev\npackage:stats\npackage:graphics\npackage:grDevices\npackage:utils\npackage:datasets\npackage:methods\nAutoloads\ntools:callr\npackage:base\n"


Argument lib_path and error_text

env_check(
    lib_path = ".", # absolute pathways of the directories containing the required packages if not in the default directories.
    error_text = "TEXT ADDED" # add information in error messages returned by the function.
)
> Error: 
> 
> ================
> 
> ERROR IN saferDev:::.pack_and_function_check() INSIDE saferDev::env_check()TEXT ADDED
> 
> REQUIRED PACKAGE:
> saferDev
> MUST BE INSTALLED IN ONE OF THESE FOLDERS:
> /__w/saferDev/saferDev/vignettes/articles
> /usr/local/lib/R/site-library
> /usr/local/lib/R/library
> 
> ================

All the arguments

mean <- 2
env_check(
    pos = 1,
    name = "mean",
    safer_check = TRUE, # perform some "safer" checks? Warning : always set this argument to FALSE if all_args_here() is used inside another safer function.
    lib_path = NULL, # absolute pathways of the directories containing the required packages if not in the default directories.
    error_text = "" # add information in error messages returned by the function.
) # check if the object "mean" is in the environment one step above the env_check() environment, and if yes, returns if the same name exists in above environments
> [1] "SOME VARIABLES OF THE CHECKED ENVIRONMENT mean ARE ALSO PRESENT IN :\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(expr, names, parentenv, handlers[[1]]): name\ndoTryCatch(return(expr), name, parentenv, handler): name\ntryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), names[nh], parentenv, handlers[[nh]]): name\n.GlobalEnv: .Random.seed mean name pos\npackage:base: mean\nSEARCH PATH CHECKED:\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n<environment>\n.GlobalEnv\npackage:saferDev\npackage:stats\npackage:graphics\npackage:grDevices\npackage:utils\npackage:datasets\npackage:methods\nAutoloads\ntools:callr\npackage:base\n"