Re: [Rd] WISH: eval() to preserve the "visibility" (now value is always visible)

2015-02-07 Thread Duncan Murdoch
On 07/02/2015 12:40 PM, Henrik Bengtsson wrote:
> 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

What's wrong with the workaround?

Duncan Murdoch

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


[Rd] WISH: eval() to preserve the "visibility" (now value is always visible)

2015-02-07 Thread Henrik Bengtsson
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

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel