Для цикла, который тратит много памяти, заменить на mapply? - PullRequest
0 голосов
/ 25 июня 2018

У меня очень большой набор данных, который я хочу разместить в листовке, но я использую цикл for, который занимает очень много времени.Мне сказали, что было бы быстрее использовать функцию mapply, но я не знаю, как преобразовать цикл for в mapply.

Моя последняя цель - ускорить мой код.

Посмотрите, у меня есть этот пример набора данных и результата карты:

#import libraries:

library(data.table)
library(leaflet) 

#dataset:


lat<-c(40.41766, 40.43305 ,40.43687, 40.39563, 40.39088, 40.39215, 40.39458, 40.40451, 40.40627, 40.40864)

lng<-c(-3.701328, -3.709352, -3.708531, -3.736556, -3.734796, -3.741867, -3.741222, -3.705399, -3.710980, -3.710310)

colors<-c("#3D00FFFF","#52FF00FF","#3D00FFFF","#0052FFFF","#52FF00FF","#52FF00FF","#52FF00FF","#0052FFFF","#3D00FFFF","#0052FFFF")

name<-c("Rafa","Luis","Rafa","Belen","Luis","Luis","Luis","Belen","Rafa","Belen")

hour_range<-c("Sleeping_Hours","Morning_rush_hours","Morning_Working_Hours","Sleeping_Hours","Morning_rush_hours","Morning_Working_Hours","Sleeping_Hours","Morning_rush_hours","Morning_Working_Hours","Morning_Working_Hours")

data<- data.table(name,lat,lng,hour_range,colors)

#As you can see the data.table has 5 variables (name, lat, lng, hour_range,colors)

#My objective is to plot in leaflet a line of every person (name)in a 
#different color and also with 1 layer for each hour_range).

#I was able to do so with a for loop:

map<-  leaflet(data)
map<- addTiles(map)

for( name in unique(data$name)){ 
  map<- addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Sleeping_Hours",], group= "Sleeping_Hours",color=~colors)
  map<- addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Morning_rush_hours",], group= "Morning_rush_hours",color=~colors)
  map<- addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Morning_Working_Hours",], group= "Morning_Working_Hours",color=~colors)


}
map<-addLayersControl(map=map,
                             overlayGroups=c("Sleeping_Hours","Morning_rush_hours","Morning_Working_Hours"),
                             options=layersControlOptions(collapsed=FALSE)

map

Эта карта работает нормально, потому чтоэто небольшой набор данных, но с более длинным набором данных не работает, как я могу заставить его работать быстрее?как я могу применить здесь маппли вместо цикла?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...