Gentlemen---these are all very clever workarounds, but please forgive me  
for voicing my own opinion: IMHO, returning multiple values in a  
statistical language should really be part of the language itself. there  
should be a standard syntax of some sort, whatever it may be, that everyone  
should be able to use and which easily transfers from one local computer to  
another. It should not rely on clever hacks in the .Rprofile that are  
different from user to user, and which leave a reader of end user R code  
baffled at first by all the magic that is going on. Even the R tutorials  
for beginners should show a multiple-value return example right at the  
point where function calls and return values are first explained.

I really do not understand why the earlier implementation  
of "multiple-value returns" was deprecated. then again, I am a naive end  
user, not a computer language expert. I probably would not even understand  
the nuances of syntax ambiguities that may have arisen. (this is my  
shortcoming.)

regards,

/iaw


On Mar 7, 2009 4:34am, Wacek Kusnierczyk  
<Waclaw.Marcin.Kusnierczyk@idi.ntnu.no> wrote:
> Mark.Bravington@csiro.au wrote:

> >

> >> The syntax for returning multiple arguments does not strike me as

> >> particularly appealing. would it not possible to allow syntax like:

> >>

> >> f= function() { return( rnorm(10), rnorm(20) ) }

> >> (a,d$b) = f()

> >>

> >>

> >

> >

> > FWIW, my own solution is to define a "multi-assign operator":

> >

> > '%
> > # a must be of the form '{thing1;thing2;...}'

> > a
> > e
> > stopifnot( length( b) == length( a))

> > for( i in seq_along( a))

> > eval( call( '
> > NULL

> > }

> >



> you might want to have the check less stringent, so that rhs may consist

> of more values that the lhs has variables. or even skip the check and

> assign NULL to a[i] for i > length(b). another idea is to allow %
> be used with just one variable on the lhs.



> here's a modified version:



> '%
> a
> if (length(a) > 1)

> a
> if (length(a) > length(b))

> b
> e
> for( i in seq_along( a))

> eval( call( '
> NULL }



> {a; b} %
> # a = 1; b = 2

> a %
> # a = 3

> {a; b} %
> # a = 5; b = NULL





> vQ


	[[alternative HTML version deleted]]

