Как использовать кнопку действия при оставлении кнопки отправки в flexdashboard?

#r #shiny #flexdashboard

Вопрос:

Я бы хотел renderValueBox , чтобы это вычислялось при нажатии кнопки, а не автоматически.

Я пробовал использовать actionButton , но это не сработало. Я также не смог использовать эту submitButton функцию flexdashboard , но она тоже не работала.

Я хотел бы сделать это, используя только Shiny::actionButton функцию (рекомендованную документацией). Мой код:

 ---
title: "Sum"
runtime: shiny
output: 
  flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: fill
theme: yeti
---

side{.sidebar}
-------------------------------------------

```{r}
library(tibble)
library(shiny)
library(shinyWidgets)
library(flexdashboard)
library(scales)
```


**Análise**

```{r}
autonumericInput(
inputId = "a", 
value = 0, 
label = "Value 1", 
align = "center", 
currencySymbol = "R$", 
currencySymbolPlacement = "p",
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)

autonumericInput(
inputId = "b", 
value = 0, 
label = "Value 2", 
align = "center", 
currencySymbol = "R$", 
currencySymbolPlacement = "p", 
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)

actionButton("execute", "Calcule")
```

```{r}
f_1 <- function(a, b) {
  a   b
}
```

```{r}
reac <- eventReactive(input$execute, {
  x = tibble(
    a = input$a, 
    b = input$b
  )
}, ignoreNULL = FALSE)

pred <- reactive({
  temp <- reac()
  f_1(
    a = input$a, 
    b = input$b
  )
})
```

abc{}
--------------------------------------

###
```{r}
renderValueBox({
  valueBox(
    value = scales::dollar(x = round(x = pred(), digits = 4), prefix = "$ ", suffix = " dollar(s)", big.mark = ",", decimal.mark = "."), 
    caption = "Sum", 
    color = "steelblue", 
    icon = "fa-plus"
  )
})
```
 

Ответ №1:

 ---
title: "Sum"
runtime: shiny
output: 
  flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: fill
theme: yeti
---

side{.sidebar}
-------------------------------------------

```{r}
library(tibble)
library(shiny)
library(shinyWidgets)
library(flexdashboard)
library(scales)
```


**Análise**

```{r}
autonumericInput(
inputId = "a", 
value = 0, 
label = "Value 1", 
align = "center", 
currencySymbol = "R$", 
currencySymbolPlacement = "p",
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)

autonumericInput(
inputId = "b", 
value = 0, 
label = "Value 2", 
align = "center", 
currencySymbol = "R$", 
currencySymbolPlacement = "p", 
decimalPlaces = 2,
digitGroupSeparator = ".",
decimalCharacter = ","
)

actionButton("execute", "Calcule")
```

abc{}
--------------------------------------

###
```{r}
renderValueBox({
    req(input$execute)
  valueBox(
    value = scales::dollar(x = round(x = isolate(input$a)   isolate(input$b), digits = 4), prefix = "$ ", suffix = " dollar(s)", big.mark = ",", decimal.mark = "."), 
    caption = "Sum", 
    color = "steelblue", 
    icon = "fa-plus"
  )
})
```
 

Хитрость здесь в том, чтобы использовать isolate() перенос ваших входных данных, чтобы эти входные данные не запускали обновление коробки и не добавляли req(input$execute) , чтобы запускать обновления.