[R] return value of {....}

Andrew Simmons @kw@|mmo @end|ng |rom gm@||@com
Mon Jan 9 18:22:40 CET 2023


Returning the last value of { is the basis of functions not needing a
return statement. Before R invokes a function (specifically a closure), it
creates a new context. When R evaluates a call to return, it looks for a
context to return from and finds the context of function, ending the
context and the evaluation of the function body early. However, if you
don't use return, R just returns the value from evaluating the function
body, and if your function body starts with {, it will return the last
expression from the function body, as desired.

On Mon, Jan 9, 2023, 12:15 akshay kulkarni <akshay_e4 using hotmail.com> wrote:

> Dear Valentin,
>                           But why should {....} "return" a value? It could
> just as well evaluate all the expressions and store the resulting objects
> in whatever environment the interpreter chooses, and then it would be left
> to the user to manipulate any object he chooses. Don't you think returning
> the last, or any value, is redundant? We are living in the 21st century
> world, and the R-core team might,I suppose, have a definite reason
> for"returning" the last value. Any comments?
>
> Thanking you,
> Yours sincerely,
> AKSHAY M KULKARNI
>
> ________________________________
> From: Valentin Petzel <valentin using petzel.at>
> Sent: Monday, January 9, 2023 9:18 PM
> To: akshay kulkarni <akshay_e4 using hotmail.com>
> Cc: R help Mailing list <r-help using r-project.org>
> Subject: Re: [R] return value of {....}
>
> Hello Akshai,
>
> I think you are confusing {...} with local({...}). This one will evaluate
> the expression in a separate environment, returning the last expression.
>
> {...} simply evaluates multiple expressions as one and returns the result
> of the last line, but it still evaluates each expression.
>
> Assignment returns the assigned value, so we can chain assignments like
> this
>
> a <- 1 + (b <- 2)
>
> conveniently.
>
> So when is {...} useful? Well, anyplace where you want to execute complex
> stuff in a function argument. E.g. you might do:
>
> data %>% group_by(x) %>% summarise(y = {if(x[1] > 10) sum(y) else mean(y)})
>
> Regards,
> Valentin Petzel
>
> 09.01.2023 15:47:53 akshay kulkarni <akshay_e4 using hotmail.com>:
>
> > Dear members,
> >                              I have the following code:
> >
> >> TB <- {x <- 3;y <- 5}
> >> TB
> > [1] 5
> >
> > It is consistent with the documentation: For {, the result of the last
> expression evaluated. This has the visibility of the last evaluation.
> >
> > But both x AND y are created, but the "return value" is y. How can this
> be advantageous for solving practical problems? Specifically, consider the
> following code:
> >
> > F <- function(X) {  expr; expr2; { expr5; expr7}; expr8;expr10}
> >
> > Both expr5 and expr7 are created, and are accessible by the code outside
> of the nested braces right? But the "return value" of the nested braces is
> expr7. So doesn't this mean that only expr7 should be accessible? Please
> help me entangle this (of course the return value of F is expr10, and all
> the other objects created by the preceding expressions are deleted. But
> expr5 is not, after the control passes outside of the nested braces!)
> >
> > Thanking you,
> > Yours sincerely,
> > AKSHAY M KULKARNI
> >
> >     [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list