Gabriel Becker
2013-Aug-14 23:46 UTC
[Rd] Inconsistency between eval and withVisible (with patch)
R-team, The $value element of the return value of *withVisible* does not agree with the return value of *eval* when *withVisible* is passed a variable (symbol) containing an expression object or anonymous code/expressions which generates an expression object when evaluated (such as calls to *parse* or * expression*). I have attached a patch against the svn trunk which addresses this. Example (under devel r63577):> withVisible(parse(text="5+pi"))$value *expression(5+pi)* $visible [1] TRUE> eval(parse(text="5+pi"))*[1] 8.141593* With the attached patch this is no longer the case:> withVisible(parse(text="5+pi"))$value *[1] 8.141593* $visible [1] TRUE The patch changes only the withVisible function in eval.c. I'm happy to work with / at the direction of an R-core member to get the patch into an different form/coding style/fix strategy/etc if its current form is not acceptable. Thanks, ~G> sessionInfo()R Under development (unstable) (2013-08-14 r63577) Platform: x86_64-unknown-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base -- Gabriel Becker Graduate Student Statistics Department University of California, Davis
peter dalgaard
2013-Aug-15 06:04 UTC
[Rd] Inconsistency between eval and withVisible (with patch)
On Aug 15, 2013, at 01:46 , Gabriel Becker wrote:> R-team, > > The $value element of the return value of *withVisible* does not agree with > the return value of *eval* when *withVisible* is passed a variable (symbol) > containing an expression object or anonymous code/expressions which > generates an expression object when evaluated (such as calls to *parse* or * > expression*). > > I have attached a patch against the svn trunk which addresses this. > > Example (under devel r63577): > >> withVisible(parse(text="5+pi")) > $value > *expression(5+pi)* > > $visible > [1] TRUE > >> eval(parse(text="5+pi")) > *[1] 8.141593* >I don't think that is a bug, it is by design. The comparison should be to what happens if you just type the expression at the prompt:> parse(text="5+pi")expression(5+pi)> With the attached patch this is no longer the case:...so the patch introduces a bug since you can no longer withVisible() something that returns a language object.> >> withVisible(parse(text="5+pi")) > $value > *[1] 8.141593* > > $visible > [1] TRUE > > The patch changes only the withVisible function in eval.c. I'm happy to > work with / at the direction of an R-core member to get the patch into an > different form/coding style/fix strategy/etc if its current form is not > acceptable. > > Thanks, > ~G > >> sessionInfo() > R Under development (unstable) (2013-08-14 r63577) > Platform: x86_64-unknown-linux-gnu (64-bit) > > locale: > [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C > [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 > [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 > [7] LC_PAPER=en_US.UTF-8 LC_NAME=C > [9] LC_ADDRESS=C LC_TELEPHONE=C > [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > > > -- > Gabriel Becker > Graduate Student > Statistics Department > University of California, Davis > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
Peter Meilstrup
2013-Aug-15 15:11 UTC
[Rd] Inconsistency between eval and withVisible (with patch)
On Thu, Aug 15, 2013 at 5:59 AM, Simon Urbanek <simon.urbanek@r-project.org>wrote:> Note that this is documented very explicitly: > > "eval’ evaluates its first argument in the current scope before passing it > to the evaluator" >But the same man page also describes "eval" like this: 'eval' evaluates the 'expr' argument in the environment specified by 'envir' and returns the computed value. So, does "eval" perform one round of evaluation, or two? Does "evaluates [some] argument" refer to the ordinary process of obtaining the argument's value value, or to the feeding of that value back to the evaluator? Does this "evaluation" take place in the environment passed as argument, or the calling environment? I'm familiar with what 'eval' actually does, but its description in the man page is incoherent. Peter [[alternative HTML version deleted]]
Possibly Parallel Threads
- WISH: eval() to preserve the "visibility" (now value is always visible)
- source, sys.source and error line numbers
- WISH: eval() to preserve the "visibility" (now value is always visible)
- PATCH: Avoiding extra copies (NAMED bumped) with source(..., print.eval=FALSE) ...and with print.eval=TRUE?
- pmatch inconsistency