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...@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 <valen...@petzel.at> > Sent: Monday, January 9, 2023 9:18 PM > To: akshay kulkarni <akshay...@hotmail.com> > Cc: R help Mailing list <r-help@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...@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@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@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@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.