找不到闪亮的反应物体

时间:2017-10-23 14:18:25

标签: r shiny

我认为我在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)

2 个答案:

答案 0 :(得分:4)

您不应在CamelFileNameobserveEvent电话中加入无效值。实际上,Joe Cheng建议不要将observeobserve函数嵌套在其自身或其他内容中。它们是用于不同目的的独立物品。由于您希望根据点击reactive的时间创建被动y,因此您应该使用input$do

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来电中添加y()。我还在renderText()电话中添加了return(x),否则eventReactive将是返回的值。

答案 1 :(得分:1)

我的问题是你对reactive()的调用没有返回任何内容。在reactive中包装表达式会在每次更改表达式中的反应值时将表达式的返回值分配给变量。反应值通常是input$...个变量,以及存储在reactiveValues()个对象中的变量。

如果我说得对,你想在每次&#34;运行时更改并打印y。按钮被击中。将其保存到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)