gpt4 book ai didi

r - Shiny :如果 radioButtions() 为空/未选中​​,actionButton() 能否返回错误?

转载 作者:行者123 更新时间:2023-12-04 10:07:47 26 4
gpt4 key购买 nike

我还没有找到我的问题的解决方案,这个 SO thread接近但不完全。

我制作了一个简单的应用,其中包含几个radioButtons()。符合 app 基本概念的逻辑,其中一些是空的,如 radioButtons( ... , selected=character(0)) 而另一些具有预选值。

重要的是,在 actionButton() 开始进一步分析之前,所有 radioButtons() 都必须有一个选定的值。

问题:如何设计一个 actionButton(),它 (1) 在未选择 radioButtons() 的情况下返回错误和 (2) 返回包含未选择值的 radioButtons(),特别是?

预期输出

enter image description here

写着

library(shiny)
library(shinyjs)
library(shinycustomloader)
library(shinyWidgets)



ui <- fluidPage(

useShinyjs(),


tabsetPanel(

# GTR
tabPanel(title = HTML(paste(h4("Gross Total Resection"),
h6("Simpson Grade I-III", align = "left"))),
br(), br(),

fluidRow(

column(
4,
wellPanel(
style = "height:275px",
h4("Patient-related factors", align="center"), br(),
sliderInput("GTR_age", "Age",
min = 18, max = 100, value = 60), br(),

radioButtons("GTR_sex", "Sex", choiceValues=list("Male","Female"),
choiceNames=list("Male","Female"), selected=character(0), inline = T)
), br(), br(),

fluidRow(align="center", br(), actionBttn("GTRdo", "Submit", style = "material-flat"))
),


column(
4,
wellPanel(
style = "height:375px",
h4("Tumor-related factors", align="center"), br(),

radioButtons("GTR_WHO", "WHO Grade", choiceValues=list("WHO-I","WHO-II", "WHO-III"),
choiceNames=list("WHO-I","WHO-II","WHO-III"), selected=character(0), inline=T), br(),

sliderInput("GTR_Ki67", "Ki-67 proliferative index",
min = 0, max = 60, value = 5), br(),

selectInput("GTR_location", "Location",
c("Convexity" = "0",
"Parasagittal" = "1",
"Anterior skull-base" = "2",
"Mid skull-base" = "3",
"Posterior skull-base" = "4"))
)),


column(
4,
wellPanel(
style = "height:525px",
h4("Treatment-related factors", align="center"), br(),

radioButtons("GTR_Simpson", "Simpson Grade", choiceValues=list("Grade I","Grade II", "Grade III"),
choiceNames=list("Grade I","Grade II","Grade III"), selected=character(0), inline=T), br(),

radioButtons("GTR_EXBR", "External Beam Radiation", choiceValues=list("No","Yes"),
choiceNames=list("No","Yes"), selected ="No", inline=T),
sliderInput("GTR_EXBRGy", "Cumulative Gy",
min = 40, max = 60, value = 54.2, step = 0.2), br(),

radioButtons("GTR_SRS", "Stereotactic radiosurgery", choiceValues=list("No","Yes"),
choiceNames=list("No","Yes"), selected ="No", inline=T),
sliderInput("GTR_SRSGy", "Cumulative Gy",
min = 12, max = 22, value = 15, step = 1), br(),

)
)

)
)
)
)

server <- function(input, output, session) {


GTR_rvs <- reactiveValues(prev_value = 54.2)

observeEvent(input$GTR_EXBR, {
if(input$GTR_EXBR == "No"){
updateSliderInput(session, "GTR_EXBRGy",min = 0, max = 0, value=0)
GTR_rvs$prev_value <- input$GTR_EXBRGy
disable("GTR_EXBRGy")
}else{
updateSliderInput(session, "GTR_EXBRGy", min = 40, max = 60, value = GTR_rvs$prev_value)
enable("GTR_EXBRGy")
}
})

observeEvent(input$GTR_EXBRGy, {
print(input$GTR_EXBRGy)
})



GTR_rvs_srs <- reactiveValues(prev_value = 15)

observeEvent(input$GTR_SRS, {
if(input$GTR_SRS == "No"){
updateSliderInput(session, "GTR_SRSGy",min = 0, max = 0, value=0)
GTR_rvs_srs$prev_value <- input$GTR_SRSGy
disable("GTR_SRSGy")
}else{
updateSliderInput(session, "GTR_SRSGy", min = 12, max = 22, value = GTR_rvs_srs$prev_value)
enable("GTR_SRSGy")
}
})

observeEvent(input$GTR_SRSGy, {
print(input$GTR_SRSGy)
})






}

shinyApp(ui, server)

最佳答案

