【发布时间】:2019-12-20 10:50:45
【问题描述】:
我正在使用 selectizeInput 对输入进行多项选择。我还添加了一个“全选或无”选项,该选项会自动选择所有选项或非选项(有很多选项)。但是,我的问题是,当它全选时,选项太多,以至于它在 selectizeInput 框中显示所有选项,这使我的页面超长,您必须滚动到底部才能查看我的应用程序中的其他任何内容。想知道是否有一个选项可以让您选择最大数量的项目,一旦达到,它会添加一个滚动条,以便所选项目不会全部显示并占据整个页面。有什么建议吗?
编辑:请参阅下文 这是我的下一个问题:当我使用 pickerInput 中的取消全选选项时,我需要以某种方式反映包含所有代码、不包含代码或包含某些代码的数据透视表。我的数据首先在一个表中,然后该表对输入做出反应。然后我的数据透视表使用了这些数据。这是一些代码:(这只是测试数据)
server <- function(input, output, session){
ext <- reactive ({
name <- c('a', 'b', 'c', 'd', 'e', 'f', 'g')
shortcut <- c('aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg')
counter <- c('aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg')
external <- data.frame(name, shortcut, counter)
return(external)
})
selections <- reactive({
temp1 = ext()
tick <- sort(unique(temp1$counter))
tick <- tick[order((tick), decreasing = FALSE)]
list1 <- list(tick = tick)
return(list1)
})
# making this reactive to inputs and run button
extFiltered <- eventReactive(input$runButton, {
filteredTable <- ext()
if(!is.null(input$tick)){
filteredTable <- filteredTable[(filteredTable$counter %in% input$tick)]
}
return(filteredTable)
})
observe({
updatePickerInput(session, 'tick', choices = selections()$tick)
})
# external table that has been filtered from input
output$table <- DT::renderDataTable({ extFiltered() })
# pivot table
output$extPt <- renderPivottabler({
temp = extFiltered()
extPt <- PivotTable$new()
extPt$addData(temp)
extPt$addColumnDataGroups("name")
extPt$addRowDataGroups("shortcut")
extPt$addRowDataGroups("counter")
extPt$evaluatePivot()
pivottabler(extPt)
})
}
ui <- fluidPage(
pickerInput(inputId = 'tick', label = 'Select Ticker(s)', choices = NULL,
options = list(`actions-box` = TRUE, 'live-search' = TRUE), multiple = TRUE)
)
shinyApp(ui, server)
我想要的逻辑是这样的:
if(input$tick == 'Deselect All') {
filteredTable <- subset(filteredTable, select=-c(filteredTable$counter))
}
else if(input$tick == 'Select All') {
filteredTable <- filteredTable[(filteredTable$counter)]
}
else {
filteredTable <- filteredTable[(filteredTable$counter %in% input$tick)]
}
# which would replace this:
if(!is.null(input$tick)){
filteredTable <- filteredTable[(filteredTable$counter %in% input$tick)]
}
【问题讨论】:
标签: r shiny shiny-server shiny-reactivity shinyapps