Использование сканирования в реактивном утверждении - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь написать простую программу на 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 Ответ

0 голосов
/ 05 ноября 2018

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

  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())
    })
}
...