如何在 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
中这样做。
编辑:
- 您可以在 R 块中创建一个
reactive
变量:
内容将被缓存,因此它只运行一次,即使您将在不同的块中使用它也是如此:
```{r}
sum <- reactive( {
plus(df[,input$a], df[input$b])
})
```
- 在此之后,您可以在渲染函数中使用名为
sum
的反应式表达式,例如 renderPrint
:
请注意,您可以像访问函数一样访问 reactives
(即:sum()
)
### Itens mais frequentes
```{r}
renderPrint( {
sum()
})
```
我有一个问题,我必须采用 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
中这样做。
编辑:
- 您可以在 R 块中创建一个
reactive
变量:
内容将被缓存,因此它只运行一次,即使您将在不同的块中使用它也是如此:
```{r}
sum <- reactive( {
plus(df[,input$a], df[input$b])
})
```
- 在此之后,您可以在渲染函数中使用名为
sum
的反应式表达式,例如renderPrint
:
请注意,您可以像访问函数一样访问 reactives
(即:sum()
)
### Itens mais frequentes
```{r}
renderPrint( {
sum()
})
```