【问题标题】:Shiny widget does not pass values correctly to ggplot闪亮的小部件没有将值正确传递给 ggplot
【发布时间】:2020-05-29 01:42:48
【问题描述】:

我有下面闪亮的仪表板,我想在其中使用我的pickerInput() 中的一个变量并创建一个图。问题是,如果我使用例如name 或snID 而不是input$DB,则创建该图。但是当我使用input$DB 时,我得到:Warning: Error in table: all arguments must have the same length

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) {

        sts<-c("Rev","Rev")
        sID<-c("123","124")
        snID<-c("23","34")
        name<-c("s","d")
        pe<-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)

【问题讨论】:

  • 问题是input$DB给出了一个字符,与table()不兼容。使用table(pe[[input$DB]], pe$sts) 应该会更好。出于同样的原因,您应该在ggplot() 中输入!!sym(input$DB) 而不是input$DB
  • 终于成功了
  • 从我的评论中创建一个新的答案,这样人们就可以看到错误和完整的工作代码
  • 如果 pe 是反应性对象,您的解决方案将不起作用。我应该做一个新的Q吗?
  • 尝试用pe()替换pe

标签: r ggplot2 shiny


【解决方案1】:

我怀疑您的 output$fn 反应在 input$DB 有值之前执行。因此,添加

req(input$DB)

在反应开始时,你应该没问题。

在没有任何演示输入数据的情况下,很难确定。

【讨论】:

  • 我的服务器部分开头有演示数据
  • 你能复制它吗?
  • 你的问题不在于 Shiny 或 ggplot。正如错误消息所说,它与您对table 的调用有关。您不断更改源代码以响应@bretauv 的建议。他似乎在为您指明正确的方向,但您的代码似乎确实存在多个问题。我建议退后一步,逐个解决问题,以便您可以依次隔离和理解每个问题。
  • 他的回答帮助了我,但现在我有一个不同的问题。 stackoverflow.com/questions/62071152/…
猜你喜欢
  • 2013-11-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多