有没有一种方法可以混合使用actionButton和selectInput来操纵Shiny App上的rhandsontable?

时间:2019-06-26 13:08:41

标签: shiny reactive rhandsontable action-button selectinput

我的Shiny App中有一个带有XY坐标的rhandsontable,我想用三种的不同方式进行操作:    1)用键盘直接更改值。    2)使用actionButtons(在这种情况下,将值增加或减少0.5)。    3)使用selectInput “复制/粘贴” 现有点。

我想操纵这些坐标,以便获得交互式/反应性绘图。

使用以下代码,图中唯一考虑的修改是actionButton中的修改。

完全不考虑选择输入,而当我尝试datavalue$data <- dta[select$input,]时,就没有考虑actionButton

此外,如果我手动(通过键盘)修改rhandsontable上的值,您会在表输出中看到修改,但是在绘图中也没有考虑到它。

library(shiny)
library(rhandsontable)
library(ggplot2)

dta <- data.frame(x = c(1, 2), y = c(3, -1))
rownames(dta) <- c("a", "b")
New_Point <- data.frame(x = 0, y = 0)



######## UI
ui <- fluidPage(
  fluidRow(
    column(4,
           fluidRow(
             column(12,selectInput("select", "Select row", choices = rownames(dta)))),
           fluidRow(
             column(6,
                    rHandsontableOutput("dbTest", height = "200%")),
             column(6,
                    actionButton("btn1", "<"),
                    actionButton("btn2", ">"),
                    br(), #space breaker
                    actionButton("btn3", "<"),
                    actionButton("btn4", ">")))
           ),
    column(8,plotOutput("plotTest"))
    )
  )




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


  datavalue <- reactiveValues(data=New_Point)

  # Action Buttons
  observeEvent(input$btn1, {
    datavalue$data[1,1] <- datavalue$data[1,1]-0.5})

  observeEvent(input$btn2, {
    datavalue$data[1,1] <- datavalue$data[1,1]+0.5
  })

  observeEvent(input$btn3, {
    datavalue$data[1,2] <- datavalue$data[1,2]-0.5
  })

  observeEvent(input$btn4, {
    datavalue$data[1,2] <- datavalue$data[1,2]+0.5
  })

  # Test table
  output$dbTest <- renderRHandsontable({
    New_Point <- dta[input$select,]
    rhandsontable(t(datavalue$data),
                  colHeaders = "New Point",
                  rowHeaderWidth = 50) %>% 
      hot_col(1, format = "0.0", colWidths = 50)
  })

  #Plot
  output$plotTest <- renderPlot({
    ggplot(dta) +
      aes(x=x, y=y) +
      geom_point(size = 3) +
      theme_bw()+
      xlim(-5, 5) + 
      ylim(-5,5) +
      geom_point(data=datavalue$data, aes(x=x, y=y), size = 5, col = "red")
  })
}

shinyApp(ui, server)

有人考虑到Shiny App中这三种不同的rhandsontable操作方式,可以尝试使用我的参考书,也可以通过任何解决方案生成图吗?

0 个答案:

没有答案