2017-05-21 1 views
2

Ich bin eine glänzende App auf R tun, ich will, hängt von dem „Regiones“ einen Filter ändern, bedeutet dies, ich tabsetPanel in eine TabPanel habe,Wie ein reaktiven Laschensätze auf Shiny R erstellen

This is my App now

Wenn ich auf "Antioquia" meinen server.R sollte

Filter (Boden, Boden == "Antioquia")

Aber, wenn ich auf „Bogot klicken á“, sollte es ändern

Filter (Boden, Boden == "Bogotá")

Und so weiter ... Wie kann ich es tun?

+2

Willkommen Dani. Werfen Sie einen Blick auf die Frage - https://stackoverflow.com/help/how-to-ask. Recherchiere immer zuerst. Diese Antwort kann Ihnen Hinweise geben - http://stackoverflow.com/q/36915016/4606130 – micstr

+0

Da dieses Beispiel keine 'id' für das' tabPanel' definiert hatte, würde es ihm nicht wirklich helfen. Die meisten Beispiele haben es natürlich nicht ... –

Antwort

0

Die Aufgabe ist es, einen Datenrahmen reaktiv, wenn die TabPanel Änderungen zu filtern. Das ist schwieriger herauszufinden als man vielleicht denkt.

Um dies zu tun, müssen Sie eine id für die tabsetPanel definieren, sonst gibt es nichts zu "reagieren". Da man es normalerweise nicht benötigt, haben die meisten Beispiele dieses Feld nicht, und daher kann es schwierig sein, darüber zu stolpern. Es ist nicht in der Hilfe unter ?tabsetPanel zum Beispiel dokumentiert.

Hier ist ein minimales Beispiel, das das tut, was Sie suchen.

  • Es schafft eine tabsetPanel mit zwei tabPanel s
  • die tabsetPanel eine idtabx genannt hat.
  • Es definiert einen Datenrahmen basedf mit zwei Arten von Reihen genannt, "A" und "B"
  • ein Filterwert wird als ein Element in einer reactiveValues Variable gespeichert.
  • Er setzt diesen Filter, wenn sich die Registerkarte ändert (die input$tabx-Anweisung ist dafür erforderlich, andernfalls verursacht das integrierte reaktive Zwischenspeichern, dass es nur einmal ausgelöst wird).
  • Es gibt ein reaktives Ausgabefeld, das die basedf filtert und ausdruckt, was übrig bleibt.

Der Code:

library(shiny) 
library(dplyr) 

basedf <- data.frame(base=c("A","B","A","B","B","A"),val=1:6) 

u <- shinyUI(fluidPage(

    titlePanel(h2("TabPanel Test")), 
    sidebarLayout(  
    sidebarPanel(
     verbatimTextOutput("out1") 
    ),   
    mainPanel(
     tabsetPanel(id="tabx", 
     tabPanel("tab A", textOutput("outA")), 
     tabPanel("tab B", textOutput("outB")) 
    ) 
    ) 
) 
)) 
s <- shinyServer(function(input,output){ 
    rv <- reactiveValues(curtab=NULL) 

    output$outA <- renderText({ 
    input$tabx 
    rv$curfilt <- "A" 
    "this is tab A" 
    }) 
    output$outB <- renderText({ 
    input$tabx 
    rv$curfilt <- "B" 
    "this is tab b" 
    }) 
    output$out1 <- renderPrint({ 
    print(sprintf("curtab:%s",input$tabx)) 
    print(sprintf("curfilt:%s",rv$curfilt)) 
    ndf <- filter(basedf,base==rv$curfilt) 
    print(ndf) 
    }) 
}) 
shinyApp(u,s) 

Und hier ist es, was die Ausgabe wie folgt aussieht: enter image description here

Verwandte Themen