[Rd] question
Mark.Bravington at csiro.au
Mark.Bravington at csiro.au
Sat Mar 7 01:43:51 CET 2009
[ivo welch 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":
'%<-%' <- function( a, b){
# a must be of the form '{thing1;thing2;...}'
a <- as.list( substitute( a))[-1]
e <- sys.parent()
stopifnot( length( b) == length( a))
for( i in seq_along( a))
eval( call( '<-', a[[ i]], b[[i]]), envir=e)
NULL
}
Then I can write
{a;d$b} %<-% f()
Actually it should probably return b invisibly, so that it can be chained a la {c$e$f;g$h} %<-% {a;d$b} %<-% f()
I haven't checked it exhaustively but it has done the job OK for me.
The name '%<-%' does already feature in one R package, can't remember which but it's to do with graph theory, so you might be better off calling it something else. I use the synonym %:=% which is closer to what I think R should have called its assignment operator in the first place ;)
HTH
Mark Bravington
CSIRO
Hobart
Australia
________________________________________
From: r-devel-bounces at r-project.org [r-devel-bounces at r-project.org] On Behalf Of Gabor Grothendieck [ggrothendieck at gmail.com]
Sent: 06 March 2009 09:25
To: ivo welch
Cc: r-devel at r-project.org
Subject: Re: [Rd] question
I posted this a few years ago (but found I never really had a
need for it):
http://tolstoy.newcastle.edu.au/R/help/04/06/1430.html
On Thu, Mar 5, 2009 at 9:22 AM, ivo welch <ivowel at gmail.com> wrote:
> dear R developers: it is of course easy for a third party to make
> suggestions if this third party is both clueless and does not put in
> any work. with these caveats, let me suggest something.
>
> 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()
>
> this would just hide the list conversion and unconversion. yes, I
> know how to accomplish this with lists, but it does not seem pretty or
> natural.
>
> regards,
>
> /ivo
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
______________________________________________
R-devel at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list