Bill, Is your conclusion to just update the code and enforce using the most recent version of R?
Dayne On Wed, Jul 15, 2015 at 4:44 PM, Dayne Filer <dayne.fi...@gmail.com> wrote: > David, > > If you are referring to the solution that would be: > > rapply(list(test), eval, envir = fenv) > > I thought I explained in the question that the above code does not work. > It does not throw an error, but the behavior is no different (at least in > the output or result). Using the above code still results in the x object > not being stored in fenv on 3.1.2. > > Dayne > > On Wed, Jul 15, 2015 at 4:40 PM, William Dunlap <wdun...@tibco.com> wrote: > >> Another aspect of the change is (using TERR's RinR package): >> > options(REvaluators=list(makeREvaluator("R-3.1.3"), >> makeREvaluator("R-3.2.0"))) >> > RCompare(rapply(list(quote(function(x)x),list(quote(pi),quote(7-4))), >> function(arg)typeof(arg))) >> R version 3.1.3 (2015-03-09) R version 3.2.0 (2015-04-16) >> [1,] [1] "closure" "double" [1] "language" "symbol" >> [2,] [3] "double" [3] "language" >> $all.equal >> $all.equal$`R version 3.1.3 (2015-03-09) vs. R version 3.2.0 >> (2015-04-16)` >> [1] "3 string mismatches" >> >> I prefer the new semantics, but it is a change. >> >> >> >> Bill Dunlap >> TIBCO Software >> wdunlap tibco.com >> >> On Wed, Jul 15, 2015 at 1:25 PM, David Winsemius <dwinsem...@comcast.net> >> wrote: >> >>> >>> On Jul 15, 2015, at 12:51 PM, William Dunlap wrote: >>> >>> > I think rapply() was changed to act like lapply() in this respect. >>> > >>> >>> When I looked at the source of the difference, it was that typeof() >>> returned 'language' in 3.2.1, while it returned 'list' in the earlier >>> version of R. The first check in rapply's code in both version was: >>> >>> if (typeof(object) != "list") >>> stop("'object' must be a list") >>> >>> Wrapping list() around the first argument and switching to using eval >>> with an expression-object rather than a call-object seemed to solve the >>> problem when this was posed as a question on StackOverflow, but Dayne was >>> not happy with that solution for other reasons that he is not describing. >>> >>> -- >>> David. >>> >>> > In R-3.1.3 we got >>> > rapply(list(quote(1+myNumber)), evalq, >>> envir=list2env(list(myNumber=17))) >>> > #[1] 18 >>> > rapply(list(quote(1+myNumber)), eval, >>> envir=list2env(list(myNumber=17))) >>> > #Error in (function (expr, envir = parent.frame(), enclos = if >>> > (is.list(envir) || : >>> > object 'myNumber' not found >>> > lapply(list(quote(1+myNumber)), evalq, >>> envir=list2env(list(myNumber=17))) >>> > #Error in eval(substitute(expr), envir, enclos) : object 'X' not found >>> > lapply(list(quote(1+myNumber)), eval, >>> envir=list2env(list(myNumber=17))) >>> > #[[1]] >>> > #[1] 18 >>> > while in R-3.2.0 we get >>> > rapply(list(quote(1+myNumber)), evalq, >>> envir=list2env(list(myNumber=17))) >>> > #Error in eval(substitute(expr), envir, enclos) : object 'X' not found >>> > rapply(list(quote(1+myNumber)), eval, >>> envir=list2env(list(myNumber=17))) >>> > #[1] 18 >>> > lapply(list(quote(1+myNumber)), evalq, >>> envir=list2env(list(myNumber=17))) >>> > #Error in eval(substitute(expr), envir, enclos) : object 'X' not found >>> > lapply(list(quote(1+myNumber)), eval, >>> envir=list2env(list(myNumber=17))) >>> > #[[1]] >>> > #[1] 18 >>> > >>> > Make the FUN argument function(arg)sys.call() to see some details of >>> the >>> > change. >>> > >>> > >>> > Bill Dunlap >>> > TIBCO Software >>> > wdunlap tibco.com >>> > >>> > On Wed, Jul 15, 2015 at 12:35 PM, Dayne Filer <dayne.fi...@gmail.com> >>> wrote: >>> > >>> >> In 3.1.2 eval does not store the result of the bquote-generated call >>> in >>> >> the given environment. Interestingly, in 3.2.1 eval does store the >>> result >>> >> of the bquote-generated call in the given environment. >>> >> >>> >> In other words if I run the given example with eval rather than >>> evalq, on >>> >> 3.1.2 "x" is never stored in "fenv," but it is when I run the same >>> code on >>> >> 3.2.1. However, the given example stores "x" in "fenv" on 3.1.2, but >>> throws >>> >> the error I gave when run on 3.2.1. >>> >> >>> >> To give credit, I received the idea for using evalq from SO: >>> >> http://stackoverflow.com/a/22559385 >>> >> >>> >> Dayne >>> >> >>> >> >>> >> On Wed, Jul 15, 2015 at 3:29 PM, William Dunlap <wdun...@tibco.com> >>> wrote: >>> >> >>> >>> I am curious why you used evalq instead of eval in this code. >>> >>> >>> >>> Bill Dunlap >>> >>> TIBCO Software >>> >>> wdunlap tibco.com >>> >>> >>> >>> On Wed, Jul 15, 2015 at 11:49 AM, Dayne Filer <dayne.fi...@gmail.com >>> > >>> >>> wrote: >>> >>> >>> >>>> Hello, >>> >>>> >>> >>>> I upgraded from 3.1.2 to 3.2.1 and am receiving errors on code that >>> >>>> worked >>> >>>> as I intended previously. Briefly, I am using bquote to generate >>> >>>> expressions to modify data.table objects within a function, so I >>> need >>> >>>> the >>> >>>> changes to actually be stored in the given environment. Previously, >>> I >>> >>>> used >>> >>>> code like the following: >>> >>>> >>> >>>> test <- list(bquote(x <- 10)) >>> >>>> fenv <- environment() >>> >>>> rapply(test, evalq, envir = fenv) >>> >>>> >>> >>>> Although the code in the example above is much simpler, it shows the >>> >>>> problem. On 3.1.2 the expression is evaluated and x is stored as 10 >>> in >>> >>>> the >>> >>>> given environment, fenv. In 3.2.1 the code throws an error: >>> >>>> >>> >>>> Error in eval(substitute(expr), envir, enclos) : object 'X' not >>> found >>> >>>> >>> >>>> I could not find anything in the release notes that would explain >>> this >>> >>>> change. Changing evalq to eval works in 3.2.1, but eval does not >>> store x >>> >>>> in >>> >>>> the given environment in 3.1.2. >>> >>>> >>> >>>> Thanks, >>> >>>> >>> >>>> Dayne >>> >>>> >>> >>>> [[alternative HTML version deleted]] >>> >>>> >>> >>>> ______________________________________________ >>> >>>> R-devel@r-project.org mailing list >>> >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> >>>> >>> >>> >>> >>> >>> >> >>> > >>> > [[alternative HTML version deleted]] >>> > >>> > ______________________________________________ >>> > R-devel@r-project.org mailing list >>> > https://stat.ethz.ch/mailman/listinfo/r-devel >>> >>> David Winsemius >>> Alameda, CA, USA >>> >>> >> > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel