[R] Force a variable substitution in expression

Duncan Murdoch murdoch at stats.uwo.ca
Fri Nov 27 17:19:33 CET 2009


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




More information about the R-help mailing list