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
相关产品推荐
相关产品推荐

