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

时间:2018-01-12 12:37:38

标签: r shiny dashboard flexdashboard

我有一个问题,我必须采取选择输入值并在函数中使用,但我不能在多个渲染(绘图,打印,表)中调用该函数,因为它是一个昂贵的函数。有了闪亮的输入,我想创建一个Filtered数据和其他变量。 我得到的错误方法是:

  

没有活跃的反应上下文时,不允许操作。

这只是一个简单的例子。

---
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}

```

1 个答案:

答案 0 :(得分:1)

这就是错误消息所说的方式:您只能在反应式表达式中使用reactives(例如输入元素)。

这是因为每次输入元素更改时,都必须重新输出输出,并且只能在reactive context中执行此操作。

修改

  1. 您可以在R chunk中创建reactive变量:
  2. 内容将被缓存,因此它只运行一次,即使您将在不同的块中使用它:

    ```{r}
    
    sum <- reactive( {
      plus(df[,input$a], df[input$b])
    })
    
    ```
    
    1. 在此之后,您可以在渲染函数中使用名为sum的反应式表达式,例如renderPrint
    2. 请注意,您可以像函数一样访问reactives(即:sum()

      ### Itens mais frequentes
      
      ```{r}
      renderPrint( {
        sum()
      })
      ```
      

      enter image description here