Re: [Rd] Enlightenment sought and a possible buglet in vector.Rd

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Fri 02 Dec 2005 - 10:46:38 GMT

On Fri, 2 Dec 2005, Berwin A Turlach wrote:

[...]

> The second behaviour that I cannot explain was produced by code
> written by somebody else, namely:
>
> > foo
> function(x){
> z <- x/4
> while( abs(z*z*z-x) > 1e-10 ){
> z <- (2*z+x/z^2)/3
> }
> }
>
> The documentation of function() says that if "the end of a function is
> reached without calling 'return', the value of the last evaluated
> expression is returned." And this seems to happen in this case:

Yes, but that value can be returned with R_Visible set to 0, by calling invisible() _or otherwise_.

> > z <- foo(3)
> > z
> [1] 1.442250
>
> However, my understanding was always that the return value of a
> function issued on the command line will be printed; except, of
> course, if invisible() is used to return the value. This is not the
> case for the above function:
>
> > foo(3)
>
> produces no output. And this had us stunned for some time. On the
> other hand:
>
> > ( foo(3) )
> [1] 1.442250
>
> So my question is why does R, when "foo(3)" is issued on the command
> line, not print the value returned by the function?

R does not print the value of a while() loop. Try

x <-3
z <- x/4
while( abs(z*z*z-x) > 1e-10 ){

   z <- (2*z+x/z^2)/3
}
.Last.value

and you are seeing no different. (Look up the code of do_while for why.)

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Fri Dec 02 21:53:04 2005

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 03:21:34 GMT