调用反应式表达式编写的变量时出错

问题描述 投票:0回答:1

我想调用 pcrPositiveFailedDetails,它目前是一个反应性的 tibble。无论输入 $sPP 大于/小于 highCT,tibble 都会更改值。当我使用 print() 并为 input$sPP 进行选择时,tibble 提供了我想要的内容。除了 RTable 之外,我还想将 tibble (pcrPositiveFailedDetails) 显示为名为 failedPcrTable 的输出。我在下面尝试的解决方案不起作用,我得到的不是带有警告的表格:未知或未初始化的列:

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 <- reactive({
highCT <- input$highCT
pcrTable <- fullTable() %>% select(all_of(input$sPP))

#checks all values of pcrTable pass
pcrPositiveFull <- pcrTable[input$sPP] < highCT & !(pcrTable[input$sPP] == "" |   
is.na(pcrTable[input$sPP])) 

# identify which rows have failed values
pcrPositiveFailedRows <- apply(pcrPositiveFull,1, FUN=function(x){all(x)})

# create summary table with only failed samples
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)

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) 
)
})
shiny shiny-server shiny-reactivity
1个回答
0
投票

响应式基本上是一个函数,因此当您调用它时,您只能访问函数返回的内容。举一个基本的例子,如果我有

table <- reactive({
   x <- 1
   tibble(a = 1, b = 2)
})

然后我无法访问此反应之外的

x

在您的情况下,

pcrPositiveFailedDetails
不会由反应返回,因此无法在其外部访问。要将其分配给反应性之外的值,您可以在服务器中创建一个空白反应性值,然后从您的
RTable
反应性更新此值。这看起来像

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

   RTable <- reactive({
      # ...
      pcrPositiveFailedDetails <- pcrPositiveSamples[!pcrPositiveFailedRows,]
      fPCR(pcrPositiveFailedDetails) # this updates the value of fPCR
      # ...
   })

   output$failedPcrTable <- renderTable({fPCR()})   
}
© www.soinside.com 2019 - 2024. All rights reserved.