在一个闪亮的应用程序中,我希望能够使用复选框或单选按钮来切换可见的输出。
目前,我只能通过创建单独的复选框ui项并观察我想要切换的每个元素的条件来实现这一点。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
uiOutput('select1'),
uiOutput('select2'),
div(id='table1',tableOutput('data1')),
div(id='table2',tableOutput('data2'))
)
server <- function(input, output){
data1 <- data.frame(X1=1:5,
X2=6:10)
data2 <- data.frame(Y1=1:5,
Y2=6:10)
output$data1 <- renderTable(data1)
output$data2 <- renderTable(data2)
output$select1 <- renderUI({
checkboxGroupInput('select1', 'Select T1',
choices = 'table1',
selected = 'table1')
})
output$select2 <- renderUI({
checkboxGroupInput('select2', 'Select T2',
choices = 'table2'
)
})
observe({
toggle(id='table1', condition = input$select1)
})
observe({
toggle(id='table2', condition = input$select2)
})
}
shinyApp(ui, server)问题1当应用程序加载时,两个表都会显示,尽管只有一个表被选中。切换第二个开始,然后关闭是需要隐藏它。这是否可以更改,这样它就不会在第一次加载时显示?
问题2
我意识到我的方法效率很低,并且很可能通过包含各种选项和单一观察条件的单个checkBoxGroupInput来实现同样的目标。我在这里真的没什么经验,也搞不懂。
谢谢你的帮助。
发布于 2022-07-09 19:28:19
toggle需要一个boolean,但是input$select返回一个字符,这可能解释了意外的行为。
使用单个checkboxGroupInput,使用%in%获取布尔值:
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
uiOutput('select'),
div(id='table1',tableOutput('data1')),
div(id='table2',tableOutput('data2'))
)
server <- function(input, output){
data1 <- data.frame(X1=1:5,
X2=6:10)
data2 <- data.frame(Y1=1:5,
Y2=6:10)
output$data1 <- renderTable(data1)
output$data2 <- renderTable(data2)
output$select <- renderUI({
checkboxGroupInput('select', 'Select table',
choices = list('table1','table2'),
selected = 'table1')
})
observe({
toggle(id='table1', condition = "table1" %in% input$select)
toggle(id='table2', condition = "table2" %in% input$select)
})
}
shinyApp(ui, server)

https://stackoverflow.com/questions/72923827
复制相似问题