Hi guys,

I think there might be an issue with the NAMED value on the object returned
by an active binding. For example, with the latest R devel,

env <- new.env(parent=emptyenv())

makeBinding <- function(data) {
  force(data)
  function(new) {
    if (missing(new))
      data
    else {
      print(data)
      print(new)
      data <<- new
    }
  }
}

makeActiveBinding("a", makeBinding(1), env)

env$a <- 2
# [1] 1
# [2] 2
env$a[1] <- 3
# [1] 3
# [1] 3

## but everything is alright if we add another name
b <- env$a
env$a[1] <- 4
# [1] 3
# [1] 4

This naive hack seems to have fixed the above case:

--- src/main/envir.c    (revision 54284)
+++ src/main/envir.c    (working copy)
@@ -142,6 +142,9 @@
     SEXP expr = LCONS(fun, R_NilValue);
     PROTECT(expr);
     expr = eval(expr, R_GlobalEnv);
+    if (NAMED(expr) == 1) {
+      SET_NAMED(expr, 2);
+    }
     UNPROTECT(1);
     return expr;
 }

Thanks,
Michael

        [[alternative HTML version deleted]]

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

Reply via email to