Message-ID: <PU4P216MB1568AAE0B25AF6B2ADF47EC8C8FE9@PU4P216MB1568.KORP216.PROD.OUTLOOK.COM>
Date: 2023-01-09T16:57:21Z
From: akshay kulkarni
Subject: return value of {....}
In-Reply-To: <47c2883a-d4c0-211a-02ab-a916f829292f@sapo.pt>
dear Rui,
Thanks a lot....
Thanking you,
Yours sincerely,
AKSHAY M KULKARNI
________________________________
From: Rui Barradas <ruipbarradas at sapo.pt>
Sent: Monday, January 9, 2023 9:48 PM
To: akshay kulkarni <akshay_e4 at hotmail.com>; R help Mailing list <r-help at r-project.org>
Subject: Re: [R] return value of {....}
?s 14:47 de 09/01/2023, akshay kulkarni escreveu:
> 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 at 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.
Hello,
Everything happens as you have described it, expr5 is accessible outside
{}. Whether it is advantageous to solve pratical problems is another
thing. The way f() is called creates variable `input` and this can be
seen in many places of the R sources. Personally, I find it harder to
read and prefer to break that one-liner into two instructions.
The code below shows a seldom pratical feature, if ever, put to work.
f <- function(X) {
x <- X; y <- x*2
u <- {
z <- y # expr5 creates a variable by assigning it a value
z*pi # expr7's value is assigned to u
}
v <- u + z # expr5's value is accessible
10 * v
}
# the call also creates input
f(input <- 1)
#> [1] 82.83185
.Last.value / 10
#> [1] 0.1
.Last.value - input*2
#> [1] -1
.Last.value / pi
#> [1] 0.3183099
.Last.value / 2
#> [1] 0.5
.Last.value == input
#> [1] TRUE
Hoep this helps,
Rui Barradas
[[alternative HTML version deleted]]