0

基本的に、Rhandsontables を操作する外部ウィジェットもある Rhandsontables を切り替えようとしています。また、これらの表には基礎となる式があります。これらのテーブルは本質的に同じであり、ウィジェットと数式はどちらの場合も同じように機能します。それらを切り替えられるようにしたいだけです。以下の例は参考になるかもしれません...

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)

この場合、ウィジェットと数式は機能しますが、切り替えは機能しません...

4

1 に答える 1