Przesyłanie pliku tekstowego (serwer)
Po wybraniu pliku przez użytkownika plik zostaje przesłany na komputer, na którym działa aplikacja Shiny, i staje się dostępny po stronie serwera.
Jeśli identyfikator wejścia dla pola wyboru pliku to "myfile", możesz się spodziewać, że input$myfile da ci dostęp do przesłanego pliku – jednak tak to nie działa. input$myfile zwraca ramkę danych zawierającą kilka informacji o wybranym pliku, z których najważniejsza to datapath. Zakładając, że identyfikator pola pliku to "myfile", input$myfile$datapath będzie ścieżką, pod którą plik się znajduje.
Po uzyskaniu ścieżki do przesłanego pliku (na przykład C:\Users\Dean\AppData\Local\Temp\path\to\file.txt) możesz jej użyć do odczytania pliku w dowolny sposób. Jeśli przesłany plik jest w formacie CSV, możesz użyć read.csv(). Jeśli chcesz po prostu wczytać wszystkie linie pliku, skorzystaj z readLines(). Możesz też użyć dowolnej innej funkcji akceptującej ścieżkę do pliku.
To ćwiczenie jest częścią kursu
Studia przypadków: tworzenie aplikacji webowych w Shiny w R
Instrukcje do ćwiczenia
Twoim zadaniem jest użycie tekstu z przesłanego pliku jako źródła danych dla chmury wyrazów. Konkretnie:
- Zdefiniuj reaktywną zmienną o nazwie
input_file, która będzie przechowywać tekst z przesłanego pliku (wiersz 19).- Korzystając ze ścieżki do przesłanego pliku, odczytaj jego zawartość za pomocą funkcji
readLines()(wiersz 24).
- Korzystając ze ścieżki do przesłanego pliku, odczytaj jego zawartość za pomocą funkcji
- Użyj reaktywnej zmiennej
input_file()jako parametrudatafunkcji generującej chmurę wyrazów (wiersz 29).
Aby przetestować przesyłanie pliku, możesz utworzyć dowolny plik tekstowy na swoim komputerze i przesłać go do aplikacji. Możesz też skorzystać z tego pliku (zapisz go jako plik tekstowy na swoim komputerze) i przetestować funkcję chmury wyrazów na tekście przemówienia Martina Luthera Kinga Jr. I Have a Dream.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
ui <- fluidPage(
h1("Word Cloud"),
sidebarLayout(
sidebarPanel(
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) {
# Define a reactive variable named `input_file`
input_file <- ___({
if (is.null(input$file)) {
return("")
}
# Read the text in the uploaded file
readLines(input$___$datapath)
})
output$cloud <- renderWordcloud2({
# Use the reactive variable as the word cloud data source
create_wordcloud(data = ___(), num_words = input$num,
background = input$col)
})
}
shinyApp(ui = ui, server = server)