[Rd] question
Gabor Grothendieck
ggrothendieck at gmail.com
Sat Mar 7 15:28:45 CET 2009
Why? Can you demonstrate any situations where its useful? Despite
having my own facility for this I've found that over the years I
have never used it.
On Sat, Mar 7, 2009 at 9:23 AM, <ivowel at gmail.com> wrote:
> 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 at idi.ntnu.no> wrote:
>> Mark.Bravington at 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
>>
More information about the R-devel
mailing list