J'utilise le package gdistance pour une analyse au moindre coût. L'idée est de déterminer le chemin d'un point de destination à une source sur une grille de coûts (raster) avec des valeurs de coût définies; le chemin évite ainsi les pixels avec des coûts élevés et préfère les pixels avec des valeurs de coût bas. Le code qui fonctionne pour moi avec mes données:Fonction loop ou sapply pour l'analyse multiple à moindre coût dans R
Costpath<-shortestPath(CostTrans,Cherangfirstloc.utm[1,],Cherangfirstloc.utm[132,], output="SpatialLines")
Ainsi, CostTrans
constitue la costgrid, Cherangfirstloc.utm[1,]
est le premier lieu/point à partir d'une trame de données Spatialpoints (source) et Cherangfirstloc.utm[132,]
est le dernier lieu/point à partir des Spatialpoints dataframe (destination). La sortie est une ligne reliant les deux emplacements/points.
Cependant, je veux maintenant calculer multiples chemins de coût moins, la source sera ainsi chaque ligne du dataframe, la destination reste le même. Cela signifie que la source suivante serait Cherangfirstloc.utm[2,]
, puis Cherangfirstloc.utm[3,]
et ainsi de suite. Je pense que cela peut être fait avec une boucle for ou peut-être une fonction sapply
. Malheureusement, je ne sais pas comment formuler cela. Pourriez-vous me donner des conseils sur la façon de formuler ce processus itératif?
J'espère que c'est bon, si je pose cette question dans cet endroit. Fondamentalement, je veux juste savoir comment itérer à travers le dataframe. La façon dont fonctionne l'analyse et l'analyse des coûts les plus faibles est donc sans importance.
Voici un code qui peut être utilisé comme données d'échantillon:
library(gdistance)
r <- raster(nrows=6, ncols=7, xmn=0, xmx=7, ymn=0, ymx=6, crs="+proj=utm
+units=m")
r[] <- c(2, 2, 1, 1, 5, 5, 5, #creates costgrid
2, 2, 8, 8, 5, 2, 1,
7, 1, 1, 8, 2, 2, 2,
8, 7, 8, 8, 8, 8, 5,
8, 8, 1, 1, 5, 3, 9,
8, 1, 1, 2, 5, 3, 9)
T <- transition(r, function(x) 1/mean(x), 8) #creates transition layer of costgrid
T <- geoCorrection(T) #correction
c1 <- c(5.5,1.5) #first source point
c2 <- c(5.5,4) #second source point
c3 <- c(1.5,5.5) #destination
sPath2 <- shortestPath(T, c1, c3, output="SpatialLines") # creates the least cost path
Malheureusement, je ne savais pas comment inclure c1, c2 et c3 dans un dataframe Spatialpoints de sorte que l'on peut itérer. J'espère que cela aide encore.
J'aimerais que vous me donniez des indices à ce sujet. Merci pour vos efforts!
Super, cela fonctionne parfaitement. Merci beaucoup pour votre aide! –