[R] parse/eval and character encoded expressions: How to deal with non-encoding strings?

Johannes Graumann johannes_graumann at web.de
Mon Jan 28 08:29:24 CET 2013


Hi,

I am intending to save a path-describing character object in a slot of a 
class I'm working on. In order to have the option to use "system.file" etc 
in such string-saved path definitions, I wrote this

ExpressionEvaluator <- function(x){
  x <- tryCatch(
    expr=base::parse(text=x),
    error = function(e){return(as.expression(x))},
    finally=TRUE)
  return(x)
}

This produces

> ExpressionEvaluator("system.file(\"INDEX\")")
expression(system.file("INDEX"))
> eval(ExpressionEvaluator("system.file(\"INDEX\")"))
[1] "/usr/lib/R/library/base/INDEX"

Which is what I want. However, 

> eval(ExpressionEvaluator("Test"))
Error in eval(expr, envir, enclos) : object 'Test' not found

prevents me from general usage (also in cases where "x" does NOT encode an 
expression).

I don't understand why it is that
> base::parse(text="Test")
will return
[1] expression(Test)
while
> as.expression("Test")
produces
[1] expression("Test")
which would work with the eval call.

Can anyone point out to me how to solve this generally? How can I feed the 
function a character object and get back an eval-able expression independent 
of whether there was an expression "encoded" in the input or not.

Thank you for any hints.

Sincerely, Joh



More information about the R-help mailing list