是否有任何特定资源可用于创建一个闪亮的应用程序来上传文件并绘制选定的列?

Are there any specific resources to use for creating a shiny app that uploads a file and plots a selected column?

library(shiny)
library(plotly)
library(ggplot2)
library(tidyverse)
library(DT)

if (!require("okcupiddata")) install.packages("okcupiddata")
library(okcupiddata)
D=sample_n(profiles, 5000)
write.csv(D, file="~/Downloads/OKCupid.csv", row.names = FALSE)

ui <- fluidPage(
    
    # Application title
    titlePanel(title = "Uploading Your File"),
    
    sidebarLayout(
        sidebarPanel(
            width = 2,
            ## Create a file upload control
            fileInput(inputId = "file",
                      label = "Choose Your File:",
                      accept = c(".txt", ".csv")),
            ## Use html tag hr (horizontal rule) to make a horizontal separator
            hr(),
            ## Make a h5 heading
            h5("Max file size is 2M"),
            ## Create a checkbox that can be used to specify logical values.
            checkboxInput(inputId = "header",
                          label = "Header",
                          value = TRUE),
            ## Create a set of radio buttons used to select an item from a list.
            radioButtons(inputId = "sep",
                         label = "Separator",
                         choices = c(Comma = ",", Space = " ", Tab = "\t")),
            
            uiOutput("variable")
        ),
        mainPanel(
            tabsetPanel(
                tabPanel("Table", tableOutput("table")),
                tabPanel("Summary", verbatimTextOutput("summary")),
                tabPanel("Plot", plotlyOutput("plot", height = "700px"))
            )
            
        )
    )
)
server <- function(input, output, session) {
    
    myData <- reactive({ 
        f = input$file
        if (is.null(f)){
            return(NULL)
            
        } else {
            read.table(f$datapath, header = input$header, sep = input$sep)
            
        }
    })

    #A. Create a drop-down menu to choose a variable
    output$variable <- renderUI({
        
        })
    #B. Display the whole table
    output$table <- renderTable({

    })
    
    #C. Summarize the whole table
    output$summary <- renderPrint({
    })
    
    #D. Plot only the selected variable.
    # The code needs to handle both a categorical and numeric variables
    output$plot <- renderPlotly({
      
})
}
shinyApp(ui = ui, server = server) 

我卡在 A、B、C 和 D 上了。我知道使用 selectInput() 创建下拉菜单,使用数据框 () 函数呈现 table,摘要() 函数来呈现摘要,以及 ggplot() 函数来呈现数字和分类 plot.I 不知道如何正确引用所选文件,然后引用所述文件中的列。有什么想法吗?

答案完成了 A、B、C 和 D。您还没有真正分享您需要的图表类型,但根据所选列的 class,显示了图表。

library(shiny)
library(plotly)
library(tidyverse)
library(DT)

ui <- fluidPage(
  
  # Application title
  titlePanel(title = "Uploading Your File"),
  
  sidebarLayout(
    sidebarPanel(
      width = 2,
      ## Create a file upload control
      fileInput(inputId = "file",
                label = "Choose Your File:",
                accept = c(".txt", ".csv")),
      ## Use html tag hr (horizontal rule) to make a horizontal separator
      hr(),
      ## Make a h5 heading
      h5("Max file size is 2M"),
      ## Create a checkbox that can be used to specify logical values.
      checkboxInput(inputId = "header",
                    label = "Header",
                    value = TRUE),
      ## Create a set of radio buttons used to select an item from a list.
      radioButtons(inputId = "sep",
                   label = "Separator",
                   choices = c(Comma = ",", Space = " ", Tab = "\t")),
      
      uiOutput("variable")
    ),
    mainPanel(
      tabsetPanel(
        tabPanel("Table", tableOutput("table")),
        tabPanel("Summary", verbatimTextOutput("summary")),
        tabPanel("Plot", plotlyOutput("plot", height = "700px"))
      )
      
    )
  )
)
server <- function(input, output, session) {
  
  myData <- reactive({ 
    f = input$file
    if (is.null(f)){
      return(NULL)
      
    } else {
      read.table(f$datapath, header = input$header, sep = input$sep)
      
    }
  })
  
  #A. Create a drop-down menu to choose a variable
  output$variable <- renderUI({
    selectInput('dd', 'Select dropdown', names(myData()))
    
  })
  #B. Display the whole table
  output$table <- renderTable({
     myData()
  })
  
  #C. Summarize the whole table
  output$summary <- renderPrint({
    summary(myData())
  })
  
  #D. Plot only the selected variable.
  # The code needs to handle both a categorical and numeric variables
  output$plot <- renderPlotly({
    if(is.numeric(myData()[[input$dd]]))
      plt <- ggplot(myData(), aes(.data[[input$dd]])) + geom_histogram()
    else 
      plt <- ggplot(myData(), aes(.data[[input$dd]])) + geom_bar()
    ggplotly(plt)
    
  })
}
shinyApp(ui = ui, server = server)