On 27/11/2009 11:04 AM, Saptarshi Guha wrote:
Hello,
I have a function that creates an expression object with some variables
substituted e.g

foo <- function(s){
  expression({
    v <- s
    print(v)
  })
}

Thus foo returns an expression, however the expression has the symbol 's'
contained within it and thus returns an error when eval'd e.g

x <- foo(10)
eval(x)
Error in eval(expr, envir, enclos) : object 's' not found

Q: How do I force a substitution so that the returned expression has the value
of 's' 'hardcoded'  in it e.g

> foo(10)

returns

expression({
  v <- 10
  print(v)
})

The substitute() function can do it, but the bquote() function is the most convenient:

> foo <- function(s) {
+   bquote(expression({
+    v <- .(s)
+    print(v)
+   }))
+ }
> foo(10)
expression({
   v <- 10
   print(v)
})

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to