--- date: 2020-06-13 tags: lenguaje r, bioinformática, diagrama de Venn category: tecnología author: Edward Villegas-Pulgarin language: es --- # Determinar intersecciones en el diagrama de Venn con R Esta entrada es mi primera entrada asociada al lenguaje R y sobre mi primer paquete en R: [`venn.compute`](https://github.com/cosmoscalibur/venn.compute). Este paquete surge por un caso de uso particular que estaba ayudando a automatizar de determinar los elementos (no solo el dibujo ni la cantidad) de las intersecciones y específicos de un diagrama de Venn, útil en bioinformática para comparación de genes. Así, esta entrada es tipo tutorial de como usar el paquete que hice para este fin. ## Caso de uso Se posee la información de múltiples conjuntos en archivos de texto plano, en donde cada elemento es una línea de dicho archivo. No siempre es la misma cantidad de conjuntos y se desea poder generar archivos de salida para revisar las intersecciones y elementos específicos. Usualmente, puede importar el gráfico por lo cual se puede incluir. Como ejemplo se usarán 3 archivos ubicados en una carpeta `tests`, con los nombres `primes.txt`, `even.txt` y `fibo.txt` con el contenido de los números primos, pares y de Fibonacci hasta el 20. ## Instalación Por el momento, se debe instalar el paquete a partir de GitHub, por lo cual debes usar la utilidad incluida en `devtools` en lugar del mecanismo de instalación habitual (ya está sometido el paquete, así que en el futura podría usarse). Si usas Anaconda en Linux, probablemente debas configurar la ruta del ejecutable de `tar` (al instalar desde GitHub genera un error indicando que no encuentra el ejecuta `sh: 1: /bin/gtar: not found`). ```R Sys.setenv(TAR = "/bin/tar") # Si es Anaconda Linux ``` Ahora sí, haremos la instalación desde el repositorio de GitHub del paquete (se indica `usuario/paquete`). ```R devtools::install_github("cosmoscalibur/venn.compute") ``` Downloading GitHub repo cosmoscalibur/venn.compute@master formatR (1.6 -> 1.7) [CRAN] Installing 1 packages: formatR Updating HTML index of packages in '.Library' Making 'packages.html' ... done ✔ checking for file ‘/tmp/RtmpT7UVx3/remotes61d65fec5ae1/cosmoscalibur-venn.compute-6f4fb43/DESCRIPTION’ ... ─ preparing ‘venn.compute’: ✔ checking DESCRIPTION meta-information ─ checking for LF line-endings in source and make files and shell scripts ─ checking for empty or unneeded directories ─ building ‘venn.compute_1.1.0.tar.gz’ ## Ejecución Lo primero que debemos hacer es cargar el paquete. ```R library(venn.compute) ``` ### Lectura de archivos Para leer los archivos, he creado una función específica para la lectura, de manera que el contenido de los archivos sea cargado a arreglos de caracteres y estos se anexan a una lista. Adicional, se asocian los nombres personalizados a los conjuntos de elementos de cada archivo. Las rutas a los archivos y los nombres que asociaremos, se agregan como arreglos de caracteres, y tiene soporte genérico para una cantidad diferente a la ilustrada. ```R sets <- read.lists_from_files(c(file.path("tests", "primes.txt"), file.path("tests", "even.txt"), file.path("tests", "fibo.txt")), c("primes", "even", "fibo")) print(sets) ``` $primes [1] "1" "2" "3" "5" "7" "11" "13" "17" $even [1] "0" "2" "4" "6" "8" "10" "12" "14" "16" "18" $fibo [1] "1" "2" "3" "5" "8" "13" Como observamos, se han creado las listas nombradas con los contenidos de los archivos. Estos nombres son los usados para crear los archivos, asociar las listas nombradas de las intersecciones y el gráfico (usa un paquete externo donde el ingreso de esta manera permite pasarlo como única variable). ### Determinar elementos Ya con los conjuntos cargados en la lista, podemos determinar los elementos que van en cada área del diagrama de Venn (intersecciones y específicos). ```R venn.compute_specific(sets) ```