Фильтрация из выбранного ввода в R shiny

#filter #shiny #flexdashboard #selectinput

#Фильтр #блестящий #flexdashboard #selectinput

Вопрос:

Я продолжаю получать ошибки при попытке отфильтровать базу данных в соответствии с выбранным входом. Я сделал этот действительно простой пример на основе набора данных iris, чтобы показать вам, ребята, мою проблему:

 
    ```{r}
    library(flexdashboard)
    library(tidyverse)
    ```
    
    Sidebar {.sidebar}
    =====================================
    
    ```{r}
    
    fluidRow(
      column(7,
             selectInput("Species", "Choose a species",
                         choices = c("setosa", "versicolor", "virginica"))))
    
    mydata <- reactive({
    iris %>% filter(Species == input$Species)
    })
    
    ```
    
    Results
    ===================================== 
    
    ```{r}
    head(mydata)
    ```

  

Комментарии:

1. mydata является реактивным, поэтому его необходимо оценивать с mydata()

2. Хммм, я не уверен, что понял, не могли бы вы, пожалуйста, записать код?

Ответ №1:

Поскольку mydata это реактивный параметр, вы должны оценить его с помощью mydata() в реактивном контексте (например, renderDT ). Для получения дополнительной информации см. flexdashboard с shiny и руководство по shiny.

 ---
title: "test"
runtime: shiny
output:
  flexdashboard::flex_dashboard:
  orientation: columns
vertical_layout: fill
theme: bootstrap
---
  

    ```{r global, include = FALSE}
    
    library(flexdashboard)
    library(tidyverse)
    library(DT)
    
    ```
    
    Sidebar {.sidebar}
    =====================================
    
    ```{r}
    
    fluidRow(
      column(7,
             selectInput("Species", "Choose a species",
                         choices = c("setosa", "versicolor", "virginica"))))
    
    mydata <- reactive({
    iris %>% filter(Species == input$Species)
    })
    
    ```
    
    Results
    ===================================== 
    
    ```{r}
    renderDT({head(mydata())})
    ```

  

Комментарии:

1. Хорошо, большое вам спасибо за вашу помощь. Но если вместо отображения набора данных, как в моем примере, я использую его для проведения дополнительного анализа, например, для вычисления среднего значения Sepal. Длина mean(mydata$Sepal.Lenght) , как я мог это сделать?

2. опять же, используйте mydata()$Sepal.Length в реактивном контексте, например, reactive: new_data <- reactive({mean(mydata()$Sepal.Lenght)}) . Взгляните на учебные пособия, которые я связал

3. Еще раз спасибо, я ценю это.