Не удается найти имя столбца реактивного фрейма данных в блестящем приложении - PullRequest
0 голосов
/ 28 мая 2020

У меня есть блестящая панель инструментов ниже, в которой я хочу использовать переменную из моего pickerInput() и создать график. Проблема в том, что мой набор данных является реактивным объектом, и когда я пытаюсь использовать table(), я получаю object 'name' not found. Если он не будет реактивным, он будет работать, но он должен быть в моем реальном приложении.

library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(ggplot2)
library(plotly)
ui <- dashboardPage(
    header = dashboardHeader(title = "My dashboard"),
    sidebar = dashboardSidebar(
        uiOutput("dbs")

    ),
    body = dashboardBody(
        plotlyOutput("fn")
    )
)

server <- function(input, output, session) {
    pe<-reactive({
        sts<-c("Rev","Rev")
        sID<-c("123","124")
        snID<-c("23","34")
        name<-c("s","d")
        data.frame(sts,sID,snID,name)
    })


    output$dbs<-renderUI({

            pickerInput("DB", "Select Database/s", 
                        choices = c("name","snID"), 
                        multiple = F,options = list(`actions-box` = TRUE),
                        selected = "name")

    })
    output$fn<-renderPlotly({

            #2.2 MAKING A TABLE for public.exists
        tbl<-table(pe()[[input$DB]], pe()$sts)
            ggplotly(
                ggplot(as.data.frame(tbl), aes(!!sym(input$DB), Freq, fill = sts)) 
            )

    })

}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 28 мая 2020

Проблема в вашем реактивном df pe. В блестящем логе c, когда приложение запускает renderPlotly, оценивается ваша нестандартная оценка !!sym(input$DB), и оно пытается получить объект name, а затем ищет фрейм данных, потому что ractive использует ленивый загрузка в блестящем. Это означает, что реактивная программа будет запускаться только тогда, когда этого требует какой-либо другой код, но ваш !!sym(input$DB) уже запущен, и я думаю, что есть задержка между поиском нестандартной оценки необходимого фрейма данных и запуском реактивного. Итак, происходит ошибка.

У вас есть два решения: во-первых, измените !! на оценку строки:

        ggplotly(
            ggplot(as.data.frame(tbl), aes_(input$DB, 'Freq', fill = 'sts')) 
        )

Во-вторых, так как ваш pe является фиксированным df, нет необходимости используйте reactive

server <- function(input, output, session) {
    pe<-{
        sts<-c("Rev","Rev")
        sID<-c("123","124")
        snID<-c("23","34")
        name<-c("s","d")
        data.frame(sts,sID,snID,name)
    }


    output$dbs<-renderUI({

        pickerInput("DB", "Select Database/s", 
                    choices = c("name","snID"), 
                    multiple = F,options = list(`actions-box` = TRUE),
                    selected = "name")

    })
    output$fn<-renderPlotly({
        #2.2 MAKING A TABLE for public.exists
        tbl<-table(pe[[input$DB]], pe$sts)

        ggplotly(
            ggplot(as.data.frame(tbl), aes(!!sym(input$DB), Freq, fill = sts)) 
        )

    })

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