[Rd] WISH: eval() to preserve the "visibility" (now value is always visible)
Suharto Anggono Suharto Anggono
suharto_anggono at yahoo.com
Mon Feb 9 05:44:22 CET 2015
Sorry to intervene.
Argument passed to 'eval' is evaluated first.
So,
eval(x <- 2)
is effectively like
{ x <- 2; eval(2) } ,
which is effectively
{ x <- 2; 2 } .
The result is visible.
eval(expression(x <- 2))
or
eval(quote(x <- 2))
or
evalq(x <- 2)
gives the same effect as
x <- 2 .
The result is invisible.
In function 'eval2',
res <- eval(withVisible(expr), envir=envir, ...)
is effectively
res <- withVisible(expr) .
-------------------
Would it be possible to have the value of eval() preserve the
"visibility" of the value of the expression?
"PROBLEM":
# Invisible
> x <- 1
# Visible
> eval(x <- 2)
[1] 2
"TROUBLESHOOTING":
> withVisible(x <- 1)
$value
[1] 1
$visible
[1] FALSE
> withVisible(eval(x <- 2))
$value
[1] 2
$visible
[1] TRUE
WORKAROUND:
eval2 <- function(expr, envir=parent.frame(), ...) {
res <- eval(withVisible(expr), envir=envir, ...)
value <- res$value
if (res$visible) value else invisible(value)
}
> x <- 1
> eval(x <- 2)
[1] 2
> eval2(x <- 3)
> x
[1] 3
/Henrik
More information about the R-devel
mailing list