. , . , , .
library(shiny)
library(shinydashboard)
library(plotly)
library(DT)
if (!exists("default_search")) default_search <- ""
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
menuItem(
"select species",
tabName = "selectspecies",
selectizeInput(
"select_species",
'',
choices = sort(iris$Species),
selected = "versicolor",
multiple =T)
),
menuItem(
"select Columns",
tabName = "selectcols",
selectizeInput(
"select_cols",
'',
choices = sort(names(iris)),
selected = names(iris),
multiple =T )
)
)),
dashboardBody(
fluidRow(column(12, DTOutput("table"))
)
)
)
server <- function(input, output, session) {
transition <- reactiveValues()
transition$table <- data.frame("colnames" = sort(names(iris)),
"filter" = c("","","","",""), "active" = c(T,T,T,T,T) )
fileData <- reactive({
iris2 <- iris[iris$Species == input$select_species,]
iris3 <- iris2[input$select_cols]
})
observeEvent( c(input$select_cols,input$select_species ),{
transition$table[,"filter"] <- as.character(transition$table[,"filter"])
if(length(input$table_search_columns )!=0){
transition$table[transition$table[,"active"]==T, "filter"] <- input$table_search_columns
}
transition$table[,"active"] <- transition$table[,"colnames"] %in% input$select_cols
})
observeEvent( fileData(),{
default_search <- input$table_search
default_search_columns <- c("",
transition$table[transition$table[,"active"]==T, "filter"])
proxy %>% updateSearch(keywords =
list(global = default_search, columns = default_search_columns))
})
output$table <- renderDT({
fileData <- fileData()[,sort(names(fileData()))]
DT::datatable(fileData, filter = "top",
options = list(stateSave = F
)
)
})
proxy <- dataTableProxy("table")
}
shinyApp(ui,server)