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 merupakan bagian dari kursus
Studi Kasus: Membangun Aplikasi Web dengan Shiny di R
Instruksi 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 langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
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)