2017-11-26 6 views
1

Ich versuche eine ähnliche App zu diesem Shiny: dynamische Dataframe Konstruktion; renderUI, beobachte, reactiveValues. Ich möchte eine Option erstellen, um beispielsweise die Anzahl der Zylinder in der Liste auszuwählen. Damit wird die Tabelle nach Auswahl der Nummer automatisch aktualisiert. Könnte mir jemand erklären, was ich falsch mache? Wie Sie auf dem Grafikprogramm sehen können, funktioniert das nicht gut. enter image description hereR Shiny: eventReactive und renderUI Interaktion

Mein Code:

ui:

library(shiny) 

hw <- mtcars 

shinyUI(fluidPage(
    title = 'Examples of DataTables', 
    sidebarLayout(
    sidebarPanel(

     radioButtons(
     inputId="radio", 
     label="Variable Selection Type:", 
     choices=list(
      "All", 
      "Manual Select" 
     ), 
     selected="All"), 

     conditionalPanel(
     condition = "input.radio != 'All'", 
     selectizeInput(
      'show_vars', 
      'Columns in cars to show:', 
      choices=names(hw), 
      selected = names(hw), 
      multiple =TRUE), 

     uiOutput("category1") 
    ) 

    ), 
    mainPanel(
     verbatimTextOutput("summary"), 
     tabsetPanel(
     id = 'dataset', 
     tabPanel('hw', dataTableOutput('mytable1')) 
    ) 
    ) 
) 
)) 

Server:

library(shiny) 
library(ggplot2) 

shinyServer(function(input, output) { 


    Data <- reactive({ 

    if(input$radio == "All"){ 
     hw 
    } else { 
     hw[,input$show_vars,drop=FALSE] 
    } 

    }) 

    output$category1 <- renderUI({ 
    selectizeInput('cat1', 'Select cyl:', choices = c("All",sort(as.character(unique(hw$cyl)))),selected = "All") 

    }) 

    df_subset <- eventReactive(input$cat1,{ 
    if(input$cat1=="All") {df_subset <- hw} 
    else{df_subset <- hw[hw$Position == input$cat1,]} 
    }) 


    output$mytable1 <- renderDataTable({ 
    df_subset() 
     hw[, input$show_vars, drop = FALSE] 
    }) 
}) 

Antwort

1

Hier wird das Armaturenbrett für Ihr Beispiel ist:

# Packages 
library(shiny) 
library(DT) 
library(dplyr) 

# UI 
ui <- fluidPage( 
    # Application title 
    titlePanel("Example"), 

    # Sidebar 
    sidebarLayout(
    sidebarPanel(selectInput("si_cylinders", "Cylinders", 
       choices = sort(unique(mtcars$cyl)), selected = "4")), 
    mainPanel(dataTableOutput("dt_mtcars")))) 

    # Server 
    server <- function(input, output) { 

    # Data set for output 
    df_mtcars <- reactive({ 
    # 1. Read UI element 
    cylinder_selected <- as.numeric(input$si_cylinders[1]) 

    # 2. Filter data set 
    df <- mtcars %>% filter(cyl == cylinder_selected) 

    # 3. Return result 
    return(df) 
    }) 

    # 2. Data table for output 
    output$dt_mtcars <- renderDataTable({ 
    datatable(df_mtcars()) 
    }) 

} 

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

Ok, aber wie ich concect das zu meinem Code, weil es das schafft das größte Problem für mich. Du könntest mir helfen? – Kim

+0

Es kann gut sein, "+1" für die Antwort mindestens so zu erhalten, wie ich gemacht habe: – andrii

+0

Danke. Sie können meinen Code aufgrund Ihrer Aufgabe erweitern, indem Sie neue Benutzeroberflächenelemente hinzufügen – andrii

Verwandte Themen