R Shiny - 使用renderUI和uiOutput作为绘图的进一步输入

时间:2018-04-16 14:45:13

标签: r shiny bar-chart reactive uioutput

我的数据集示例如下:

print(data)
    Team v1       v2      v3    v4   v5
A    England  Gold    Red        50 
B    England  Silver  Blue  30   40 
C    Wales            Blue  40   30
D    USA      Silver  Red   50   20

我正在尝试制作一个R闪亮的仪表板,以允许用户根据某些特征来比较团队。 v1,v2和v3是我感兴趣的能够查看的特征,而v4和v5包含我想要比较的数据。例如,我希望能够(在条形图中)显示v2 = silver的所有团队的v4值。

我此刻的尝试如下:

ui.r

# Shiny App
     ui <- fluidPage(
     fluidRow(
column(6, offset=3,
selectInput(inputId = "variables",
        label = "Variable",
        choices = colnames(data[,c(5:6)])))),
fluidRow(
column(2,
       selectInput(inputId = "filter",
                   label = "Filter",
                   choices = colnames(data[,c(2:4)]),
                   selected = 'v2')),
column(2,
       uiOutput("ui"))
),
plotOutput("all")
)

和server.r

server <- function(input,output){
output$ui <- renderUI ({
switch(input$filter,
       "v1" = selectInput(
         "v1", "More filters", data$v1, selected = "England"),
       "v2" = selectInput(
         "v2", "More filters", data$v2, selected = "Gold"),
       "v3" = selectInput(
         "v3", "More filters", data$v3, selected = "Red")
  )
  })

  plott <- reactive({input$ui})
  varr <- reactive({input$filter})

  datasubset <- reactive({subset(data, varr()==plott())})

  finalsubset <- reactive({
    datasubset()[,input$variables]
  })

  output$all <- renderPlot({barplot(finalsubset())
  })

我发现基于为输入$ filter选择的选项创建第二个过滤器的唯一方法是使用renderUI和uiOutput。但是,我找不到基于这两个反应输入产生条形图的方法。

我用来获取我想要绘制的数据子集的当前代码是:

plott <- reactive({input$ui})
varr <- reactive({input$filter})

 datasubset <- reactive({subset(data, varr()==plott())})

然而,我得到错误&#39;需要有限的xlim值&#39;在我闪亮的应用程序中

如果我将varr()和plott()分别替换为v2和Gold(例如),那么数据就很好了,但这些数据不会对输入产生反应。

我在这里做错了什么?

0 个答案:

没有答案