如何在 flexdashboard 的全局变量中使用闪亮的输入变量

How to use shiny input variables in a global variable in flexdashboard

我有一个问题,我必须采用 select 输入值并在函数中使用,但我无法在多个渲染中调用该函数(绘图、打印、table)因为这是一个昂贵的功能。有了闪亮的输入,我也想创建一个过滤数据和其他变量。 我得到的错误方法是:

Operation not allowed without an active reactive context.

这只是一个简单的例子。

---
title: "TITLE"
output: 
  flexdashboard::flex_dashboard:
    orientation: row
    vertical_layout: fill
    theme: flatly
runtime: shiny
---


```{r global, include=FALSE}
require(flexdashboard)
require(ggplot2)
df <- data.frame(year = c("2013", "2014", "2015", "2013", "2014", "2015", "2013", "2014", "2015"),
                 cat = c("A", "A", "A", "B", "B", "B", "C", "C", "C"),
                 freqA = c(100, 100, 110, 80, 80, 90, 90, 90, 100),
                 freqB = c(50, 50, 55, 40, 40, 45, 45, 45, 50))

plus <- function(a,b){
  return(a + b)
}


```


Column {.sidebar}
-----------------------------------------------------------------------



```{r}

selectInput("a","select A:", c("freqA","freqB"))
selectInput("b","select B:", c("freqA","freqB"))




```

Column {data-width=350}
-----------------------------------------------------------------------

### Itens mais frequentes

```{r}

sum <- plus(df[,input$a], df[input$b])


```

### Chart C

```{r}

```


Column {data-width=650,data-high=10}
-----------------------------------------------------------------------

### Relações

```{r}

```

正如错误消息所说:你只能在反应式表达式中使用reactives(例如输入元素)。

这是因为每次输入元素改变时,输出都必须重新渲染,而你只能在 reactive context 中这样做。

编辑:

  1. 您可以在 R 块中创建一个 reactive 变量:

内容将被缓存,因此它只运行一次,即使您将在不同的块中使用它也是如此:

```{r}

sum <- reactive( {
  plus(df[,input$a], df[input$b])
})

```
  1. 在此之后,您可以在渲染函数中使用名为 sum 的反应式表达式,例如 renderPrint:

请注意,您可以像访问函数一样访问 reactives(即:sum()

### Itens mais frequentes

```{r}
renderPrint( {
  sum()
})
```