ComenzarEmpieza gratis

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

Ver curso

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_file que 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).
  • Usa la variable reactiva input_file() como parámetro data de 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)
Editar y ejecutar código