Sube un archivo de texto (servidor)
Después de que el usuario seleccione un archivo, ese archivo se sube al ordenador que ejecuta la app Shiny y queda disponible en el servidor.
Si el ID de un input de archivo es "myfile", podrías esperar que input$myfile te diera acceso al archivo subido, pero así no funcionan los inputs de archivo. input$myfile devolverá un data.frame con algunos metadatos sobre el archivo seleccionado, siendo datapath el más importante. Suponiendo que el ID del input de archivo es "myfile", input$myfile$datapath será la ruta donde se encuentra el archivo.
Tras obtener la ruta del archivo subido (por ejemplo, C:\Users\Dean\AppData\Local\Temp\path\to\file.txt), puedes usar esa ruta para leer el archivo como necesites. Puedes usar read.csv() si el archivo subido es un CSV, o readLines() si simplemente quieres leer todas las líneas del archivo, o cualquier otra función que acepte una ruta de archivo.
Este ejercicio forma parte del curso
Casos prácticos: crea aplicaciones web con Shiny en R
Instrucciones del ejercicio
Tu tarea es usar el texto del archivo subido como fuente de datos para la nube de palabras. En concreto:
- Define una variable reactiva llamada
input_fileque contendrá el texto del archivo subido (línea 19).- Usando la ruta del archivo subido, lee el texto del archivo con la función
readLines()(línea 24).
- Usando la ruta del archivo subido, lee el texto del archivo con la función
- Usa la variable reactiva
input_file()como parámetrodatade la función de nube de palabras (línea 29).
Para probar la subida de archivos, puedes crear cualquier archivo de texto en tu ordenador y subirlo a la app. Como alternativa, puedes usar este archivo (guárdalo como un archivo de texto en tu ordenador) para probar la función de nube de palabras con el texto del discurso I Have a Dream de Martin Luther King Jr.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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)