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

Shiny中调用反应式tibble变量pcrPositiveFailedDetails报错求助

问题描述

我需要调用随input$sPP和highCT变化的反应式tibblepcrPositiveFailedDetails,用print()能正常输出该tibble,但尝试以下四种方法将其作为failedPcrTable输出展示时,均出现警告:Unknown or uninitialised column: pcrPositiveFailedDetails``。

尝试的四种方法:

  • 方法1:
    fPCR <- reactive({RTable()$pcrPositiveFailedDetails}) 
    output$failedPcrTable <- renderTable({fPCR()})
    
  • 方法2:
    output$failedPcrTable <- renderTable({RTable()$pcrPositiveFailedDetails})
    
  • 方法3:
    output$failedPcrTable <- renderTable({RTable$pcrPositiveFailedDetails})
    
  • 方法4:
    output$failedPcrTable <- renderTable({pcrPositiveFailedDetails})
    
报错原因

当前RTable反应式最后返回的是一个汇总tibble,而pcrPositiveFailedDetails是RTable内部定义的局部变量,外部无法直接访问。你用print()能输出是因为代码在RTable的执行环境中,但外部调用RTable()只能拿到它最后返回的汇总表,自然找不到pcrPositiveFailedDetails这个“列”(本质是局部变量,并非汇总表的列)。

解决方案

修改RTable反应式,让它返回一个列表,同时包含原来的汇总表和pcrPositiveFailedDetails。之后在输出时,从这个列表里提取对应的元素即可。

修改后的代码
RTable <- reactive({
  highCT <- input$highCT
  pcrTable <- fullTable() %>% select(all_of(input$sPP))

  # 检查pcrTable中所有值是否通过
  pcrPositiveFull <- pcrTable[input$sPP] < highCT & !(pcrTable[input$sPP] == "" |   
                                                         is.na(pcrTable[input$sPP])) 

  # 标记出未通过的行
  pcrPositiveFailedRows <- apply(pcrPositiveFull,1, FUN=function(x){all(x)})

  # 生成仅包含未通过样本的详情表
  pcrPositiveSamples <- fullTable() %>% select(SampleID, all_of(input$sPP))
  pcrPositiveFailedDetails <- pcrPositiveSamples[!pcrPositiveFailedRows,]

  pcrResult <- if (all(pcrPositiveFull)) "PASS" else "FAIL" 

  print(pcrTable)
  print(pcrPositiveFull)
  print(all(pcrPositiveFull))
  print(pcrPositiveFailedDetails)

  # 返回列表,包含汇总表和失败详情表
  list(
    summary_table = tibble(
      "Control Type" = c("PCR Positive Control", 
                         "Reverse Transcription Control", 
                         "No Template Control", 
                         "Genomic Contamination Control"),
      
      "Purpose" = c("To test if your PCR reactions worked",
                    "To test if your RT reactions worked", 
                    "Checks for RNA Contamination",
                    "Checks for DNA Contamination"),
      
      "Pass Criteria" = c("Ct < High Ct Cutoff",
                          "Ct < High Ct Cutoff",
                          "Ct > High Ct Cutoff or No Ct",
                          "Ct > High Ct Cutoff or No Ct"),
      
      "Result" = c(pcrResult, rtcResult, ntcResult, gcResult) 
    ),
    failed_details = pcrPositiveFailedDetails
  )
})

# 调用失败详情表并输出
output$failedPcrTable <- renderTable({
  RTable()$failed_details
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:10:17