Способы сделать блеск быстрее при использовании случайных и реактивных значений - PullRequest
0 голосов
/ 13 октября 2018

У моего блестящего кода есть удивительный текст, который пользователь может редактировать.Это приводит к обновлению самых правых столбцов на основе пользовательской функции.код также выводит значения из таблицы на два ggplots, которые также обновляются при изменении значений таблицы.Все это работает за исключением того, что есть забавное двойное обновление, которое делает Shiny медленным ;моя таблица не большая, около 50 на 23 столбца, где на графиках используются только 4 столбца, но около 12 столбцов входят в мою пользовательскую функцию.

Есть ли способ сделать сияние быстрее, используя наблюдение(), responsetiveValues ​​или другие связанные функции?

Я новичок в реактивных выражениях, и я читал, что возможно было бы сделать приложение быстрее, правильно кэшируя данные.

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)
...