Puede hacerlo utilizando los paquetes sp
y maptools
. Hay funciones prácticas writePointsShape()
y writeLinesShape()
en maptools
que escribirán en el formato de archivo de forma de ESRI.
Antes de hacer esto, es necesario extraer la información lat/lon de los vértices del gráfico y ponerla en un objeto SpatialPoints
para los vértices, y un objeto SpatialLinesDataFrame
para los bordes.
Este código produce un muy simple igraph
objeto para el siguiente ejemplo:
library(igraph)
## Produce a ring graph with 4 vertices
x <- graph.ring(4)
## Add lat/lon information to vertices
V(x)$lat <- c(50, 50, 51, 51)
V(x)$lon <- c(40, 41, 41, 40)
Ahora, crear el objeto SpatialPoints
para los vértices
library(sp)
library(maptools)
## Create SpatialPoints object containing coordinates
xV <- SpatialPoints(cbind(V(x)$lon, V(x)$lat))
## Write vertices to a shapefile
writePointsShape(xV, fn="vertices")
último, crear el objeto SpatialLinesDataFrame
para los bordes. Esto es un poco desordenado, pero todavía tengo que encontrar una forma rápida de producir un objeto SpatialLines con coordenadas dadas.
## Create SpatialLinesDataFrame object describing edges
edges <- get.edgelist(x)+1
edges <- cbind(edgeNum=1:nrow(edges), v1=edges[,1], v2=edges[,2])
xE <- apply(edges, 1, function(i) Lines(Line(cbind(c(V(x)$lon[i["v1"]], V(x)$lon[i["v2"]]), c(V(x)$lat[i["v1"]], V(x)$lat[i["v2"]]))), ID=as.character(i["edgeNum"])))
xE <- SpatialLinesDataFrame(SpatialLines(xE), data=data.frame(edgeNum=1:nrow(edges)))
## Write edges to a shapefile
writeLinesShape(xE, fn="edges")
Muchas gracias. Voy a intentar eso ahora. – Seen
Transpuso Lat y Lon. Corregido ahora. Repita después de mí: (Lon = X, Lat = Y) :) – digitalmaps
Error en validityMethod (objeto): los coords no pueden contener valores perdidos. Así es como obtengo la función "aplicar" para la línea. ¿Tiene alguna sugerencia de que puedo verificar los valores? Lo siento, soy una nueva mano en R ... – Seen