我正在準備shiny
應用程序,我正在努力應對一種特定的行爲。我想應用到初始頁面上呈現的數據表(從DT包)與固有排序功能(具體而言,向上/向下箭頭的變量名旁):在隨後的選項卡/可視化中利用DataTable排序
然而,然後,我想在隨後的選項卡中使用排序信息。下面的腳本中的情節會按預期進行更新,但是如果我回到tab1並重新排序 - 情節不會再次顛倒這些關卡,我不知道爲什麼。花了一些時間來解決這個問題之後,我認爲問題在於當排序完成後(input$data_rows_all
沒有反應?),情節不會被觸發重新呈現。下面是虹膜數據集MWE:
state_ex <- function(data = NULL){
library(shiny)
library(shinydashboard)
library(DT)
## UI #############################
ui = dashboardPage(
dashboardHeader(title = "Save State Example"),
dashboardSidebar(
sidebarMenu(
menuItem("Tab1", tabName = "tab1"),
menuItem("Tab2", tabName = "tab2")
)),
dashboardBody(
tabItems(
tabItem(tabName = "tab1",
h2("Tab1"),
DT::dataTableOutput("data")),
tabItem(tabName = "tab2",
h2("Tab2"),
plotOutput("plot"))
)))
## SERVER #########################
server = function(input, output, session) {
dat <- reactive({
df <- data
return(df)
})
output$data <- DT::renderDataTable({
DT::datatable(dat(), options = list(saveState = TRUE))
})
output$plot <- renderPlot({
if (!is.null(input$data_rows_all)){
sdat <- dat()
means <- aggregate(input$data_rows_all ~ sdat$Species,
FUN=mean)
sdat$Species <- factor(sdat$Species,
levels = as.character(rev(means[,1])))
plot(sdat$Species, sdat$Sepal.Length)
} else plot(dat()$Species, dat()$Sepal.Length)
})
}
runApp(list(ui = ui, server = server))
}
data(iris)
state_ex(iris)
我想在第二個選項卡的情節在所述第一標籤中的Species
列進行排序(並具有排序更新如果用戶改變它)。
我已經設置saveState()
爲數據表的真實,但我不知道如何應用它如何排序到情節。任何建議將非常感激!
順便說一句,我看'STR(DAT()'(反應DataTable對象),並且我沒有看到存儲在涉及對象物的內部的任何信息如何在應用程序中對它進行排序和顯示 –