在闪亮的应用程序中找不到反应性数据框的列名

时间:2020-05-28 17:44:33

标签: r shiny

下面有一个闪亮的仪表板,我想在其中使用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 :(得分:0)

问题是您的反应性DF prp.out <- prop.test(x=8, n=144, conf.level=.95, correct=TRUE) prp.out$conf.int <- prp.out$conf.int * 100 prp.out # # 1-sample proportions test with continuity correction # # data: 8 out of 144, null probability 0.5 # X-squared = 112.01, df = 1, p-value < 2.2e-16 # alternative hypothesis: true p is not equal to 0.5 # 95 percent confidence interval: # 2.606172 11.016593 # sample estimates: # p # 0.05555556 。按照闪亮的逻辑,当应用运行pe时,会对您对renderPlotly的非标准评估进行评估,并尝试获取对象!!sym(input$DB),然后搜索数据帧,因为{{ 1}}使用闪亮的延迟加载。这意味着只有在其他一些代码需要它时,反应式才会运行,但是您的name已经运行,并且我认为找到非标准评估所需数据帧和运行反应式之间存在一定的延迟。所以会发生错误。

您有两种解决方案,首先,将ractive更改为字符串求值:

!!sym(input$DB)

第二,由于您的!!是固定df,因此无需使用 ggplotly( ggplot(as.data.frame(tbl), aes_(input$DB, 'Freq', fill = 'sts')) )

pe