Фильтрация данных с использованием pickerInput () и построение графиков на основе отфильтрованных данных в R - PullRequest
0 голосов
/ 26 апреля 2019

Я в настоящее время разрабатываю блестящее приложение, и мне нужно отфильтровать данные на основе выбора пользователя.Элемент управления вводом - это pickerInput ().Я попробовал следующий код, но он не работает.

library("shiny")
library("dplyr")
library("shinyWidgets")

mychoices <- c("A", "B", "C", "D", "E","F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
               "U", "V", "W", "X", "Y", "Z")
df <- data.frame("ID" = mychoices, "invoice" = runif(26, 100, 200))

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      uiOutput("id1")
      )
    ),
    mainPanel(
      plotOutput("test")        
    )
  )
)



server <- function(input, output) {

  output$id1 <- renderUI({
    pickerInput(
      inputId = "id", label = "Choices :",
      choices = mychoices,
      options = list('actions-box' = TRUE),
      multiple = TRUE
    )

  })

  filter1 <-  reactive({

    df %>% filter(ID %in% input$id)
})


  output$test <- renderPlot({

    ggplot(data = filter1, aes(invoice)) + geom_histogram(binwidth=30, alpha=0.6)
  })
}

shinyApp(ui = ui, server = server)

Может кто-нибудь помочь мне с этой проблемой?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Это классическая ошибка, с которой мы сталкиваемся, начиная с R Shiny.Как сказано выше, вам нужно будет добавлять круглые скобки всякий раз, когда вы вызываете ваш реактивный объект данных filter1.у меня этот код работает:

library("shiny")
library("dplyr")
library("shinyWidgets")
library("ggplot2")

mychoices <- c("A", "B", "C", "D", "E","F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
               "U", "V", "W", "X", "Y", "Z")
df <- data.frame("ID" = mychoices, "invoice" = runif(26, 100, 200))

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      uiOutput("id1")
    )
  ,
  mainPanel(
    plotOutput("test")        
  )
)
)




server <- function(input, output) {

  output$id1 <- renderUI({
    pickerInput(
      inputId = "id", label = "Choices :",
      choices = mychoices,
      options = list('actions-box' = TRUE),
      multiple = TRUE
    )

  })

  filter1 <-  reactive({

    df %>% filter(ID %in% input$id)
  })


  output$test <- renderPlot({
    filter1 = filter1()
    ggplot(data = filter1, aes(invoice)) + geom_histogram(binwidth=30, alpha=0.6)
  })
}

shinyApp(ui = ui, server = server)
0 голосов
/ 26 апреля 2019

При вызове вашего реактивного filter1 вам понадобятся скобки ().Пожалуйста, смотрите следующее:

library("shiny")
library("dplyr")
library("shinyWidgets")

mychoices <- c("A", "B", "C", "D", "E","F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
               "U", "V", "W", "X", "Y", "Z")
df <- data.frame("ID" = mychoices, "invoice" = runif(26, 100, 200))

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      uiOutput("id1")
    )
    ,
    mainPanel(
      plotOutput("test")        
    ))
)

server <- function(input, output) {

  output$id1 <- renderUI({
    pickerInput(
      inputId = "id", label = "Choices :",
      choices = mychoices,
      options = list('actions-box' = TRUE),
      multiple = TRUE
    )
  })

  filter1 <-  reactive({
    df %>% filter(ID %in% input$id)
  })

  output$test <- renderPlot({
    myFilteredDf <- filter1()
    ggplot(data = myFilteredDf, aes(invoice)) + geom_histogram(binwidth=30, alpha=0.6)
  })
}

shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...