簡體   English   中英

找不到閃亮的反應對象

[英]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)

您不應將反應式值放入observeEventobserve調用中。 實際上,Joe Cheng曾建議不要在自己或其他人內嵌套observereactive功能。 它們是用於不同目的的獨立事物。 由於您希望根據單擊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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM