¿ 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 .

Solucionar: IO Error ‘[Errno 28] No space left on device’

Este error es frecuente al utilizar librerías de Python de multiprocesamiento ‘joblib’ con una cantidad considerable de datos.

Diagnostico

El problema es que la memoria compartida ‘/dev/shm’(usualmente menor que la memoria RAM) se satura.

Para corregirlo tendremos que cambiar la variable de entorno: JOBLIB_TEMP_FOLDER a un directorio que con mayor capacidad. (e.g. /tmp)

Esto puede hacerse directamente en iPython o Jupyter con:

%env JOBLIB_TEMP_FOLDER=/tmp

O agregandola en el shell con:

$ export JOBLIB_TEMP_FOLDER=/tmp

[Tutorial R] Modelos CAR generalizados

En este post veremos como ajustar *Conditional Autoregressive Models* (Una variante de Gaussian Markov Random Fields) a un conjunto de datos generados por Biospytial.

Para cargar los datos vaya a https://ecomorphisms.holobio.me/2019/01/28/tutorial-para-analisis-de-datos-espaciales-en-r/ 

Requisitos

Instalar paquete CarBayes

install.packages(‘CARBayes’)

The conditional autologistic model (Besag, et. al 1991) has the following specification (Lee, 2013).

$$k \in {1…K}$$ Neighbours

$$ Y_k \sim Binomial(n_k,\theta_k) $$

$$ ln\left(\frac{\theta_k}{1-\theta_k}\right)= x_k^t \beta + O_k + \psi_k$$

$$\beta \sim N(\mu_\beta,\Sigma_\beta)$$

$$ \psi_k = \phi_k + \theta_k $$

$$ \phi_k | \phi_{-k}, \mathbb{W},\tau^2 \sim N \left( \frac{\sum_{i=1}^{K} w_{ki} \phi_i}{\sum_{i=1}^{K}w_{ki}}, \frac{\tau^2}{\sum_{i=1}^{K}w_{ki}}\right) $$

$$\theta_k \sim N\left(0, \sigma^2\right)$$

$$\tau^2, \sigma^2 \sim^{iid} Inv.Gamma(a,b) $$

Referencias