À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@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
______________________________________________
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.