是否有子集的makeActiveBinding?

时间:2014-12-02 20:51:29

标签: r reactive-programming

以下显示了我想要的内容:

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

有没有办法绑定对象子集?也许有一些显而易见的东西我不知道......

1 个答案:

答案 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())

使用全局赋值运算符(<<-)非常重要,否则只能在函数的环境中进行分配。