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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._