【发布时间】:2022-02-02 00:02:28
【问题描述】:
我有一个包含 n 个问题的选项卡,每个问题都与李克特风格的单选按钮相关联。我想以多种不同的方式(绘图等)显示所选答案,而无需切换到或创建其他选项卡。相反,我想在用于问题/单选按钮的同一选项卡中显示结果,即按下按钮隐藏问题、单选按钮和提交按钮,并显示例如带有结果的绘图或表格.
我创建了一个 MWE 来说明我目前的方法。因为我不知道如何最好地解决这个问题,所以我创建了三个不同的选项卡,名为 Questions、Results 和 Hide,目的是隐藏 Results 选项卡,直到单击提交按钮,这将显示 @987654325 @ 选项卡并隐藏 Questions 选项卡。我还没有找到隐藏Questions 标签的方法,这就是我创建Hide 标签作为测试的原因。
library(shiny)
library(shinyjs)
ui <- tagList(
useShinyjs(),
navbarPage(
"Hide questions/buttons and display results in same tab",
id = "navbar",
tabPanel(title = "Questions",
id = "questions",
h1("Example questions"),
uiOutput("myradios"),
actionButton("button", "Run analysis")
),
tabPanel(
title = "Results",
value = "results",
tableOutput("tableOutput"),
h1("Here are the results"),
textOutput("txt")
),
tabPanel(
title = "Hide",
value = "hide",
h1("This tab will be hidden when the button in 'Questions' tab is clicked")
)
)
)
server <- function(input, output, session) {
observe({
hide(selector = "#navbar li a[data-value=results]")
show(selector = "#navbar li a[data-value=hide]")
})
output$tableOutput <- renderTable({
if(input$button > 0){
toggle(selector = "#navbar li a[data-value=results]")
toggle(selector = "#navbar li a[data-value=hide]")
}else{
NULL
}
})
outputOptions(output, "tableOutput", suspendWhenHidden=F)
nameList <- c("Q1", "Q2")
questionList <- c("This is question 1", "This is question 2")
all_radios <- list()
for (i in 1:length(nameList)) {
all_radios[[i]] <- p(radioButtons(nameList[i], questionList[i], c("Disagree strongly" = "1", "Disagree a little" = "2","Neutral; no opinion" = "3","Agree a little" = "4","Agree strongly" = "5"), inline=T, selected=0))
}
output$myradios <- renderUI(all_radios)
output$txt <- renderText({
return(paste("The answers are:", input$Q1, "and", input$Q2, sep=" "))
})
}
shinyApp(ui = ui, server = server)
除了上面描述的明显之外,这段代码还有很多问题。例如,再次单击提交按钮会再次隐藏“结果”选项卡。
我将非常感谢任何形式的帮助或指点。
编辑:
感谢@YBS 的回答,这是有效的解决方案,在单击按钮后也将其隐藏:
library(shiny)
library(shinyjs)
ui <- tagList(
useShinyjs(),
navbarPage(
"Hide questions/buttons and display results in same tab",
id = "navbar",
tabPanel(title = "Questions",
id = "questions",
h1("Example questions"),
uiOutput("myradios"),
textOutput("txt"),
actionButton("button", "Run analysis")
)
)
)
server <- function(input, output, session) {
nameList <- c("Q1", "Q2")
questionList <- c("This is question 1", "This is question 2")
all_radios <- list()
for (i in 1:length(nameList)) {
all_radios[[i]] <- p(radioButtons(nameList[i], questionList[i], c("Disagree strongly" = "1",
"Disagree a little" = "2",
"Neutral; no opinion" = "3",
"Agree a little" = "4",
"Agree strongly" = "5"),
inline=T,
selected=0))
}
output$myradios <- renderUI(all_radios)
output$txt <- renderText({
return(paste("The answers are:", input$Q1, "and", input$Q2, sep=" "))
})
observeEvent(input$button, {
k <- input$button %% 2
if (k==1) {
hide("myradios")
show("txt")
hide("button")
}else {
show("myradios")
hide("txt")
}
}, ignoreNULL = FALSE)
}
shinyApp(ui = ui, server = server)
【问题讨论】:
标签: r shiny radio-button show-hide shinyjs