[R] Lost backslashes in parse()

David Brahm a215020 at agate.fmr.com
Fri Nov 2 17:18:22 CET 2001


Hi all,

   Yesterday I gave this 5-line example of a script that returns TRUE in Unix
(R-1.3.0 on Solaris 2.6) but FALSE in NT (R-1.3.1):
R> fnam <- tempfile()
R> file.create(fnam)
R> txt <- paste("file.exists(\"", fnam, "\")", sep="")
R> expr <- parse(text=txt)
R> eval(expr)

Thanks to Thomas Lumley <tlumley at u.washington.edu> and Brian D. Ripley
<ripley at stats.ox.ac.uk> for responding.  Both asked why lines 3-5 weren't
just replaced by the much simpler:
R> file.exists(fnam)

The short answer is that this was a toy, and in the real situation I need to
eval() in a different environment.

If nobody else is disturbed by this behavior in parse(), I can easily work
around it, so don't worry about it.  For anyone masochistic enough to dig
further, though, here's a snippet of the real code:

R> for (i in obj) {
R>  file <- file.path(dir, "data", paste(i,"RData",sep="."))
R>  expr <- parse(text=paste("save(list=\"",i,"\", file=\"",file,"\")",sep=""))
R>  eval(expr, pos.to.env(pos))
R> }

Since the object named in "i" may exist somewhere besides "pos", I need to
eval() the save() command in the environment of position "pos".  But in that
environment, "i" and "file" don't exist, so I need to build the command ahead
of time as a text string [i.e. evalq() won't work].  Again, this all works OK
for me except for backslash dropping in NT.  Thanks again for listening!

			    -- David Brahm (brahm at alum.mit.edu)
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list