Использование сканирования в реактивном утверждении

Я пытаюсь написать простую программу на R, используя Shiny. Программа читает текстовые файлы, выбранные пользователем, а затем отображает это как объект.html. Я использую функцию "сканирования" для чтения текстового файла (NB в настоящее время только пытается вывести первую строку). Программа запускается, но вывод не обновляется. Почему вывод не обновляется? Благодарю.

library(shiny)

shinyApp(

  ui <- fluidPage(
      sidebarLayout(
        sidebarPanel(
          fileInput("text_file", "Choose text file",
                    multiple = FALSE,
                    accept = c(".txt")
          )
        ),
        mainPanel(htmlOutput("example"))
      )
    ), 

  server <- function(input, output, session){

    text <- reactive({
            req(input$text_file)
            x <- scan(input$text_file, what = "string", sep = "\n")[1]
            })
    # text output
    output$example <- reactive({
        renderUI({
          HTML(x)
          })
    })
  }
)

shinyApp(ui, server)

1 ответ

Решение

Необходимо внести некоторые изменения:

  1. Файл, читающий файл, вы должны попросить файл для чтения input$inputId$datapath и не input$inputId,
  2. Ваш renderUI() должен вернуться text() и не x, как text() Ваш реактивный объект отображается
  3. Вам не нужно добавлять reactive() любому render функции блестящие, так как они уже реактивные.

Измените свой сервер на следующее:

server <- function(input, output, session){

  text <- reactive({
    req(input$text_file)
    x <- scan(input$text_file$datapath, what = "string", sep = "\n")[1]
  })

  # text output
  output$example <- renderUI({
      HTML(text())
    })
}
Другие вопросы по тегам