基本上,我希望输出数据表切换到具有与输入选择值(radioButtons
)匹配的值的页面。我知道我可以做一个简单的过滤器,但这会删除与我不想要的条件不匹配的所有其他行。
感谢任何帮助!谢谢!
library(shiny)
library(DT)
ui <- basicPage(
h3("The mtcars data"),
fluidRow(column(2,
offset = 1,
radioButtons("valSel", strong("Gear"),
inline = TRUE,
choices = c("3", "4", "5"),
selected = "3")),
fluidRow(column(10,
offset = 1,
dataTableOutput("mytable")))
)
)
server <- function(input, output) {
output$mytable = DT::renderDataTable({
mtcars[mtcars$gear == input$valSel, ]
})
}
shinyApp(ui, server)
由reprex package于2021年5月27日创建(v2.0.0)
最佳答案
您可以创建自定义js
函数并切换到所需的页面。试试这个
library(shiny)
library(DT)
library(tidyverse)
ui <- basicPage(
h3("The mtcars data"),
fluidRow(column(2,
offset = 1,
radioButtons("valSel", strong("Gear"),
inline = TRUE,
choices = c("3", "4", "5"),
selected = "3")),
fluidRow(column(10,
offset = 1, # verbatimTextOutput("t1"),
DTOutput("mytable")))
),
tags$script(HTML(
"Shiny.addCustomMessageHandler('pager',function(page) {
$('#'+'mytable').find('table').DataTable().page(page).draw(false);
})"
))
)
server <- function(input, output, session) {
mydf <- reactive({
mtcars %>% mutate(rowid = row_number())
})
subdf <- reactive({
req(mydf())
mydf()[mydf()$gear == input$valSel, ]
})
output$t1 <- renderPrint({ceiling(min(subdf()$rowid)/10)})
output$mytable = renderDT({
n <- length(names(mydf())) ## to remove rowid
mydf()[,-n]
})
observeEvent(input$valSel,{
page <- ceiling(min(subdf()$rowid)/10) ## assumes 10 rows are displayed per page (default); if different, replace 10 by the number of rows displayed per page
session$sendCustomMessage("pager",page-1)
})
}
shinyApp(ui, server)
关于r - 在 Shiny 中输入更改时切换到不同的 DataTable 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67725439/