【问题标题】:shiny reactive object not found找不到闪亮的反应物体
【发布时间】:2018-04-04 03:16:12
【问题描述】:

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

【问题讨论】:

  • 在这个基本示例中,如果你在输入框text中输入“帮助”,我想运行并打印x,即help,help,help,help,
  • 我正在创建这个反应式y,它与我真正想要的东西脱节,这是迭代粘贴的x

标签: r shiny


【解决方案1】:

您不应该在 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() 调用中添加y()。我还在eventReactive 调用中添加了return(x),否则t 将是返回的值。

【讨论】:

  • 啊,好的@tbradley。这很有帮助。
【解决方案2】:

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

如果我没听错的话,你想在每次点击“运行”按钮时更改并打印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)

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 2018-07-09
    • 2020-03-14
    • 2015-06-23
    • 2014-08-23
    • 2020-10-13
    • 2016-02-22
    • 2021-05-10
    相关资源
    最近更新 更多