Pilih sumber data (server)
Saat bekerja dengan tombol radio, terkadang Anda perlu menggunakan logika kondisional (pernyataan if-else) ketika mengakses nilai tombol radio di sisi server. Ini diperlukan ketika tindakan yang berbeda dijalankan bergantung pada pilihan tertentu, dan nilai yang dipilih perlu diperiksa sebelum memutuskan langkah selanjutnya.
Sebagai contoh, untuk tombol radio yang memilih sumber data, kode yang berbeda perlu dijalankan bergantung pada opsi yang dipilih.
Tugas Anda berikutnya adalah menggunakan sumber data yang sesuai dalam fungsi word cloud, sesuai dengan tombol radio yang dipilih pengguna.
Latihan ini adalah bagian dari kursus
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R
Petunjuk latihan
- Definisikan variabel reaktif bernama
data_sourceuntuk menampung data yang akan digunakan untuk word cloud (baris 28). - Jika opsi "book" ("Art of War") dipilih, tetapkan buku
artofwarsebagai sumber data. Jika opsi "own" ("Use your own words") dipilih, tetapkan nilai dari textarea sebagai sumber data. Jika opsi "file" ("Upload a file") dipilih, tetapkan teks dari berkas yang diunggah pengguna sebagai sumber data (baris 33 hingga 36). - Gunakan variabel reaktif
data_source()sebagai argumendatauntuk fungsi word cloud (baris 51).
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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)