【问题标题】:Store selectInput in a string/character object将 selectInput 存储在字符串/字符对象中
【发布时间】:2019-02-01 20:01:58
【问题描述】:

我想将 input$var 中的变量存储到一个对象中,该对象可以与后面的字符串进行比较。目前,我只是尝试通过将其存储到对象 value_stored 来将其打印在屏幕上。但它没有打印任何东西*(错误:无法将类型“闭包”强制转换为“字符”类型的向量*)。这意味着它没有存储值。

library(shiny)
ui <- fluidPage(
  titlePanel("censusVis"),

  sidebarLayout(
    sidebarPanel(
      helpText("Create demographic maps with 
               information from the 2010 US Census."),

      selectInput("var", 
                  label = "Choose a variable to display",
                  choices = c("Percent White", 
                              "Percent Black",
                              "Percent Hispanic", 
                              "Percent Asian"),
                  selected = "Percent White")
      ),

    mainPanel(
      textOutput("selected_var")
      textOutput("test")
    )
  )
  )

server <- function(input, output) {

  output$selected_var <- renderText({ 
    paste(input$var)
  })

  value_store <- reactive(input$var)

  output$test <- renderText({
   paste(value_store) 
  })

  # I want to use the value in input$var for some comparision. 
  # but value_store unable to store. Help.

}


shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny shiny-reactivity


    【解决方案1】:

    我强烈建议使用reactiveValues(存储反应值的对象)和observeEvent

    使用服务器代码:

    server <- function(input, output) {
        # Create object for reactive values 
        rv <- reactiveValues(
            value_store = character()
        )
        # When input changes -> update
        observeEvent(input$var, {
            output$selected_var <- renderText({ 
                paste(input$var)
            })
            rv$value_store <- input$var
            output$test <- renderText({
                paste(rv$value_store) 
            })
        })
    }
    

    PS:你可以删除paste,因为它在那里什么都不做。

    【讨论】:

    • 这个有效。谢谢 :) 我可以知道我是否有多个 selectInput,如何调用同一块中的所有存储对象。因为在observeEvent 之外无法获取stored_object。
    • @SangramkeshariSahu 尝试使用observe({CODE}) 而不是observeEvent(input$var, {CODE})
    • 太棒了 :) 它有帮助。
    【解决方案2】:

    你快到了,你只需要先定义反应元素,然后在 observeEvent() 函数中观察输入。然后在观察中使用isolate() 来更新值。

    ui <- fluidPage(
      titlePanel("censusVis"),
    
      sidebarLayout(
        sidebarPanel(
          helpText("Create demographic maps with 
               information from the 2010 US Census."),
    
      selectInput("var", 
                  label = "Choose a variable to display",
                  choices = c("Percent White", 
                              "Percent Black",
                              "Percent Hispanic", 
                              "Percent Asian"),
                  selected = "Percent White")
      ),
    
     mainPanel(
       textOutput("selected_var")
       textOutput("test")
     )
     )
    )
    
    server <- function(input, output) {
    
      value_store <- reactive(val = '')
    
      observeEvent(input$var, {
    
        # add to reactive
        isolate(value_store$val = input$var)
    
        # or render update
        output$selected_var <- renderText({ 
           paste(value_store$val)
         })
    
      })
    
    
    
    
     output$test <- renderText({
       paste(value_store$val) 
     })
    
      # I want to use the value in input$var for some comparision. 
      # but value_store unable to store. Help.
    
    }
    
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多