以下显示了我想要的内容:
session <- data.frame(period=rep(1:2, each=3), id=rep(1:3,2), x=NA)
makeActiveBinding("subject", function (x) {
session[session$period==period & session$id==id,]
}, environment())
period <- 2
id <- 1
subject
## period id x
## 4 2 1 NA
id <- 2
subject
## period id x
## 5 2 2 NA
到目前为止很好! 但是:
subject$x <- "id 2 did sthg"
subject
## period id x
## 5 2 2 NA
有没有办法绑定对象子集?也许有一些显而易见的东西我不知道......
答案 0 :(得分:0)
坦布尔韦德!
子集通过复制整个对象然后分配给它来工作。因此,以下方法可行:
session <- data.frame(period=rep(1:2, each=3), id=rep(1:3,2), x=NA)
makeActiveBinding("subject", function (x) {
if (missing(x)) {
session[session$period==period & session$id==id,]
} else {
session[session$period==period & session$id==id,] <<- x
}
}, environment())
使用全局赋值运算符(<<-
)非常重要,否则只能在函数的环境中进行分配。