【问题标题】:In R Shiny, how do you paste a user's selected input from UI into a reactive object in server?在 R Shiny 中,如何将用户从 UI 中选择的输入粘贴到服务器中的反应对象中?
【发布时间】:2019-10-15 22:49:42
【问题描述】:

闪亮的超级新手,有一个问题似乎应该是基本的反应式编程,但我还没有找到迄今为止有效的解决方案。

本质上,我想从 UI 中获取用户选择的输入并将其粘贴到服务器中的一个简单对象中,该对象将在选择新输入时做出反应/更新。

该对象将被连接成一个完整的 API 调用,我希望在服务器中重新运行 API 调用,并在每次为其选择新输入时更新反应性对象(注意:没有访问权限就无法运行 API代码是公司帐户的一部分,因此很抱歉我不愿提供完整代码,但我只需要有关这一功能的帮助。)

在下面的代码中:

使用 Dollar General 作为 selectInput 中的默认选择,我希望对象 query 为字符串“dollar%20general”,如果选择 Walmart,则反应性更改为“walmart”

谢谢!

ui <- fluidPage

 sidebarLayout(
    sidebarPanel(

     selectInput("company", "Choose company:",
                  c("Dollar General" = "dollar%20general",
                    "Dollar Tree" = "dollar%20tree",
                    "Walmart" = "walmart"))

...

server <- function(input,output)  {
...

query <- paste(input$company)  
...

【问题讨论】:

    标签: r api shiny


    【解决方案1】:

    您可以使用reactiveValues()observe。这应该有效:

    library(shiny)
    
    # Define UI for application 
    ui <- fluidPage(
    
        # your input
        sidebarLayout(
            sidebarPanel(
                selectInput("company", "Choose company:",
                            c("Dollar General" = "dollar%20general",
                              "Dollar Tree" = "dollar%20tree",
                              "Walmart" = "walmart"))
            ),
    
            # Determine Output
            mainPanel(
                textOutput("showInput") # you need to render this in your server file
            )
        )
    )
    
    server <- function(input, output) {
    
        # Show what was selected
    
        query <- reactiveValues()
    
        observe(
            query$test <- paste(input$company, "and test", sep = " ")
            )
    
        output$showInput <- renderText({ #based on what you defined in the ui
            query$test
        })
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      【解决方案2】:

      创建两个名为 ui.Rserver.R 的文件,将 UI 逻辑存储在 ui.R 中,将后端/对象逻辑存储在 server.R 中。下面是实现。

      界面文件

      # UI of app
      ui <- fluidPage(
      
        # input
          sidebarLayout(
              sidebarPanel(
                  selectInput("company", "Choose company:",
                              c("Dollar General" = "dollar%20general",
                                "Dollar Tree" = "dollar%20tree",
                                "Walmart" = "walmart"))
              ),
      
              # Output
              mainPanel(
                 textOutput("Input") 
              )
          )
      )
      

      服务器/后端文件

      server <- function(input, output) {
      
          # Show what was selected
      
          output$Input <- renderText({ #based on what you defined in the ui
              input$company
          })
      }
      

      现在将这些存储在一个目录中,然后调用runApp 函数。

      ~/newdir
      |-- ui.R
      |-- server.R
      
      runApp("newdir")
      

      【讨论】:

      • 如果解决了问题,请点赞并接受答案。
      猜你喜欢
      • 2021-04-20
      • 2023-04-10
      • 1970-01-01
      • 2018-06-12
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      相关资源
      最近更新 更多