2017-10-16 3 views
0

Im Wesentlichen versuche ich zwischen Rhandsontables zu wechseln, die auch externe Widgets haben, die sie manipulieren. Außerdem gibt es in diesen Tabellen zugrunde liegende Formeln. Diese Tabellen sind im Wesentlichen die gleichen und die Widgets und Formeln funktionieren in beiden Fällen gleich, ich möchte nur zwischen ihnen wechseln können. Das folgende Beispiel kann informativ sein ...Shiny: Wechselnde reaktive Datensätze mit Rhandsontable und externen Parametern

library(shiny) 
library(rhandsontable) 

RepData1 <- data.frame(col1 = c(1:10) 
         ,col2 = "C1" 
         ,col3 = runif(10,0,0.023) 
         ,col4 = runif(10,0,1)) 
RepData2 <- data.frame(col1 = c(1:10) 
         ,col2 = "C2" 
         ,col3 = runif(10,0,0.023) 
         ,col4 = runif(10,0,1)) 

ui=fluidPage(

    sliderInput("mySlider",label="Slider", min = 0, max = 100, post = " %", value = 50) 
    ,numericInput("Total", "Total:", 500000) 
    ,verbatimTextOutput("value") 

    ,fluidRow(
     column(3, radioButtons("Buttn10", label="col", choices= c("C1","C2"), selected = "C1", inline = TRUE)) 
     ,column(6,rHandsontableOutput("hotable1")) 
     ) 
) 

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

    selData <- "" 

    previous <- reactive({ 
    if(input$Buttn10 == "C1") { 
     if(selData == "" | selData == "C2") { 
     selData <<- "C1" 

     return(RepData1) 
     } 
    } else { 
     if(selData == "C1") { 
     selData <<- "C2" 

     return(RepData2) 
     } 
    } 

    }) 

    MyChanges <- reactive({ 
    if(is.null(input$hotable1)){ 
     return(previous()) 

     } else if(!identical(previous(),input$hotable1)){ 

    mytable <- as.data.frame(hot_to_r(input$hotable1)) 

    x <- input$Total*(input$mySlider/100) 


     mytable$QTY <- x*mytable$col4 
     mytable 
    } 
    }) 

    output$hotable1 <- renderRHandsontable({ 


         if(is.null(MyChanges())) return() 
         df_ <- MyChanges() 

         rhandsontable(df_, readOnly = FALSE, rowHeaders= NULL, useTypes= TRUE) %>% 
         hot_table(highlightCol = TRUE, highlightRow = TRUE) 
        }) 

}) 

shinyApp(ui,server) 

In diesem Fall werden die Widgets und Formeln arbeiten, aber nicht die Schalt ...

+0

I don‘ t verstehst du ganz, was du mit "switching" meinst? –

+0

Ich habe zwei Datenframes im obigen Beispiel, die ich versuche, zwischen den RadioButtons ('C1', 'C2') im UI-Teil zu wechseln. Der Trick, den ich hier versuche, ist, zwischen RepData1 und RepData2 umzuschalten, während ich mit dem Schieberegler und dem gesamten Eingang verbunden bin ... – TesterL3X18999

Antwort

0

Versuchen Sie folgendes:

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

    previous <- reactive({ 
    if(input$Buttn10 == "C1") { 
     return(RepData1) 
    } 
    if(input$Buttn10 == "C2"){ 
     return(RepData2) 
    } 

    }) 

    MyChanges <- reactive({ 
    mytable <- previous() 

    x <- input$Total*(input$mySlider/100) 


    mytable$QTY <- x*mytable$col4 
    mytable 
    }) 

    output$hotable1 <- renderRHandsontable({ 

    df_ <- MyChanges() 

    rhandsontable(df_, readOnly = FALSE, rowHeaders= NULL, useTypes=TRUE) %>% 
     hot_table(highlightCol = TRUE, highlightRow = TRUE) 
    }) 

}) 
+0

Aus irgendeinem Grund verliere ich aus irgendeinem Grund meine 'QTY' Spalte und die Verbindung zum slider und total input ... – TesterL3X18999

+0

ich ändere mein anwserm, probier das aus. –

+0

Cool! Vielen Dank. Das hat funktioniert. War das Problem, dass ich es zu früh in eine hot_table umgewandelt habe? Sollte das nur im Ausgabeschritt geschehen, wenn ich die Reaktivität nicht beeinträchtigen will? – TesterL3X18999

Verwandte Themen