[Rd] Surpising behavior when using an active binding as loop index in R 4.0.0

Deepayan Sarkar deep@y@n@@@rk@r @end|ng |rom gm@||@com
Sun May 24 06:50:16 CEST 2020


A shorter reproducible example:

example(makeActiveBinding)
for (fred in 1:3) { 0 }
ls()

Both problems go away if you first do

compiler::enableJIT(2)

So looks like a bug in compiling the for loop.

-Deepayan

On Sat, May 23, 2020 at 5:45 PM Thomas Friedrichsmeier via R-devel
<r-devel using r-project.org> wrote:
>
> Possibly just a symptom of the earlier behavior, but I'll amend my
> example, below, with an even more disturbing observation:
>
> Am Sat, 23 May 2020 13:19:24 +0200
> schrieb Thomas Friedrichsmeier via R-devel <r-devel using r-project.org>:
> [...]
> > Consider the code below:
> >
> > makeActiveBinding("i",
> >       function(value) {
> >               if (missing(value)) {
> >                       x
> >       } else {
> >               print("set")
> >               x <<- value
> >       }
> >       }, globalenv())
> >
> > i <- 1     # output "set"
> > print(i)   # output [1] 1
> >
> > # Surprising behavior starts here:
> > for(i in 2:3) print(i) # output [1] "set"
> >                        #        NULL
> >                        #        NULL
> >
> > print(i)               # output NULL
> > print(x)               # output NULL
> >
> > i <- 4                 # output "set"
> > print(i)               # ouput [1] 4
> > print(x)               # ouput [1] 4
>
> ls()
> # Error in ls() :
> #  Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'NULL'
>
> Regards
> Thomas
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list