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 id
tabx
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:
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
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 ... –