2017-12-28 2 views
0

Ich versuche, eine einfache Anwendung zu erstellen, die ein Histogramm einer ausgewählten Variablen basierend auf einer Untermenge zeichnet, die von der anderen Eingabe gefiltert wird. Ich erhalte den Fehler in der Zeile hist(dataX()$datasetInput()), die dataX$mpg zurückgeben sollte. Wie kann ich es reparieren? Full code:Versuch, keine Funktion anzuwenden

library(shiny) 
u <- shinyUI(pageWithSidebar(
    headerPanel("Staz w bezrobociu"), 
    sidebarPanel(

    selectInput("variable", "Variable:", 
       list("Milles/gallon", 
        "Horse power") 
    ), 
    textInput("nc","Number of cylinders",value = 6) 
), 

    mainPanel(
    plotOutput("Plot") 
) 

)) 

s <- shinyServer(function(input, output) 
{ 
    dataX <- reactive({mtcars[mtcars$cyl==input$nc,,drop = FALSE]}) 

    datasetInput <- reactive({ 
    switch(input$variable, 
      "Milles/gallon" = mpg, 
      "Horse power" = hp) 
    }) 

    output$Plot <- renderPlot({ 

    hist(dataX()$datasetInput()) 
    }) 

}) 
shinyApp(u,s) 

Antwort

0

Sie kompliziert die einfache App.

  1. Sie müssen nicht alle Spalten in selectInput auflisten. Sie können es nur von der Serverseite rendern.
  2. Gleiches gilt für die Zylinder
  3. Verknüpfungen wie u und s sind akzeptabel, aber halten Sie sich an die Namenskonventionen. Es macht dein Leben einfach.

Nachfolgend finden Sie eine komplette Arbeits App


library(shiny) 
ui <- shinyUI(pageWithSidebar(
    headerPanel("Staz w bezrobociu"), 
    sidebarPanel(uiOutput("SelectColname"), 
       uiOutput("Cylinders")), 
    mainPanel(plotOutput("Plot")) 
)) 

server <- shinyServer(function(input, output){ 
    # Create a reactive dataset 
    dataX <- reactive({ 
    mtcars 
    }) 

    # Output number cylinders as select box 
    output$Cylinders <- renderUI({ 
    selectInput("cylinders", "cylinders:", unique(dataX()$cyl)) 
    }) 

    # Output column names as selectbox 
    output$SelectColname <- renderUI({ 
    selectInput("variable", "Variable:", colnames(dataX()[,c(1,4)])) 
    }) 

    # Based on the selection by user, create an eventreactive plotdata object 
    plotdata <- eventReactive(input$cylinders, { 
    plotdata = dataX()[dataX()$cyl == input$cylinders, , drop = FALSE] 
    }) 

    # Render the plot, the plot changes when new cylinder is selected 
    output$Plot <- renderPlot({ 
    if (is.null(plotdata())) 
     return(NULL) 
    hist(
     plotdata()[, input$variable], 
     xlab = input$variable, 
     main = paste(
     "Histogram of" , 
     input$variable 
    ) 
    ) 
    }) 

}) 
shinyApp(ui, server) 
Verwandte Themen