我想调用 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)
)
})
响应式基本上是一个函数,因此当您调用它时,您只能访问函数返回的内容。举一个基本的例子,如果我有
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()})
}