Rhandsontable в Блестящий - PullRequest
       62

Rhandsontable в Блестящий

1 голос
/ 27 марта 2020

РЕДАКТИРОВАТЬ: я включил Наблюдение за событием () в server.R, как описано в этом видео: https://www.youtube.com/watch?v=BzE1JmC0F6Q. Работает частично. Когда я обновляю A и B, график обновляется, но столбцы C, D и E дают неправильные значения, а количество строк продолжает расти. Любая помощь приветствуется.

У меня есть 2 столбца A и B. У пользователя есть возможность перетаскивать значения в A и B, и, следовательно, я использую rhandsontable (Источник: https://jrowen.github.io/rhandsontable/)

У меня есть код ниже для ui.R и server.R. Приложение в основном имеет редактируемую таблицу и вывод ggplotly. Исходя из того, что я ввожу в столбцы A и B, столбцы C, D и E должны обновляться автоматически на основе некоторой формулы, которую я включил в server.R. Когда я запускаю этот код, графики и столбцы не обновляются. Что мне делать?

ui.r

library(shiny)
shinyUI(fluidPage(
  fluidRow(
    column(4, rHandsontableOutput("table")),
    column(4, plotlyOutput("plot"))
    )
  ))

server.R

shinyServer(function(input, output, session) {

  df<- data.frame(A=c(9,15,25,35,40,45,50,55,60,65,75,85,95,105,120,125),
                  B=c(0.5,1.5,3,8,16,23,30,36,43,58,64,78,92,98,99,100))

  for(i in 2:(nrow(df))) 
  {
    df[i,3]<-df[i-1,1]+(df[i,1]-df[i-1,1])/2
    df[i,4]<-(df[i,2]-df[i-1,2])
    df[i,5]<- scientific(df[i,4]/df[i,3]/100,digits=3)
  }

  datavalues<-reactiveValues(data=df)

 output$table <- renderRHandsontable({

    mytab <- rhandsontable(datavalues$data, colHeaders=TRUE, rowHeaders=TRUE)
    return(mytab)
  })


  observeEvent(

    input$table$changes$changes,
    {
      xi= input$table$changes$changes[[1]][[1]]
      datavalues$data<-hot_to_r(input$table)

      for(i in 2:(nrow(df)))
      {

        datavalues$data[xi+i,3]<-datavalues$data[i-1,1]+(datavalues$data[i,1]-datavalues$data[i-1,1])/2
        datavalues$data[xi+i,4]<-(datavalues$data[i,2]-datavalues$data[i-1,2])
        datavalues$data[xi+i,5]<- scientific(datavalues$data[i,4]/datavalues$data[i,3]/100,digits=3)
      }

    }
  )




  output$plot<-renderPlotly({

    plt<-
      ggplot(datavalues$data,aes(A,B))+
      geom_point()+
      geom_line()+
      xlab("A")+
      ylab("B")

    p<-config(ggplotly(plt),mathjax = 'cdn')
    p

  })
...