You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny样本量计算器else if逻辑报错及无输出问题求助

解决你的R Shiny样本量计算器问题

首先,你的代码里有几个关键问题导致输出异常,我来一步步帮你修正:

核心问题:单选按钮的ID错误

在UI的radioButtons中,你给inputId加了多余的单引号:

radioButtons(
  inputId = "'QC_Type'",  # 这里的单引号是错误的!
  label = "QC Type",
  choices = c(...)
)

这个错误会让Shiny无法识别input$QC_Type,因为实际的ID变成了带单引号的'QC_Type'(而不是QC_Type),这直接导致后续无法读取单选按钮的选择值。

其他优化点

  1. 不需要把input包装成reactive:在renderText里直接使用input$QC_Type即可,不需要额外定义x <- reactive({input$QC_Type}),这只会增加不必要的复杂度。
  2. 简化条件判断逻辑:把不同QC类型对应的计算系数存到一个命名向量里,替代重复的if else语句,代码更简洁易维护。
  3. 确保req的正确使用:req(input$QC_Type, input$expn)可以同时检查两个输入是否有效,避免参数长度为0的错误。

修正后的完整代码

library(shiny)

ui <- shinyUI(fluidPage(
  titlePanel("alpha version of sample size calculator"),
  sidebarPanel(
    numericInput(
      "expn", 
      "Please enter total number of reports received", 
      1, 
      min = 0, 
      max = 1000000
    ),
    radioButtons(
      inputId = "QC_Type",  # 去掉了多余的单引号
      label = "QC Type",
      choices = c(
        "Overall" = "a", 
        "Solicited" ="b", 
        "Spontaneous" = "c", 
        "Clinical Trial"="d", 
        "Literature"= "e"
      )
    )
  ),
  mainPanel (
    p ("Your required sample size is"),
    textOutput("results")
  )
))

server <- function (input, output,session) {
  options(digits=2)
  
  # 预先计算各类型的系数,存到命名向量里
  qc_coefficients <- c(
    a = (1.96^2)*0.3*0.7/(0.05^2),
    b = (1.96^2)*0.32*0.68/(0.05^2),
    c = (1.96^2)*0.35*0.65/(0.05^2),
    d = (1.96^2)*0.26*0.74/(0.05^2),
    e = (1.96^2)*0.36*0.64/(0.05^2)
  )
  
  output$results <- renderText({
    # 检查输入是否有效
    req(input$QC_Type, input$expn)
    
    # 获取当前选择的系数
    current_coef <- qc_coefficients[input$QC_Type]
    # 计算样本量
    sample_size <- (input$expn * current_coef) / (input$expn + current_coef + 1)
    # 保留两位小数并转为字符输出
    round(sample_size, 2)
  })
}

shinyApp(ui = ui, server= server)

代码解释

  • 修正了单选按钮的ID,确保Shiny能正确读取选择值。
  • 用命名向量存储各QC类型的系数,避免了重复的条件判断,后续修改系数只需更新向量即可。
  • 使用req()确保只有当两个输入都有效时才执行计算,避免报错。
  • 计算结果用round()保留两位小数,输出更美观。

现在运行这个代码,你应该能看到正确的样本量计算结果了。

内容的提问来源于stack exchange,提问作者Rimip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:04:36