这应该给你你想要的。它使用以下技术:

  • renderUI() 显示错误信息,带格式
  • req() 检查是否应该显示红色错误信息
  • toggleState() 使“提交”按钮仅在所有指定单选按钮的长度都不为 0 时才可单击(由 character(0)
library(shiny)
library(shinyjs)
library(shinycustomloader)
library(shinyWidgets)



ui <- fluidPage(

useShinyjs(),


tabsetPanel(

# GTR
tabPanel(title = HTML(paste(h4("Gross Total Resection"),
h6("Simpson Grade I-III", align = "left"))),
br(), br(),

fluidRow(

column(
4,
wellPanel(
style = "height:275px",
h4("Patient-related factors", align="center"), br(),
sliderInput("GTR_age", "Age",
min = 18, max = 100, value = 60), br(),

radioButtons("GTR_sex", "Sex", choiceValues=list("Male","Female"),
choiceNames=list("Male","Female"), selected=character(0), inline = T)
), br(), br(),

fluidRow(align="center", br(), actionBttn("GTRdo", "Submit", style = "material-flat"),br(),
uiOutput("req_text", style = "width: 200px; color: red"))
),


column(
4,
wellPanel(
style = "height:375px",
h4("Tumor-related factors", align="center"), br(),

radioButtons("GTR_WHO", "WHO Grade", choiceValues=list("WHO-I","WHO-II", "WHO-III"),
choiceNames=list("WHO-I","WHO-II","WHO-III"), selected=character(0), inline=T), br(),

sliderInput("GTR_Ki67", "Ki-67 proliferative index",
min = 0, max = 60, value = 5), br(),

selectInput("GTR_location", "Location",
c("Convexity" = "0",
"Parasagittal" = "1",
"Anterior skull-base" = "2",
"Mid skull-base" = "3",
"Posterior skull-base" = "4"))
)),


column(
4,
wellPanel(
style = "height:525px",
h4("Treatment-related factors", align="center"), br(),

radioButtons("GTR_Simpson", "Simpson Grade", choiceValues=list("Grade I","Grade II", "Grade III"),
choiceNames=list("Grade I","Grade II","Grade III"), selected=character(0), inline=T), br(),

radioButtons("GTR_EXBR", "External Beam Radiation", choiceValues=list("No","Yes"),
choiceNames=list("No","Yes"), selected ="No", inline=T),
sliderInput("GTR_EXBRGy", "Cumulative Gy",
min = 40, max = 60, value = 54.2, step = 0.2), br(),

radioButtons("GTR_SRS", "Stereotactic radiosurgery", choiceValues=list("No","Yes"),
choiceNames=list("No","Yes"), selected ="No", inline=T),
sliderInput("GTR_SRSGy", "Cumulative Gy",
min = 12, max = 22, value = 15, step = 1), br(),

)
)

)
)
)
)

server <- function(input, output, session) {


GTR_rvs <- reactiveValues(prev_value = 54.2)

observeEvent(input$GTR_EXBR, {
if(input$GTR_EXBR == "No"){
updateSliderInput(session, "GTR_EXBRGy",min = 0, max = 0, value=0)
GTR_rvs$prev_value <- input$GTR_EXBRGy
disable("GTR_EXBRGy")
}else{
updateSliderInput(session, "GTR_EXBRGy", min = 40, max = 60, value = GTR_rvs$prev_value)
enable("GTR_EXBRGy")
}
})

observeEvent(input$GTR_EXBRGy, {
print(input$GTR_EXBRGy)
})



GTR_rvs_srs <- reactiveValues(prev_value = 15)

observeEvent(input$GTR_SRS, {
if(input$GTR_SRS == "No"){
updateSliderInput(session, "GTR_SRSGy",min = 0, max = 0, value=0)
GTR_rvs_srs$prev_value <- input$GTR_SRSGy
disable("GTR_SRSGy")
}else{
updateSliderInput(session, "GTR_SRSGy", min = 12, max = 22, value = GTR_rvs_srs$prev_value)
enable("GTR_SRSGy")
}
})

observeEvent(input$GTR_SRSGy, {
print(input$GTR_SRSGy)
})

observe({
toggleState(id = "GTRdo", condition = length(input$GTR_sex) > 0 &
length(input$GTR_WHO) > 0 &
length(input$GTR_Simpson) > 0)
})

output$req_text <- renderUI({
req(length(input$GTR_sex) == 0 |
length(input$GTR_WHO) == 0 |
length(input$GTR_Simpson) == 0)

out <- tagList(p("Please choose:"),
tags$ul(style = "text-align: left"))

if(length(input$GTR_sex) == 0) {
out[[2]] <- tagAppendChild(out[[2]],tags$li("Sex"))
}
if(length(input$GTR_WHO) == 0) {
out[[2]] <- tagAppendChild(out[[2]],tags$li("WHO Grade"))
}
if(length(input$GTR_Simpson) == 0) {
out[[2]] <- tagAppendChild(out[[2]],tags$li("Simpson Grade"))
}
out

})


}

shinyApp(ui, server)

关于r - Shiny :如果 radioButtions() 为空/未选中​​,actionButton() 能否返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61487764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com