如何创建父环境不同但绑定联动的两个R环境?
模拟R中环境的联动同步特性
.BaseNamespaceEnv 和 baseenv() 具备一个特殊特性:二者的父环境不同,但在其中一个环境中修改或添加绑定,另一个环境会同步更新。
我能否模拟这种特性?期望定义 semi_clone() 函数后实现如下效果:
e1 <- new.env(parent = emptyenv()) e2 <- semi_clone(e1, parent = .GlobalEnv) parent.env(e2) #> .GlobalEnv e2$x <- 1 e1$x #> [1] 1
应用场景
以下是补充的应用场景说明:
有两个函数,它们的父环境及祖先环境不同,但我希望它们拥有联动的掩码环境——在一个掩码中修改值,另一个也会同步变化。
mask1 <- list2env(list(x = 1, y = 2)) mask2 <- mask1 # 实际场景中二者并非同一环境 # 存储自身以方便更新 mask1$mask <- mask1 # 实际场景中,该函数位于parent1环境中 add <- function() { mask$x <- sample(5, 1) x + y } # 实际场景中,该函数位于parent2环境中 multiply <- function() { x * y } # 在函数环境与其父环境之间插入掩码环境 environment(add) <- mask1 environment(multiply) <- mask2 set.seed(2) multiply() #> [1] 2 add() #> [1] 7 multiply() #> [1] 10
内容的提问来源于stack exchange,提问作者moodymudskipper
相关产品推荐
相关产品推荐

