2014-11-04 85 views
1

我尝试构建一个闪亮的应用程序。它实际上是有效的。基本上我有一个数据集(20'000行),我用滑块和Groupcheckboxes更改,然后使用ggmap绘图到一个地图。但它非常慢(需要10到20秒左右的改变)。有没有可能使应用程序运行得更快。它是否与子集函数有关?或者是因为ggmap情节?我添加了我的通用服务器代码。R中缓慢闪亮的应用程序

会感激各种帮助。

shinyServer(

function(input, output) { 

data_subset <- reactive({ 

    subset(pladata_no_na_loc, (pladata_no_na_loc$FUEL_FACTOR == input$fueltype[1] | 
      pladata_no_na_loc$FUEL_FACTOR == input$fueltype[2] | 
      pladata_no_na_loc$FUEL_FACTOR == input$fueltype[3] | 
      pladata_no_na_loc$FUEL_FACTOR == input$fueltype[4] | 
      pladata_no_na_loc$FUEL_FACTOR == input$fueltype[5] | 
      pladata_no_na_loc$FUEL_FACTOR == input$fueltype[6] | 
      pladata_no_na_loc$FUEL_FACTOR == input$fueltype[7]) & 

     ((pladata_no_na_loc$MW >= input$slider_mw[1]) & (pladata_no_na_loc$MW <   
      input$slider_mw[2])) & 

     ((pladata_no_na_loc$MIN_YEAR >= input$slider_year[1]) & (pladata_no_na_loc$MIN_YEAR < 
     input$slider_year[2])), 
     select = c("enipedia_latitude", "enipedia_longitude", "MW_FACTOR", "MW", "FUEL_FACTOR"), 
     drop = FALSE) 


     }) 


output$map <- renderPlot({ 



    mapPoints <- ggmap(map) + 
       geom_point(data = data_subset(), drop = FALSE , 
      aes(x = enipedia_longitude, y = enipedia_latitude, size = MW, color = FUEL_FACTOR), 
      alpha = .5) 

      print(mapPoints) 

     }, height = 900, width = 1000) 

    } 
) 
+0

1)最好的,如果你用'闪亮'标记你的问题。 2)我认为你的结构化你的应用程序的方式,它会重新评估整个数据集,每次你改变一些东西。 3)尽量不要使用子集,如果你可以,尽可能使用[] http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – 2014-11-04 16:10:02

+0

我认为你可以使用dplyr来解决这个问题,它可以真正让你的计算更快。 – 2017-03-19 18:38:51

回答

0

我不能完全肯定,但这里是我的假设。它是你正在模拟每次通话的数据集/子集。尝试添加一个提交按钮,以确保所有命令一次发生。每次移动滑块时,都会重新渲染代码,从而重新运行脚本。所以,如果你移动它3次,它基本上是再次加载它。 我发现它可能是因为它没有给你的计算机上很大的空间。出于某种原因,我的一些应用程序在服务器上的性能比我的笔记本电脑要好很多。