Zacznij terazZacznij za darmo

Wybierz źródło danych (serwer)

Podczas pracy z przyciskami opcji (radio buttons) często konieczne jest zastosowanie logiki warunkowej (instrukcji if-else) przy odczytywaniu ich wartości po stronie serwera. Jest to potrzebne wtedy, gdy różne działania zależą od konkretnego wyboru – wartość musi zostać najpierw sprawdzona, zanim zdecydujesz, jak postąpić.

Na przykład w przypadku przycisków wyboru źródła danych różny kod będzie wykonywany w zależności od tego, którą opcję wybierze użytkownik.

Twoim kolejnym zadaniem jest użycie odpowiedniego źródła danych w funkcji generującej chmurę słów – zgodnie z wyborem dokonanym przez użytkownika.

To ćwiczenie jest częścią kursu

Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Zobacz kurs

Instrukcje do ćwiczenia

  • Zdefiniuj zmienną reaktywną o nazwie data_source, która będzie przechowywać dane używane do generowania chmury słów (wiersz 28).
  • Jeśli wybrana zostanie opcja „book" („Art of War"), przypisz jako źródło danych książkę artofwar. Jeśli wybrana zostanie opcja „own" („Użyj własnych słów"), przypisz wartość z pola tekstowego. Jeśli wybrana zostanie opcja „file" („Wczytaj plik"), przypisz tekst z pliku przesłanego przez użytkownika (wiersze 33–36).
  • Użyj reaktywnej zmiennej data_source() jako argumentu data w funkcji generującej chmurę słów (wiersz 51).

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

ui <- fluidPage(
  h1("Word Cloud"),
  sidebarLayout(
    sidebarPanel(
      radioButtons(
        inputId = "source",
        label = "Word source",
        choices = c(
          "Art of War" = "book",
          "Use your own words" = "own",
          "Upload a file" = "file"
        )
      ),
      textAreaInput("text", "Enter text", rows = 7),
      fileInput("file", "Select a file"),
      numericInput("num", "Maximum number of words",
                   value = 100, min = 5),
      colourInput("col", "Background color", value = "white")
    ),
    mainPanel(
      wordcloud2Output("cloud")
    )
  )
)

server <- function(input, output) {
  # Create a "data_source" reactive variable
  data_source <- ___({
    # Return the appropriate data source depending on
    # the chosen radio button
    if (input$source == "book") {
      data <- artofwar
    } else if (input$source == ___) {
      data <- input$___
    } else if (___ == "file") {
      data <- input_file()
    }
    return(data)
  })

  input_file <- reactive({
    if (is.null(input$file)) {
      return("")
    }
    readLines(input$file$datapath)
  })

  output$cloud <- renderWordcloud2({
    # Use the data_source reactive variable as the data
    # in the word cloud function
    create_wordcloud(data = ___(), num_words = input$num,
                     background = input$col)
  })
}

shinyApp(ui = ui, server = server)
Edytuj i uruchom kod