On 13-12-12 7:57 PM, Henrik Bengtsson wrote:
First, why does this expression have a 'srcref' element:

exprA <- substitute(function(x) a*x, list(a=2))
print(exprA)
function(x) 2 * x
str(as.list(exprA))
List of 4
  $ : symbol function
  $ :Dotted pair list of 1
   ..$ x: symbol
  $ : language 2 * x
  $ :Class 'srcref'  atomic [1:8] 1 20 1 34 20 34 1 1
   .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile'
<environment: 0x00000000111feaf8>

whereas this does not:

exprB <- substitute(a*x, list(a=2))
print(exprB)
2 * x
str(as.list(exprB))
List of 3
  $ : symbol *
  $ : num 2
  $ : symbol x


Function definitions get srcrefs.


Second, what is the proper way to drop that 'srcref' element in
'exprA'?  I can think of either

exprC <- exprA
exprC[[4L]] <- NULL

That should be best.

Duncan Murdoch


or

exprC <- parse(text=deparse(exprA))

Anything better/safer?


BACKGROUND:
The reason for this is that I wish to create a function dynamically
via variable substitution such that when printed, the function
displays the substituted values, e.g.

fcnA <- eval(exprA)
print(fcnA)
function(x) a*x

versus

fcnC <- eval(exprC)
print(fcnC)
function(x) 2 * x

Thanks,

Henrik

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to