¿ Cómo crear paquetes de R ?

Objetivos

Queremos hacer un paquete (i.e. un conjunto de funciones, datos y documentación de R). El paquete debe ser accesible desde internet de la manera más eficiente posible. Se deben seguir las mejores prácticas de la comunidad, incluir los datos a utilizar, ejemplos , etc

Crear un repositorio Git

Lo primero que tenemos que hacer es crear un repositorio GIT. Hay muchos tutoriales ahí afuera para hacer repositorios. Usa el google.

Supongamos pues, que tenemos uno ya hecho. En mi caso, hice un fork de CARBayes (Duncan Lee) y lo puse en mi repositorio público en Github (https://github.com/molgor/CARBayeSDM.git )

Fijensé como esta la estructura de los archivos.

Paquetes necesarios

install.packages("devtools")
library("devtools")
install.packages("roxygen2")
library("roxygen2")

 

Devtools permite instalar paquetes desde repositorios GIT además de otras utilidades para desarrolladores. Roxygen es una librería crear documentación en R. Su nombre viene de la popular applicación Doxygen para crear documentación.

Inicializar la estructura

Podemos utilizar la función ‘create_package(Nombre_de_paquete) ‘ para crear una estructura de directorios.

setwd('ruta del repositorio')
create_package('mi_paquete')

La estructura quedará de la siguiente manera :

  • R (Carpeta donde se guardará el código de R)
  • man (Donde se guardará la documentación)
  • DESCRIPTION (archivo Readme que contiene la descripción del paquete)
  • NAMESPACE (configuración de las funciones definidas por el paquete)

 

Escribir función con documentación

Vamos a escribir las funciones dentro de la carpeta R. Aquí definiremos las funciones pero primero pondremos la documentación (descripción de cada función al comienzo del archivo). Ve el siguiente ejemplo. El archivo se llama: *MyTestingFunction.R* [ Disculpa por escribirla en inglés, ya quedará en ustedes traducirla] .

#' An example for writing a function in R using Roxygen (e.g. a variant of Doxygen for
#' R) 
#' Well, this function is for writing stuff, I suppose that I need to write here the
#' pourpose of the function.
#' @param something Something to put
#' @keywords Tests, examples, many
#' @export
#' @examples
#' test_function()

test_function  <- function(something=TRUE) {
  if(something==TRUE) {
   c = 'Something is True'
  return(c)
  }
  else {
    c = 'Something is different from TRUE'
    return(c)
  }
}

Compilar documentación e instalar

Para compilar la documentación basta con ejecutar:

document()

 

Para instalar todo:

setwd("..")
install("mi_paquete")

Usando repositorio en Github

Si se opta por esta opción se puede instalar directamente usando la función:

install_github('mi_paquete','usuario_de_github')

Listo! A desarrollar

Ahora podemos desarrollar paquetes de R, subirlos a github y compartirlos con todos nuestros colegas.

Colabora y no seas culer@!
Este post está basado en el ejemplo de Hillary Parker .

Cargar datos en R

… y ajustar un modelo GLM

Introducción

Este post quiere ser un pequeño acordeon (chuleta) de ciertas funciones y paquetes en R para hacer análisis espaciales.
Si, he aceptado que hay un montón de cosas que valen la pena en R y este es mi intento de volverme a acercar a ese lenguaje que sigo considerado obscuro y sucio. Sin embargo, a la comunidad de estadística le gusta. Supongo que por razones históricas y la típica ley de potencia de Winners take all… Yo

Supuestos

  • Datos extraidos de Biospytial y guardados en CSV en el backend de Redis.
    • > (Actualizado. el objeto en redis es un pickle de un DataFrame de Pandas. No he encontrado forma trivial de portar estos objetos en R. Se utiliza entonces un formato CSV (estandar) guardado con antelación)
  • Command-line. No hay interfáz gráfica

Preparación

  • Seleccionar un repositorio CRAN (alguno de los dos)
    chooseCRANmirror(graphics=FALSE)
    options(repos='http://cran.rstudio.com/')
  • Cargar driver de Redis
    • library('rredis')
  • Conectar a BD redis
  • redisConnect(host='redis',password='biospytial.')
     
  • Read data from CSV
    TDF = read.csv("/outputs/training_data_sample_puebla_p2_abies_pinophyta.csv")
    PDF = read.csv('/outputs/presence_only_models/predictors/dataset100x100-puebla-p2/0-pred.csv')
     

Definir el modelo

$$ Y(x) = Dist.Road + Pop.denst + vegtype$$ Se procederá a ajustar un modelo GLM con supuestos de independencia en los residuales (i.e. estandard GLM). formula = ‘Pinophyta ~ Dist.to.road_m + Population_m + tipos’ mod_sig = glm(formula, data=TDF, family=binomial()) summary(mod_sig) confint(mod_sig)