在闪亮的应用程序中同时显示多个范围的数据表行
Display more than one ranges of datatable rows at the same time, in a shiny app
我有一个简单闪亮的应用程序。
#ui.r
navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("book4"),
uiOutput("book5"),
uiOutput("book6"),
uiOutput("book7")
),
mainPanel(
DT::dataTableOutput("hot5")
)
)))
#server.r
library(shiny)
library(DT)
library(tidyverse)
server <- function(input, output,session) {
output$book4<-renderUI({
numericInput("bk4", "From",
value = 1,
min=1,max=input$bk5)
})
output$book5<-renderUI({
numericInput("bk5", "To",
value = 1,
min=1,max=10)
})
output$book6<-renderUI({
numericInput("bk6", "From",
value = 1,
min=1,max=10)
})
output$book7<-renderUI({
numericInput("bk7", "To",
value = 1,
min=1,max=10)
})
rt2<-reactive({
DF=data.frame(
Id= (input$bk4:input$bk5),
Label=paste("Item",input$bk4:input$bk5),
Pf=as.integer(rep.int(0,as.numeric(input$bk5-input$bk4+1))),
stringsAsFactors = FALSE
)
})
output$hot5 <-DT::renderDataTable(
rt2()%>%
rowid_to_column("Row") %>%
mutate(Row = ""),
rownames = FALSE,
extensions = "Select",
options = list(
columnDefs = list(list(className = "select-checkbox", targets = 0, orderable = FALSE)),
select = list(style = "multi", selector = "td:first-child")
)
)
}
如您所见,我使用一对 numericInput()
(从-到)来设置将在数据中显示的行范围table。在这下面我有第二对,我想用它来选择不同的范围并同时在 table 中显示它。例如,我可以从第一对中选择第 2 到第 6 行,从第 2 对中选择第 8 到第 10 行。请注意,这两对不应将相同的值作为输入。例如,如果我在第一个范围内选择范围 2 到 4,那么第二个范围内的选择将排除第 2 到第 4 行。
为什么不像这样将它们组合成一个数据框:
rt2<-reactive({
DF=data.frame(
Id= unique(c(input$bk4:input$bk5,input$bk6:input$bk7)),
Label=paste("Item",unique(c(input$bk4:input$bk5,input$bk6:input$bk7))),
Pf=as.integer(rep.int(0,length(unique(c(input$bk4:input$bk5,input$bk6:input$bk7))))),
stringsAsFactors = FALSE
)
})
我有一个简单闪亮的应用程序。
#ui.r
navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("book4"),
uiOutput("book5"),
uiOutput("book6"),
uiOutput("book7")
),
mainPanel(
DT::dataTableOutput("hot5")
)
)))
#server.r
library(shiny)
library(DT)
library(tidyverse)
server <- function(input, output,session) {
output$book4<-renderUI({
numericInput("bk4", "From",
value = 1,
min=1,max=input$bk5)
})
output$book5<-renderUI({
numericInput("bk5", "To",
value = 1,
min=1,max=10)
})
output$book6<-renderUI({
numericInput("bk6", "From",
value = 1,
min=1,max=10)
})
output$book7<-renderUI({
numericInput("bk7", "To",
value = 1,
min=1,max=10)
})
rt2<-reactive({
DF=data.frame(
Id= (input$bk4:input$bk5),
Label=paste("Item",input$bk4:input$bk5),
Pf=as.integer(rep.int(0,as.numeric(input$bk5-input$bk4+1))),
stringsAsFactors = FALSE
)
})
output$hot5 <-DT::renderDataTable(
rt2()%>%
rowid_to_column("Row") %>%
mutate(Row = ""),
rownames = FALSE,
extensions = "Select",
options = list(
columnDefs = list(list(className = "select-checkbox", targets = 0, orderable = FALSE)),
select = list(style = "multi", selector = "td:first-child")
)
)
}
如您所见,我使用一对 numericInput()
(从-到)来设置将在数据中显示的行范围table。在这下面我有第二对,我想用它来选择不同的范围并同时在 table 中显示它。例如,我可以从第一对中选择第 2 到第 6 行,从第 2 对中选择第 8 到第 10 行。请注意,这两对不应将相同的值作为输入。例如,如果我在第一个范围内选择范围 2 到 4,那么第二个范围内的选择将排除第 2 到第 4 行。
为什么不像这样将它们组合成一个数据框:
rt2<-reactive({
DF=data.frame(
Id= unique(c(input$bk4:input$bk5,input$bk6:input$bk7)),
Label=paste("Item",unique(c(input$bk4:input$bk5,input$bk6:input$bk7))),
Pf=as.integer(rep.int(0,length(unique(c(input$bk4:input$bk5,input$bk6:input$bk7))))),
stringsAsFactors = FALSE
)
})