在被动

时间:2018-06-14 15:34:37

标签: r shiny

我正在生成3个基于for循环的值框;

for ( i in 0:3) {
  name = as.character(i)

  output[[name]] <- ({
    renderValueBox(
      valueBox(value = i,
               icon = "fa-euro")
    )
  })
}

作为值,对于这个例子,我会显示i,并且当我这样调用它时,它希望显示1,2,3;

###
```{r}
valueBoxOutput("0")
```

###
```{r}
valueBoxOutput("1")
```

###
```{r}
valueBoxOutput("2")
```

然而,因为它是被动的而且我在渲染时是3,我不会那样,我将有3个值框显示3.这里的最终目标是根据被动加载的数据框有3个值框,就像这样;

set_aggregated <- reactiveFileReader(1000, session,  "./rdsdata/set_aggregated.rds", readRDS)

然后在那里调用不同的值;

  output[[name]] <- ({
    renderValueBox(
      valueBox(value = hub_set_aggregated()[i, "code"],
               color = ddy_colour_4,
               icon = "fa-euro")
    )
  })

我想我明白为什么它不起作用。但不知道如何让它发挥作用。

1 个答案:

答案 0 :(得分:3)

使用创建正确闭包的函数而不是直接在循环中执行它会更安全。例如

rvb <- function(i) {
  force(i)
  renderValueBox(valueBox(value = i, icon = "fa-euro"))
}

for ( i in 0:3) {
  name = as.character(i)
  output[[name]] <- rvb(i)
}