Создать реактивную кнопку действия с flexdashboard - PullRequest
1 голос
/ 04 февраля 2020

Я пытался получить набор данных из запроса БД, чтобы показать результаты на flexdashboard. Поэтому я попробовал следующий код, используя кнопку действия для запуска запроса:

---
title: "Untitled"
output: 
    flexdashboard::flex_dashboard:
    orientation: columns
vertical_layout: fill
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(DBI)
library(RPostgreSQL)
library(tidyverse)
library(DT)
drv <- dbDriver("PostgreSQL")
```

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

```{r}
dateInput("input_date_start", “Start date:”, value = Sys.Date()-30)
dateInput("input_date_end", “End date:”, value = Sys.Date()-3)
selectInput("input_marca", “Select brand:”,
            c(“Cookies” = “Cookies”,
              “Corn_Flakes” = “Corn Flakes”,
              “Fruit_Loops” = “Fruit Loops“))
actionButton("button_execute", “Excute”)
```

Column
-----------------------------------------------------------------------

### Chart B

```{r global}
query <- reactive(input$button_execute) {
  initial <- input_date_start
  final <- input_date_end
  query <- paste0("SELECT * from the_table tt
              WHERE tt.starting >= ",initial, 
              "AND tt.finishing <= ",final)
}
drv <- dbDriver("PostgreSQL")
# Connect to database
conection <- dbConnect(drv, 
                   dbname = “the_database”, 
                   host = “the_host”,
                   user = “the_userl”,
                   password = “the_password”,
                   port = 9999)
rs <- dbSendQuery(conection, query)
dataset <- dbFetch(rs)
dbDisconnect(dataset)
```

```{r}
DT::datatable(dataset)
```

Но я получаю ошибку, что отсутствует неожиданная скобка, которая находится внутри реактивной sql. Я понимаю, что для реактивных действий нужны эти скобки, но я не совсем уверен, как это работает с actionButton.

Пожалуйста, ваша помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 06 февраля 2020

Поскольку вам требуется сбор реактивных данных, вы можете кодировать следующее без глобального. И вы должны помнить, что ваши данные из селекторов даты поступают из «ввода». И соединение должно быть в скобках запроса:

```{r}
query <- reactive(input$button_execute,{
  initial <- input$input_date_start
  final <- input$input_date_end
  query <- paste0("SELECT * from the_table tt
              WHERE tt.starting >= '",initial, "'" , 
              "AND tt.finishing <= '",final,"'")
  drv <- dbDriver("PostgreSQL")
  # Connect to database
  conection <- dbConnect(drv, 
               dbname = “the_database”, 
               host = “the_host”,
               user = “the_userl”,
               password = “the_password”,
               port = 9999)
  rs <- dbSendQuery(conection, query)
  dataset <- dbFetch(rs)
  dbDisconnect(dataset)
  query <- dataset
})
```

И теперь вы можете использовать результаты запроса в реактивном объекте, таком как таблица, график и т. Д. c.

```{r}
    renderDataTable(
    dataset <- query()
    DT::datatable(query)
)
```

Надеюсь, это поможет.

...