R 动态变量';在Shining中选择s级别

R 动态变量';在Shining中选择s级别,r,shiny,R,Shiny,我正在开发一个闪亮的应用程序,它将要求用户通过选择输入小部件从预加载的数据帧中选择n个字符变量。为简单起见,数据框仅使用两个字符变量(类别和品牌)创建 若用户选择一个字符变量,比如类别,那个么会动态显示另一个小部件,提示用户选择类别的级别。如果他选择两个字符变量,即category和brand,则会动态显示两个输入小部件,提示选择两者的级别 在分类变量中,我有两个级别(皮肤护理和头发护理),它们的品牌当然不同 挑战在于,当用户在第一输入窗口小部件和第二输入窗口小部件中选择皮肤护理时,我只希望皮肤

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

若用户选择一个字符变量,比如类别,那个么会动态显示另一个小部件,提示用户选择类别的级别。如果他选择两个字符变量,即category和brand,则会动态显示两个输入小部件,提示选择两者的级别

在分类变量中,我有两个级别(皮肤护理和头发护理),它们的品牌当然不同

挑战在于,当用户在第一输入窗口小部件和第二输入窗口小部件中选择皮肤护理时,我只希望皮肤护理品牌在第三输入窗口小部件中显示为选项,如果在第二输入窗口小部件中选择护发,则在第三输入窗口小部件中仅显示护发品牌。如果在第二个输入窗口小部件中选择了这两个选项,则在第三个输入窗口小部件中只有所有品牌都应作为选项

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

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)
库(闪亮)
图书馆(DT)

ui变量将始终是这两个,还是您正在寻找通用解决方案?如果我先选择
品牌
,会发生什么?是否仍然从类别输入中筛选,或者现在是由
品牌
筛选的
类别
?@GGamba变量可以是任意数字。为了简单起见,我保留了两个。理想情况下,用户应首先选择类别,然后按层次顺序选择品牌。