Rserve.eval {Rserve} | R Documentation |
Rserve.eval
evaluates a given expression in a way that is very
close to the behavior on the console Read/Evaluate/Print Loop (REPL).
Among other things this means printing the result of each expression
if visible. The function is guaranteed to not raise an error and in
case of an error it returns an object of class
Rserve-eval-error
with details including the error and the
stack trace.
Rserve.eval(what, where = .GlobalEnv, last.value = FALSE, exp.value = FALSE,
context = NULL, handlers = list(error=.save.condition))
what |
expressions to evaluate |
where |
environment to evaluate in |
last.value |
logical, if |
exp.value |
logical, it |
context |
optional object that will be used as the Rserve context
for the duration of the evaluation
(see |
handlers |
optional named list of calling handlers to register
for the duration of the evaluation. The default is to register an
|
If what
contains one or more expressions, they are evaluated
one by one while printing the result of each if visible. Upon error
subsequent expressions are not evaluated. If what
is not an
expression then the only a single evaluation of what
is
performed and the result is not printed.
The main purpose of this function is to implement console front-ends
where the front-end uses parse()
+ Rserve.eval()
to
simulate the action of a GUI. Because the function returns in all
circumstances it allows clients to rely on a well-define messaging
behavior.
If the evaluation triggered an error, the result is an object of class
Rserve-eval-error
with components:
error |
character, error message |
traceback |
list of contexts in the traceback |
expression |
if |
context |
current Rserve context, |
condition |
if any condition has been saved via
|
If the evaluation finished without an error then the result is either
TRUE
if last.value=FALSE
or the value of the last
expression otherwise.
Rserve versions up to 1.8-10 did not include the condition
component, no calling handlers were registered and there was no
condition
component in the result. To replicate that behavior
or if you don't need that information, you can set
handlers=NULL
which removes the overhead of adding calling
handlers.
No error checking is performed on the
handlers
parameter, so make sure it is avalid, named list of
functions, otherwise an error will occur at evaluation time.
Simon Urbanek
g <- function() stop("foo")
f <- function() g()
(Rserve.eval(expression(f())))
(Rserve.eval(parse(text="1:5\n1+1")))
(Rserve.eval(quote(1+1), last.value=TRUE))
error_with_condition = function(object = NULL) {
cond = errorCondition("this is a custom error with condition",
object = object,
class = "CustomError")
stop(cond)
}
str(Rserve.eval(quote(error_with_condition("hello")), last.value = TRUE))