首页 > 解决方案 > 闪亮时动态变量的电平选择

问题描述

我正在开发一个闪亮的应用程序,它将要求用户通过选择输入小部件从预加载的数据框中选择 n 个字符变量。为简单起见,仅使用两个字符变量(类别和品牌)创建数据框。

如果用户选择一个字符变量说类别,那么另一个小部件会动态出现,提示选择类别级别。如果他同时选择了两个字符变量,即类别和品牌,那么两个输入小部件会动态出现,提示选择两者的级别。

在类别变量中,我有两个级别(护肤和护发),他们的品牌当然不同。

挑战是当用户在第一个输入小部件和第二个输入小部件中选择护肤品时,我只希望护肤品牌在第三个输入小部件中显示为选项,如果第二个输入小部件中的护发那么只有护发品牌在第三个输入小部件中. 如果在第二个输入小部件中都选择了,那么只有所有品牌都应该作为第三个输入小部件的选项。

我正在努力解决这些问题,也无法以任何其他方式做到这一点。
请建议。

library(shiny)
library(DT)

ui <- shinyUI(fluidPage(
tabsetPanel(
tabPanel("Data", fluid = TRUE,
         sidebarLayout(
           sidebarPanel(p("Please remove None first"),
                        uiOutput("dim"),
                        uiOutput("levels1")),
           mainPanel(
             DT::dataTableOutput("data_display")
           ))))))

server <- shinyServer(function(input,output){

# creating Data 
data <- reactive({
data <-  data.frame(Date = as.Date(c("2018-05-25","2018-05-26")),
                    category = c(rep("skin_care",6),rep("hair_care",6)),
                    Brand = 

c("X","X","Y","Y","Z","Z","A","A","B","B","C","C"),sales = 
                      round(rnorm(12,100,3)))
})


# Displaying Data  

output$data_display <- DT::renderDataTable(                    
datatable(data(),options = list(pageLength = 12),rownames = FALSE)
)

# selects dimension (Only character variable to be selected)

output$dim<-renderUI({
b<-colnames(data()[sapply(data(),class)=="character"])
selectInput("x","Select only character variable",choices = 
              c("NONE",b[1:length(b)]),selected="NONE",multiple = TRUE)
})

#  user selects levels of dimension 

output$levels1<-renderUI({
if(is.null(input$x)){
  return(NULL)
}
 else if(sum(input$x=="NONE")==1){
   return(NULL)
 }
else{
  lapply(seq(input$x),function(i){
    selectInput(inputId = paste0("range",i),
          paste0("Select level of ",input$x[i]),
        choices = c(unique(data()[,input$x[i]]),"ALL"),multiple = TRUE)

  })
}
  })
  })

  shinyApp(ui,server)

标签: rshiny

解决方案


推荐阅读