Hello Akshay,

R is quite inspired by LISP, where this is a common thing. It is not in fact 
that {...} returned something, rather any expression evalulates to some value, 
and for a compound statement that is the last evaluated expression.

{...} might be seen as similar to LISPs (begin ...).

Now this is a very different thing compared to {...} in something like C, even 
if it looks or behaves similarly. But in R {...} is in fact an expression and 
thus has evaluate to some value. This also comes with some nice benefits.

You do not need to use {...} for anything that is a single statement. But you 
can in each possible place use {...} to turn multiple statements into one.

Now think about a statement like this

f <- function(n) {
x <- runif(n)
x**2
}

Then we can do

y <- f(10)

Now, you suggested way would look like this:

f <- function(n) {
x <- runif(n)
y <- x**2
}

And we'd need to do something like:

f(10)
y <- somehow_get_last_env_of_f$y

So having a compound statement evaluate to a value clearly has a benefit.

Best Regards,
Valentin

09.01.2023 18:05:58 akshay kulkarni <akshay...@hotmail.com>:

> 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.

Reply via email to