Joseph Mena
Joseph Mena

Reputation: 3

In R Shiny, how do you paste a user's selected input from UI into a reactive object in server?

super new to shiny, have a problem that seems like it should be basic reactive programming but I haven't been able to find a solution that's worked so far.

Essentially, I want to take the user's selected input from the UI and paste it into a simple object in the server that will react/update when a new input is chosen.

The object will be concatenated into a full API call, and I wish to rerun the API call in the server with the reactive object updated each time a new input is chosen for it (note: the API cannot be run without an access code which is part of a corporate account, so apologies for my hesitance to put my full code but I just need help with this one functionality.)

In code below:

with Dollar General as the default selection in the selectInput, I would like the object, query, to be the character string "dollar%20general", and reactively change to "walmart" should Walmart be selected

Thanks!

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)  
...

Upvotes: 0

Views: 1138

Answers (2)

ashwin agrawal
ashwin agrawal

Reputation: 1611

Create two files named ui.R and server.R store the UI logic in ui.R and backend/object logic in server.R. Below is the implementation.

UI file

# 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/Backend File

server <- function(input, output) {

    # Show what was selected

    output$Input <- renderText({ #based on what you defined in the ui
        input$company
    })
}

Now store these in a directory and then call runApp function.

~/newdir
|-- ui.R
|-- server.R

runApp("newdir")

Upvotes: 0

dasds
dasds

Reputation: 170

you can use reactiveValues() and observe. This should work:

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)

Upvotes: 0

Related Questions