将数据上传到Shiny进行分析

时间:2017-08-01 23:56:30

标签: r shiny

我正在尝试将文件上传到Shiny来处理它,然后查看它。

我已经能够创建一个包含CSV文档的表,但输出myData不能用作boxplot或任何其他图形的输入。

SERVER

    shinyServer(function(input, output, session){
  myData <- reactive({
    inFile <- input$file1
    if (is.null(inFile)) return(NULL)
    data <- read.csv(inFile$datapath, header = TRUE)
    data
  })

  output$contents <- renderTable({
    myData()

  })


}

UI

library(shiny)

write.csv(data.frame(a = 1:10, b = letters[1:10]), 'test.csv')

shinyUI(fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv',
                         'text/comma-separated-values,text/plain',
                         '.csv'))
    ),
    mainPanel(
      tableOutput('contents'),
      plotOutput('distPlot')
    )
  )
)
)

如何使用我从函数myData上传的文件中的数据?

1 个答案:

答案 0 :(得分:1)

您应该使用DT包中的renderDataTable和dataTableOutput函数来渲染表。你的代码工作得很好:

library(shiny)
library(DT)

server <- function(input, output, session){
  myData <- reactive({
    inFile <- input$file1
    if (is.null(inFile)) return(NULL)
    data <- read.csv(inFile$datapath, header = TRUE)
    data
  })

  output$contents <- DT::renderDataTable({
    DT::datatable(myData())       
  })
}

write.csv(data.frame(a = 1:10, b = letters[1:10]), 'test.csv')

ui<- shinyUI(fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv',
                         'text/comma-separated-values,text/plain',
                         '.csv'))
    ),
    mainPanel(
      DT::dataTableOutput('contents'),
      plotOutput('distPlot')
    )
  )
)
)

shinyApp(ui,server)

另见以下文章:

也可以让用户将csv上传到您的Shiny应用程序。下面的代码显示了如何实现这一目标的一个小例子。它还包括radioButton输入,因此用户可以交互式地选择要使用的分隔符。

library(shiny)
library(DT)

# Define UI
ui <- shinyUI(fluidPage(

  fileInput('target_upload', 'Choose file to upload',
            accept = c(
              'text/csv',
              'text/comma-separated-values',
              '.csv'
            )),
  radioButtons("separator","Separator: ",choices = c(";",",",":"), selected=";",inline=TRUE),
  DT::dataTableOutput("sample_table")
)
)

# Define server logic
server <- shinyServer(function(input, output) {

  df_products_upload <- reactive({
    inFile <- input$target_upload
    if (is.null(inFile))
      return(NULL)
    df <- read.csv(inFile$datapath, header = TRUE,sep = input$separator)
    return(df)
  })

  output$sample_table<- DT::renderDataTable({
    df <- df_products_upload()
    DT::datatable(df)
  })

}
)

# Run the application 
shinyApp(ui = ui, server = server)