Jangan terus-menerus membuat word cloud baru
Aplikasi word cloud sekarang memiliki beberapa masukan berbeda, dan memodifikasi masing-masing akan membuat word cloud digambar ulang dengan parameter baru, sesuai harapan.
Namun, perilaku ini kadang dapat mengganggu. Misalnya, saat mengetik teks di textarea, word cloud terus dibuat ulang tanpa menunggu Anda selesai mengetik. Ini dapat dikendalikan dengan isolate().
Seluruh kode di dalam renderWordcloud2() yang merender word cloud telah dihapus. Tugas Anda adalah membuat ulang word cloud tersebut dan mengisolasinya agar perubahan parameter tidak otomatis memicu word cloud baru.
Latihan ini adalah bagian dari kursus
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R
Petunjuk latihan
- Pastikan seluruh fungsi pembuat word cloud diisolasi (baris 54).
- Berikan argumen ke
create_wordcloud()menggunakan input dan variabel reaktif yang diperlukan. Argumen untuk fungsi tersebut adalahdata,num_words, danbackground(baris 56).
Hasilnya mungkin terlihat seperti aplikasi rusak karena Anda tidak akan dapat membuat word cloud baru, tetapi hal ini akan ditangani pada latihan berikutnya.
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"
)
),
conditionalPanel(
condition = "input.source == 'own'",
textAreaInput("text", "Enter text", rows = 7)
),
conditionalPanel(
condition = "input.source == 'file'",
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) {
data_source <- reactive({
if (input$source == "book") {
data <- artofwar
} else if (input$source == "own") {
data <- input$text
} else if (input$source == "file") {
data <- input_file()
}
return(data)
})
input_file <- reactive({
if (is.null(input$file)) {
return("")
}
readLines(input$file$datapath)
})
output$cloud <- renderWordcloud2({
# Isolate the code to render the word cloud so that it will
# not automatically re-render on every parameter change
___({
# Render the word cloud using inputs and reactives
create_wordcloud(data = ___, num_words = ___,
background = ___)
})
})
}
shinyApp(ui = ui, server = server)