2011-06-02 13 views
6

He estado recibiendo un error en un script que itera sobre algunos archivos de texto en un directorio, realiza alguna manipulación de datos y escribe en un archivo de forma ESRI usando writeOGR del paquete rgdal en R. I sigue apareciendo un error después de escribir una cierta cantidad de archivos (parece ser de aproximadamente 43-44 archivos individuales, o ~ 14 shapefiles completos, ya que cada shapefile crea una cantidad de archivos).Problema al escribir shapefiles con writeOGR en R

El error es generalmente algo como

GDAL Error 4: Unable to open ./test_8.shp or ./test_8.SHP 

Además, después de la secuencia de comandos se ha estrellado me sale un error como

cannot open file 'file_test.R': Too many open files 

Cuando trato de leer o hacer cualquier cosa con otro archivo.

showConnections 

no muestra ningún archivos abiertos en este momento.

Aquí hay un código que reproduce el problema:

library(gstat) 
library(rgdal) 
data(meuse) 

coordinates(meuse) = ~x + y 

for (i in 1:50){ 
    writeOGR(meuse,'.',paste('test',i,sep="_"),driver="ESRI Shapefile") 
} 

estoy usando R 2.12.2 en OSX. Se produce un error en las versiones de 64 bits y 32 bits.

+0

Probablemente sea mejor abrir y cerrar la conexión para cada lazo. for (x en 1:50) {opencon ... closecon} –

+0

Un shapefile tiene (al menos) un .shp, .dbf y .shx. ¿Debo abrir y cerrar todo esto? Además, en las versiones rgdal anteriores a la 1.8.0, no creo que pueda sobreescribir los archivos existentes (y en un servidor para el que no tengo privilegios de administrador, necesito ejecutar este script en la versión 1.7.1 de rgdal), entonces Es posible que no pueda escribir el shapefile si el archivo ya existe. – blindjesse

Respuesta

5

Su código funcionó para mí en Ubuntu 11.04 y R 2.13, también podría valer la pena probar writeSpatialShape del paquete maptools.

+0

Terminé con el mismo error (R versión 2.13.0, Mac OSX). Supongo que hay un número máximo de conexiones que GDAL puede abrir al escribir en shapefiles de ESRI. Su solución para usar 'writeSpatialShape' superó esta limitación. –

+0

El código funcionó para mí en Windows 7 también. Suena como un error relacionado con OSX. – blindjesse

+0

Estaba teniendo un problema similar con 'writeOGR()': intentaría reescribir un archivo en la misma sesión y sería bloqueado. 'writeSpatialShape()' hace el truco. – metasequoia

Cuestiones relacionadas