ОШИБКА: `data` должен быть фреймом данных или другим объектом, который можно принудительно вызвать с помощью` fortify () `, а не объектом S3 с классом реактивнымExpr / реактивным - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь построить панель управления Corona. Где Если кто-то выберет штат из выпадающего списка, то на графике будут показаны случаи округа. Например, если кто-то выбирает Гуджарат, в столбчатой ​​диаграмме он показывает районные дела. Кто-то меняет это на Махараштра, Это должно обновляться с районом Махараштры. Но я получаю "ОШИБКА: data должен быть фреймом данных или другим объектом, который может быть обработан fortify(), а не объектом S3 с классом реактивнымExpr / реактивным ".

library(shiny)
library(readxl)
library(ggplot2)
library(dplyr)

ui <- fluidPage(

    # Application title
    titlePanel("Corona Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            selectInput(inputId = "state", 
                        label = "Select the State",
                        choices = unique(data$`Detected State`))
        ),

        # Show a plot of the generated distribution
        mainPanel(
           plotOutput("stateplot")
        )
    )
)


data <- read_excel("Live Data Worldometer.xlsx", sheet = "IndiaData")
data <- data[,c(-2,-1)]

server <- function(session, input, output) {

    d1 <- reactive({data %>% group_by(`Detected State`) %>% count(`Detected District`) %>% filter(`Detected State` == input$state)
        })

    output$stateplot <- renderPlot({
        ggplot(d1, aes(d1$`Detected District`, d1$n))+geom_bar(stat = "identity")
    })

}

# Run the application 
shinyApp(ui = ui, server = server)

Это вывод, который я получаю

1 Ответ

0 голосов
/ 11 апреля 2020

d1 - это не кадр данных, а выражение, которое необходимо оценить (reactive не возвращает кадр данных). Вам необходимо активировать реактивный элемент перед его использованием в ggplot2

server <- function(session, input, output) {

    d1 <- reactive({
        data %>% group_by(`Detected State`) %>% 
                 count(`Detected District`) %>%
                 filter(`Detected State` == input$state)
        })

    output$stateplot <- renderPlot({
        ggplot(d1(), aes(x = `Detected District`, y = n)) +
             geom_bar(stat = "identity")
    })

}
...