Shiny R从用户输入的文本文件中提取数据

时间:2018-02-06 15:10:31

标签: r shiny

我正在开发一个简单的应用程序,它应该要求用户fileInput提供1个(或更多)非结构化文本文件。这些文件具有完全相同的结构。 我们的想法是在背景上进行清理/提取,并将清洁数据返回给用户(最好是放入表格中)。

我使用Shiny是相当新的,我发现的示例基本上表明当文件输入已经是一个干净和结构化的方式时如何继续。

这是一个简化的代码,说明了我到目前为止所做的工作:

library(shiny)

shinyUI(fluidPage(
    titlePanel(title = h2("Title", align = "left")),

    sidebarLayout(position = "left",

        sidebarPanel(h3("Data management window", align = "center"),       

            fileInput(inputId = "file_1",
                label = "Select file 1")
            ),

mainPanel(
  uiOutput(outputId = "tb")
  )
)))

这里是服务器端:

shinyServer(function(input, output) {
    input_file_1 <- reactive({
       if(is.null(input$file_1)){
           return("!! No data loaded !!")
          }
       readLines(input$file_1$datapath)
     })

     output$data_1 <- renderText({
         fileText_1 <- paste(input_file_1(), collapse = "\n")
     })

output$tb <- renderUI({

    tabsetPanel(
        tabPanel("Window 1",
           br(),
           tags$div(
             tags$p("Summary infos : "),
             tags$ul(
               tags$li("Date calculation : ", Sys.Date()),

               tags$li("Info 1: "),

               tags$li("Info 2 : "),

               tags$li("Info 3 : "),
           br(),
           verbatimTextOutput("data_1"))
           ))
  )
  })

  })

在这个阶段,我设法将文件的文本呈现到应用程序中。我想要做的是在tabPanel中显示从文本文件中提取的数据中获得的一些结果,例如Sys.Date()但使用输入文件中的值。

您对如何进行有任何想法吗?希望我的问题有道理。

1 个答案:

答案 0 :(得分:0)

你的问题仍然过于笼统,请更具体。但是这里有一些东西让你开始。使用server文件和iris数据集使其更容易,您可以使用renderText()表达式提取您的某个变量的摘要。然后,您只需在textOutput()参数中添加tags$li("Info 1: ")表达式。

根据OP的评论,您可以添加selectInput(),以帮助您选择要汇总的一个变量或从中提取信息。代码工作原样。只需用你要加载的文件替换虹膜。

   ui = fluidPage(
    titlePanel(title = h2("Title", align = "left")),

    sidebarLayout(position = "left",

                  sidebarPanel(h3("Data management window", align = "center"),       

                               fileInput(inputId = "file_1",
                                         label = "Select file 1"),
                               uiOutput("Variable")
                  ),

                  mainPanel(
                    uiOutput(outputId = "tb")
                  )
    ))


  server = function(input, output) {
    input_file_1 <- reactive({
      if(is.null(input$file_1)){
        return("!! No data loaded !!")
      }
      readLines(input$file_1$datapath)
    })

    output$data_1 <- renderText({
      fileText_1 <- paste(input_file_1(), collapse = "\n")
    })


    output$Variable <- renderUI({
      obj2 <- iris #replace by input_file_1()
      selectInput("Variable", "Choose a variable", as.list(colnames(obj2)), multiple = FALSE)
    })

    output$summary1 <- renderPrint({

      sub <- iris %>% select(input$Variable) #replace iris
      a <- max(sub)
      a

    })

    output$tb <- renderUI({

      tabsetPanel(
        tabPanel("Window 1",
                 br(),
                 tags$div(
                   tags$p("Summary infos : "),
                   tags$ul(
                     tags$li("Date calculation : ", Sys.Date()),

                     tags$li("Info 1: ", textOutput("summary1")),

                     tags$li("Info 2 : "),

                     tags$li("Info 3 : "),
                     br(),
                     verbatimTextOutput("data_1"))
                 ))
      )
    })

  }