Winston Chang
2014-Aug-11 01:46 UTC
[Rd] Error when assigning value in environment which is a locked binding
If an environment x contains a locked binding y which is also an environment, and then you try to assign a value to a binding inside of y, it can either succeed or fail, depending on how you refer to environment y. x <- new.env() x$y <- new.env() lockEnvironment(x, bindings = TRUE) # This assignment fails x$y$z <- 1 # Error in x$y$z <- 1 : cannot change value of locked binding for 'y' # Saving x$y to another variable, and then assigning there works y2 <- x$y y2$z <- 10 # OK print(x$y$z) # 10 Is this a bug or a feature? I realize that x$y is a locked binding while y2 is not. -Winston
Winston Chang
2014-Aug-11 02:07 UTC
[Rd] Error when assigning value in environment which is a locked binding
Another oddity - even though there's an error thrown in assignment to x$y$z, the assignment succeeds. x <- new.env() x$y <- new.env() lockEnvironment(x, bindings = TRUE) x$y$z <- 1 # Error in x$y$z <- 1 : cannot change value of locked binding for 'y' x$y$z # [1] 1 So I assume there must be a bug somewhere in here. -Winston On Sun, Aug 10, 2014 at 8:46 PM, Winston Chang <winstonchang1@gmail.com> wrote:> If an environment x contains a locked binding y which is also an > environment, and then you try to assign a value to a binding inside of > y, it can either succeed or fail, depending on how you refer to > environment y. > > x <- new.env() > x$y <- new.env() > lockEnvironment(x, bindings = TRUE) > > # This assignment fails > x$y$z <- 1 > # Error in x$y$z <- 1 : cannot change value of locked binding for 'y' > > # Saving x$y to another variable, and then assigning there works > y2 <- x$y > y2$z <- 10 # OK > print(x$y$z) > # 10 > > > Is this a bug or a feature? I realize that x$y is a locked binding > while y2 is not. > > -Winston >[[alternative HTML version deleted]]