SymbolTable <-
R6::R6Class("SymbolTable",
    public = list(
        env = NULL,
        initialize = function(env=NULL)
        {
            if(is.null(env))
                self$env <- new.env(hash=TRUE, parent=emptyenv())
            else
                self$env <- env
        },
        ##
        ## Getters
        ##
        all_symbols = function()
        {
            ret <- tryCatch(ls(envir=self$env), error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(ret)
        },
        all_values = function()
        {
            ret <- tryCatch(as.list(self$env), error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(ret)
        },
        symbol_defined = function(sym)
        {
            ret <- tryCatch(sym %in% self$all_symbols(), error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(ret)
        },
        symbol_value = function(sym)
        {
            ret <- tryCatch(get(sym, envir=self$env, inherits=FALSE),
                            error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(ret)
        },
        ##
        ## Setters
        ##
        set_symbol = function(sym, val)
        {
            ret <- tryCatch(assign(sym, val, envir=self$env), error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(invisible(ret))
        },
        unset_symbol = function(sym)
        {
            ret <- tryCatch(rm(list=as.character(sym), envir=self$env),
                            error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(invisible(ret))
        },
        set_symbols_from_list = function(lst)
        {
            ret <- tryCatch(list2env(x=lst, envir=self$env), error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(invisible(ret))
        },
        symbol_values_from_list = function(lst)
        {
            if(is.list(lst))
            {
                good <- vapply(lst, function(x) is.character(x) || is.symbol(x),
                               logical(0))
                raiseifnot(all(good), msg="Bad symbol names")
                lst <- as.character(lst)
            }
            ret <- tryCatch(mget(lst, envir=self$env, inherits=FALSE),
                            error=identity)
            if(inherits(ret, "error"))
                raiseCondition("Error in symbol table access")
            else
                return(ret)
        }
    )
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.