R

Ejecucción de código de Python desde R

En este tutorial aprenderemos a crear y ejecutar un código python desde R; para ello será necesario tener instalado R (RStudio) y contar con alguna versión de ArcGIS superior a la versión 10, ello pues se hará uso de herramientas de este SIG.

El objetivo es convertir 12 archivos raster tipo “float” a “integer”, y a su vez convertir de archivos “ascii” a “tif”.

Para este ejercicio usaremos archivos raster tipo “ascii”, los cuales los podra descargar del siguiente enlace https://goo.gl/VyfQyu

1. Cargaremos las librerias a utilizar.

# Load libraries
require(raster)
require(rgdal)
require(tidyverse)
require(rasterVis)
require(rgeos)
require(gtools)

En el caso que usted no tenga instalado las librerias, podría instalarlas como se muestra a continuación:

install.packages('raster')
install.packages('rgdal')
install.packages('tidyverse')

2. Establecer el directorio de trabajo, este será la carpeta en la que se encuentran los datos a utilizar en este ejercicio.***

setwd('D:/directorio')

3. Ahora crearemos la función con la cual se escribirá el código de python desde R.

createCode <- function(code, inp, lyr, out){
  
  sink(code)
  cat('import arcpy', fill = T)
  cat('from arcpy import env', fill = T)
  cat('from arcpy.sa import *', fill = T)
  cat(paste0('env.workspace = r', '"', inp, '"'), fill = T)
  cat(paste0('inRaster = ', '"', lyr, '"'), fill = T)
  cat('arcpy.CheckOutExtension("Spatial")', fill = T)
  cat('outInt = Int(inRaster)', fill = T)
  cat(paste0('outInt.save(', '"', out, unlist(strsplit(lyr, '.asc')), '.tif', '"', ')'), fill = T)
  sink()
  
  shell(code)# system2(paste0('python ', code));# shell.exec(code)
  
  print('Done...')
  
}

4. Una vez creada la función procedemos a ejecutar una prueba de la función, son 4 parámetros, ‘code’ corresponde a la ruta del archivo python a crear, ‘inp’ es la ruta donde se encuentran el archivo a convertir a entero, ‘lyr’ es el nombre del raster a convertir, y ‘out’ corresponde a la ruta donde guardaremos el archivo resultado.

createCode(code = 'D:/Blogs/_blogger/_pythonR/int.py',
           inp = 'D:/Blogs/_blogger/_pythonR/_raster/_asc',
           lyr = 'radsol_1.asc',
           out = 'D:/Blogs/_blogger/_pythonR/_raster/_tif/')

5. Ahora realizamos un ciclo para así aplicar la función a los 12 raster de radiación solar.

6. Luego se abrirá una ventana de CMD, es aquí donde se está ejecutándo el código R, podemos ahora cargar los archivos resultantes del proceso y cargarlos en R. Para ello se hace lo siguiente:

fls <- list.files('_raster/_tif', full.names = T, pattern = '.tif$') 
fls <- mixedsort(fls)
st <- stack(fls)

6. Ahora procedemos realizar un mapa de los 12 meses del año con la función levelplot del paquete rastervis.

names(st) <- month.abb
map <- levelplot(st)
# trellis.device(device = 'png', file = paste0('map.png'), width = 1000, heigh = 600)
print(map)

# dev.off()

Comentarios

Entradas populares de este blog

Extracción por mascara en R

Convertir una tabla a shape en R

¿Cómo descargar información de GBIF usando R?