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

akshay kulkarni @k@h@y_e4 @end|ng |rom hotm@||@com
Mon Jan 9 17:57:21 CET 2023


dear Rui,
                 Thanks a lot....

Thanking you,
Yours sincerely,
AKSHAY M KULKARNI
________________________________
From: Rui Barradas <ruipbarradas using sapo.pt>
Sent: Monday, January 9, 2023 9:48 PM
To: akshay kulkarni <akshay_e4 using hotmail.com>; R help Mailing list <r-help using 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 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.

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



More information about the R-help mailing list