如何从Shiny中的下拉框中动态创建变量选择的直方图

时间:2015-04-16 05:43:13

标签: r shiny

我想创建Shiny app,用户将上传csv文件,在上传下拉框时会填充数据集中的所有变量。

当用户从下拉框中选择其中一个变量时,应在主面板中绘制相应的直方图。

这就是我所做的

ui.r文件

library(shiny)

shinyUI(pageWithSidebar(
headerPanel( "Demand Forecast", "Flowserve"),
sidebarPanel(
fileInput('file1', 'Select csv file',accept=c('text/csv')
),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator', c(Comma=',',Tab='\t',  Semicolon=';' )
),
tags$hr(),
selectInput("product", "Select: ","")
 ),
mainPanel(tableOutput('contents'),

       plotOutput("hist")
      )
       ))

server.r文件

    library(shiny)
    library(ggplot2)


    shinyServer(function(input,output,session){



    dataUpload<-reactive({

    inFile<-input$file1
    print(inFile)
    if(is.null(inFile))
      return(NULL)
    dt_frame = read.csv(inFile$datapath, header=input$header, sep=input$sep)
    updateSelectInput(session, "product", choices = names(dt_frame))
    })


    output$hist <- renderPlot({

    dataset<- dataUpload()
    hist(dataset[,dataset$product])

    })
  }) 

但是当我运行这个应用程序时,它会给我一个错误类型&#39;关闭&#39;不是子集表格

请帮助..

提前致谢

1 个答案:

答案 0 :(得分:0)

欢迎来到R闪亮的世界!

  • 您想要将所选列用于直方图 - &gt; hist(dataset[,input$product])
  • 您的反应函数不会返回任何内容,但您已写入dataset<- dataUpload() - &gt;将return()添加到反应函数
  • 您还需要在renderPlot()
  • 中进行错误检查

最小的工作示例:

library(shiny)
library(ggplot2)

server <- function(input, output, session) {

  dataUpload<-reactive({

    inFile<-input$file1
    print(inFile)
    if(is.null(inFile))
      return(NULL)
    dt_frame = read.csv(inFile$datapath, header=input$header, sep=input$sep)
    updateSelectInput(session, "product", choices = names(dt_frame))
    return(dt_frame)
    })

    #output$contents <- renderTable({
    #   dataset<- dataUpload()
    #   dataset
    #})
    output$hist <- renderPlot({
    # we need error check also here
    if(is.null(input$file1))
      return(NULL)
    dataset<- dataUpload()
    hist(dataset[,input$product])

    })


}

ui <- pageWithSidebar(
headerPanel( "Demand Forecast", "Flowserve"),
sidebarPanel(
fileInput('file1', 'Select csv file',accept=c('text/csv')
),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator', c(Comma=',',Tab='\t',  Semicolon=';' )
),
tags$hr(),
selectInput("product", "Select: ","")
 ),
mainPanel(tableOutput('contents'),

       plotOutput("hist")
      )
)


shinyApp(ui = ui, server = server)