Ich arbeite mit einem großen Datensatz und ich versuche, Geospatial-Analyse auf einem lokalen Computer mit 8 GB RAM auszuführen. Es sieht so aus, als ob ich die Ressourcen meiner Maschine überschritten habe und ich frage mich, ob ich mein Modell optimieren kann, damit ich es auf meinem Rechner ausführen kann.Optimierungsabstand distHaversine Modell für große df in R
area <- data.frame(area = c('Baker Street','Bank'),
lat = c(51.522236,51.5134047),
lng = c(-0.157080, -0.08905843),
radius = c(100,2000)
)
stop <- data.frame(station = c('Angel','Barbican','Barons Court','Bayswater'),
lat = c(51.53253,51.520865,51.490281,51.51224),
lng = c(-0.10579,-0.097758,-0.214340,-0.187569),
postcode = c('EC1V','EC1A', 'W14', 'W2'))
library(geosphere)
datNew = lapply(1:nrow(area), function(i) {
df = stop
df$dist = distHaversine(df[,c("lng", "lat")],
area[rep(i,nrow(df)), c('lng','lat')])
df$in_circle = ifelse(df$dist <= area[i, "radius"], "Yes", "No")
df$circle_id = area[i, "area"]
df
})
datNew = do.call(rbind, datNew)
require(dplyr)
datNew <- datNew %>%
group_by(station) %>%
slice(which.min(dist))
Ist es möglich, den Abstand zu berechnen und dann den Mindestabstand in station
von station
finden, so dass ich mit Multiplikation der die Anzahl der stations
nach Anzahl der area
am Ende nicht? Oder gibt es eine andere Lösung, die es mir erlaubt, dies auf eine weniger ressourcenintensive Art und Weise auszuführen oder die Jobs so aufzuteilen, dass sie in den Arbeitsspeicher passen?
Das Problem, das ich habe, ist, dass das 'df', das die Funktion erstellt, zu groß ist, um dann die Gruppierung zu machen, also würde ich gerne etwas tun, wo ich die Entfernung zu jedem Punkt berechnen und die minimale Entfernung Punkt für Punkt finden würde Erstelle nicht das große 'df', das ich später nicht verarbeiten kann, wenn das Sinn macht. Oder gibt es eine noch bessere Lösung, an die ich nicht gedacht habe? – Davis
Arbeitete wie ein Charme. Danke für Ihre Hilfe! – Davis