[英]shiny reactive object not found
我認為我的Shiny應用程序中缺少與反應性有關的某些內容。 這是MRE,顯示我的打印y
問題。
library(shiny)
ui <- fluidPage(
titlePanel("Test"),
textAreaInput("text", "Text", "", width = "400px"),
verbatimTextOutput("text"),
actionButton("do", "Run"),
textOutput("result")
)
server <- function(input, output) {
observeEvent(input$do, {
y <- reactive({
x <- ""
t <- 1
while (t < 5) {
x <- paste(input$text, x, sep=",")
t <- t + 1
}
})
})
output$result <- renderPrint({y})
}
shinyApp(ui = ui, server = server)
您不應將反應式值放入observeEvent
或observe
調用中。 實際上,Joe Cheng曾建議不要在自己或其他人內嵌套observe
或reactive
功能。 它們是用於不同目的的獨立事物。 由於您希望根據單擊input$do
時間來創建反應式y
,因此應使用eventReactive
:
server <- function(input, output) {
y <- eventReactive(input$do, {
x <- ""
t <- 1
while (t < 5) {
x <- paste(input$text, x, sep=",")
t <- t + 1
}
return(x)
})
output$result <- renderText({y()})
}
我將renderPrint()
更改為renderText()
以便顯示所需的輸出。 另外,由於y
是反應性的,因此您需要在renderText()
調用中在renderText()
添加y()
。 我還將return(x)
添加到eventReactive
調用中,否則t
將是返回的值。
我的問題是您對reactive()
調用未返回任何內容。 每當改變表達式內部的reactive
值時,將表達式包裝在reactive
內部都會將表達式的返回值分配給變量。 反應性值通常都是input$...
變量,以及您存儲在reactiveValues()
對象中的變量。
如果我得到你的權利,你想改變並打印y
每一個“運行”按鈕被擊中的時間。 將其保存到renderPrint
reactiveValue()
集合(類似地可以通過列表訪問),然后將其放入renderPrint
函數中。
從您的代碼中,我認為您希望y
在while循環之后成為x
的值。
library(shiny)
ui <- fluidPage(
titlePanel("Test"),
textAreaInput("text", "Text", "", width = "400px"),
verbatimTextOutput("text"),
actionButton("do", "Run"),
textOutput("result")
)
server <- function(input, output) {
values <- reactiveValues()
observeEvent(input$do, {
x <- ""
t <- 1
while (t < 5) {
x <- paste(input$text, x, sep=",")
t <- t + 1
}
values$y <- x
})
output$result <- renderPrint({values$y})
}
shinyApp(ui = ui, server = server)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.