使用rhandsontable和reactiveValues时使光泽更快的方法

使用rhandsontable和reactiveValues时使光泽更快的方法,r,shiny,reactive-programming,rhandsontable,R,Shiny,Reactive Programming,Rhandsontable,我的代码有一个rhandstontable,用户可以编辑它。这将导致基于自定义函数更新最右边的列。代码还将表中的值绘制在两个GGPLOT上,当表值更改时,这些GGPLOT也会更新。所有这些都有效,除了有一个有趣的双重刷新,使闪亮变慢;我的表不大,大约50行乘23列,其中只有4列用于绘图,但大约12列用于自定义函数 有没有一种方法可以使用observe()、reactiveValues或其他相关函数使光泽更快? 我是反应式表达式的新手,我一直在读到,通过正确缓存数据,可以使应用程序更快 libra

我的代码有一个rhandstontable,用户可以编辑它。这将导致基于自定义函数更新最右边的列。代码还将表中的值绘制在两个GGPLOT上,当表值更改时,这些GGPLOT也会更新。所有这些都有效,除了有一个有趣的双重刷新,使闪亮变慢;我的表不大,大约50行乘23列,其中只有4列用于绘图,但大约12列用于自定义函数

有没有一种方法可以使用observe()、reactiveValues或其他相关函数使光泽更快?

我是反应式表达式的新手,我一直在读到,通过正确缓存数据,可以使应用程序更快

library(shiny)
library(rhandsontable)
library(tidyverse)
library(ggthemes)
library(ggrepel)

## Create the dataset
DF <- readRDS("data/DF2.Rds")
numberofrows <- nrow(DF)
# weighting variables
w1 = (c(4,3,1))
w2 = (c(1,1,1,1))
w3 = (c(2,2,1,2,1,1,2))
# Function to calculate scores
ScoresTbl <- function(data, w1, w2, w3){
  Description <- data[,1:9]
  Potential <- crossprod(t(data[,10:12]), w1)/sum(w1)
  Setting <- crossprod(t(data[,13:16]), w2)/sum(w2)
  Risk <- crossprod(t(data[,17:23]),w3)/sum(w3)
  data.frame(data[1:23],Potential,Setting,Risk) %>%
    mutate(
      SOP = rowMeans(data.frame(Potential,Setting,Risk)))
}

ui = fluidPage(
  fluidRow(column(12,
                  rHandsontableOutput('hotable1', width = "100%", height = "25%")#,
                  # actionButton("go", "Plot Update")
  )),
  fluidRow(column(6, plotOutput("plot1")),
           column(6, plotOutput("plot2")))
)
server <- shinyServer(function(input, output) {

  indat <- reactiveValues(data=ScoresTbl(DF,w1, w2, w3))

  observe({
    if(!is.null(input$hotable1))
      indat$data <- hot_to_r(input$hotable1)
  })


  output$hotable1 <- renderRHandsontable({
    rhandsontable(ScoresTbl(indat$data,w1, w2, w3))
  })

  output$plot1 <- renderPlot({
    ggplot(data = indat$data,
           aes(x=Potential,
               y=Setting, label = Project)) +
      geom_point(alpha = 0.5) +
      scale_size(range = c(2,15)) +
      geom_text_repel(colour = "black",size = 2.5) +
      theme_minimal()
  })
  output$plot2 <- renderPlot({
    ggplot(data = indat$data,
           aes(x=Potential,
               y=Setting, label = Project)) +
      geom_point(alpha = 0.5) +
      scale_size(range = c(2,15)) +
      geom_text_repel(colour = "black",size = 2.5) +
      theme_minimal()
  })
})

shinyApp(ui, server)
库(闪亮)
图书馆(rhandsontable)
图书馆(tidyverse)
图书馆(主题)
图书馆(ggrepel)
##创建数据集
DF