【发布时间】: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