在响应语句中使用扫描

时间:2018-11-04 16:23:46

标签: r shiny shiny-reactivity

我正在尝试使用Shiny在R中编写一个简单的程序。该程序读取用户选择的文本文件,然后将其显示为.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 :(得分:2)

您需要进行一些更改:

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