R - Una Guía de Bolsillo

Guía con paquetes útiles de R, tasks, funciones, códigos ejemplo, y demás utensilios de primera mano a la hora de trabajar con R

knitr::opts_chunk$set(echo=TRUE, eval=FALSE) # set multiple global options 

PAQUETES DE R

Bookmarkr:

Extraño paquete de Jonathan de RStudio (jmcphers - https://github.com/jmcphers/bookmarkr); extraño aunque simple. No deja de ser el añadir un Addin a RStudio por el que puedes marcar una línea de código con un bookmark y un pequeño comentario. Luego puedes ir a la pestaña de “Markers” y revisitarlos. Lo encuentro útil para scripts que requieren revisiones largas y es conveniente no olvidarse de ciertos detalles a resolver sin por ello tener que llenar el script de comentarios. Enjoy.

# https://github.com/jmcphers/bookmarkr

install.packages("devtools")
library(devtools)
devtools::install_github("jmcphers/bookmarkr")
library(bookmarkr)

UNIX:

Para aumentar la memoria disponible por R en sistemas operativos Linux:

install.packages("unix")
library(unix)
rlimit_as(1e12)  #increases to ~12GB
rlimit_all()

OBJETIVOS Y USOS EN R

Obtener Datos del PC y Sesión:

Esta es una task que se puede hacer con R a veces de forma más fácil y rápida que visualmente buscando en el panel de control del PC. Al ser una tarea, más que una descripción de un paquete, en realidad se pueden utilizar muchos packs. y muchas funciones. Según vaya encontrando más, podré ir añadiendo; de momento las que me parecen útiles son las que aparecen a continuación. Con ellas se puede obtener: datos de la CPU (e.g., “Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz”), Nº de núcleos, Nº de núcleos reales, la RAM, información de la sesión de trabajo, versión de R, y otros detalles del sistema en cuestión sobre el que se está trabajando.

install.packages(c("doParallel","benchmarkme"))
library(doParallel); library(benchmarkme)

  ## Return the machine CPU
  cat("Machine:     "); print(get_cpu()$model_name)
  
  ## Return number of true cores
  cat("Num cores:   "); print(detectCores(logical = FALSE))
  
  ## Return number of threads
  cat("Num threads: "); print(detectCores(logical = TRUE))
  
  ## Return the machine RAM
  cat("RAM:         "); print(get_ram()); cat("\n")

  ## Return platform info
  get_platform_info()
  
  ## Return R version
  get_r_version()
  
  ## Return System Details
  get_sys_details()

Obtener una muestra aleatoria de filas de un data.frame

df = data.frame(matrix(rnorm(20), nrow=20))
df[sample(nrow(df), 15), ]

Dibujar un cerebro y diferentes zonas resaltadas

Preámbulo:

# install.packages(c("rgl","misc3d","neurobase"))
library(rgl);library(misc3d);library(neurobase)

if (!requireNamespace("aal")) {
  devtools::install_github("muschellij2/aal")
} else {
  library(aal)
}

if (!requireNamespace("MNITemplate")) {
  devtools::install_github("jfortin1/MNITemplate")
} else {
  library(MNITemplate)
}

Asignación y ver posibles regiones:

img = aal_image()
template = readMNI(res = "2mm")
cut <- 4500
dtemp <- dim(template)

labs = aal_get_labels()
#View(labs)

Hipocampo (L y R), lóbulo parietal (completo) y lóbulo temporal (completo):

# Pick the region of the brain you would like to highlight

hippocampusL = labs$index[grep("Hippocampus_L", labs$name)]
hippocampusR = labs$index[grep("Hippocampus_R", labs$name)]

Parietal_Inf_L = labs$index[grep("Parietal_Inf_L", labs$name)]
Parietal_Inf_R = labs$index[grep("Parietal_Inf_R", labs$name)]
Parietal_Sup_L = labs$index[grep("Parietal_Sup_L", labs$name)]
Parietal_Sup_R = labs$index[grep("Parietal_Sup_R", labs$name)]

Temporal_Inf_L = labs$index[grep("Temporal_Inf_L", labs$name)]
Temporal_Inf_R = labs$index[grep("Temporal_Inf_R", labs$name)]
Temporal_Mid_L = labs$index[grep("Temporal_Mid_L", labs$name)]
Temporal_Mid_R = labs$index[grep("Temporal_Mid_R", labs$name)]
Temporal_Pole_Mid_L = labs$index[grep("Temporal_Pole_Mid_L", labs$name)]
Temporal_Pole_Mid_R = labs$index[grep("Temporal_Pole_Mid_R", labs$name)]
Temporal_Pole_Sup_L = labs$index[grep("Temporal_Pole_Sup_L", labs$name)]
Temporal_Pole_Sup_R = labs$index[grep("Temporal_Pole_Sup_R", labs$name)]
Temporal_Sup_L = labs$index[grep("Temporal_Sup_L", labs$name)]
Temporal_Sup_R = labs$index[grep("Temporal_Sup_R", labs$name)]


mask = remake_img(vec = img %in% hippocampusL, img = img)
mask2 = remake_img(vec = img %in% hippocampusR, img = img)
mask3 = remake_img(vec = img %in% Parietal_Inf_L, img = img)
mask4 = remake_img(vec = img %in% Parietal_Inf_R, img = img)
mask5 = remake_img(vec = img %in% Parietal_Sup_L, img = img)
mask6 = remake_img(vec = img %in% Parietal_Sup_R, img = img)
mask7 = remake_img(vec = img %in% Temporal_Inf_L, img = img)
mask8 = remake_img(vec = img %in% Temporal_Inf_R, img = img)
mask9 = remake_img(vec = img %in% Temporal_Mid_L, img = img)
mask10 = remake_img(vec = img %in% Temporal_Mid_R, img = img)
mask11 = remake_img(vec = img %in% Temporal_Pole_Mid_L, img = img)
mask12 = remake_img(vec = img %in% Temporal_Pole_Mid_R, img = img)
mask13 = remake_img(vec = img %in% Temporal_Pole_Sup_L, img = img)
mask14 = remake_img(vec = img %in% Temporal_Pole_Sup_R, img = img)
mask15 = remake_img(vec = img %in% Temporal_Sup_L, img = img)
mask16 = remake_img(vec = img %in% Temporal_Sup_R, img = img)

Representación gráfica per se:

### this would be the ``activation'' or surface you want to render 
contour3d(template, x=1:dtemp[1], y=1:dtemp[2], z=1:dtemp[3], level = cut, alpha = 0.4, draw = TRUE)
contour3d(mask, level = c(0.5), alpha = c(0.7), add = TRUE, color=c("red") )
contour3d(mask2, level = c(0.5), alpha = c(0.7), add = TRUE, color=c("red") )
contour3d(mask3, level = c(0.5), alpha = c(0.5), add = TRUE, color=c("green") )
contour3d(mask4, level = c(0.5), alpha = c(0.5), add = TRUE, color=c("green") )
contour3d(mask5, level = c(0.5), alpha = c(0.5), add = TRUE, color=c("green") )
contour3d(mask6, level = c(0.5), alpha = c(0.5), add = TRUE, color=c("green") )
contour3d(mask7, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask8, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask9, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask10, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask11, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask12, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask13, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask14, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask15, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )
contour3d(mask16, level = c(0.5), alpha = c(0.3), add = TRUE, color=c("blue") )

Añadir texto:

### add text
text3d(x=dtemp[1]/2, y=dtemp[2]/2, z = dtemp[3]*0.98, text="Top")
text3d(x=-0.98, y=dtemp[2]/2, z = dtemp[3]/2, text="Left")
rglwidget()

FUNCIONES DE GRAN UTILIDAD

memory.size()

Esta función es útil para trabajar en windows y asignar memoria a R. Con el código aquí incorporado lo que se hace es incrementar los límites de memoria asignados a R hasta el máximo. Es útil para optimizar algún código que roza la capacidad máxima del PC.

memory.size(max = TRUE)