scoping

Luke Tierney luke@stat.umn.edu
Fri, 26 Jun 1998 13:01:30 -0500 (CDT)


Paul Gilbert wrote:
> 
> 
> n <- eval(parse(prompt="Enter the number of singular values to use: "))
> 

As Martyn suggested, if you just want a number it is better to use
someting that just deals with numbers. If you do want the user to be
able to respond with an arbitrary S expression, then this is one case
where eval does make sense, but it should be used with caution. The
default behavior of eval is to use evaluate in the calling environment,

> p<-function(x) eval(parse(prompt="Enter an expression: "))
> p(3)
Enter an expression: x
[1] 3

This is probably not what you want. In S the official way to get eval
to use the global environment/frame is eval(expr,F) (this is what the
try.S example in the help page does). In R you seem to need
eval(expr,0). I *think* this works in S too, but I'm always a bit
confused about frames 0 and 1. There may be another approach that
works cleanly in both.

If you have need for this kind of thing in several places it would be
a good idea to abstact it out as a utility function,
prompt.for.expression say, carefully get that function right, and then
only access this facility through that function.

luke

-- 
Luke Tierney
University of Minnesota                      Phone:           612-625-7843
School of Statistics                         Fax:             612-624-8868
206 Church Street                            email:      luke@stat.umn.edu
Minneapolis, MN 55455 USA                    WWW:  http://www.stat.umn.edu
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel 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-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._