---
title: "Sobre qué es R y Bioconductor"  
author: "Guillermo Ayala Gallego"  
date: "`r Sys.Date()`"  
address: Departamento de Estadística e I.O. Universidad de Valencia  
format: 
   revealjs:  
      scrollable: true
      echo: true
      embed-resources: true  
   pdf:
       toc: true
       number-sections: false
       colorlinks: true
---

# Introducción  

## Instalando R

- Primero instalamos [R](http://cran.r-project.org)

- Una vez instalado el R base la instalación de algun paquete adicional

```{r, eval = FALSE}
#| eval: false
install.packages("UsingR")
```

## R 

- [RStudio](http://rstudio.org/}{http://rstudio.org/)
- [emacs](https://www.gnu.org/software/emacs/) con el modo
  Emacs Speaks Statistics [ESS](http://ess.r-project.org/)

- Instalación  

> apt update
> apt install r-base r-base-dev
> apt install libatlas3-base

## Markdown

- [Daring Fireball by John Gruber](https://daringfireball.net/projects/markdown/syntax)
- [Markdown en español](https://markdown.es/)
- [pandoc](https://pandoc.org/)



## Instalando los paquetes de la asignatura  {.scrollable}

- [tami](https://www.uv.es/ayala/docencia/tami/)
- [Instalación](https://www.uv.es/ayala/docencia/tami/instalacion/index.html)
- Instalar la versión más reciente de R: [Ubuntu](https://cran.r-project.org/bin/linux/ubuntu/), 
  [Debian](https://cran.r-project.org/bin/linux/debian/).  
- [Paquetes Debian/Ubuntu]  

> apt update  
> apt upgrade  
> apt install libcurl4 libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev 
           libxt-dev  

# Una sola muestra


## Construyendo y jugando con un vector {.scrollable}

```{r    }
x = c(3,6,3,6,7,1,4,7,4,4)
```

```{r }
class(x)
```

```{r    }
x
```

```{r    }
x[1]
```

```{r    }
3:7
```

```{r    }
x[3:7]
```

```{r    }
c(1,3,5:8)
```

```{r    }
x[c(1,3,5:8)]
```

```{r    }
x[x >= 4]
```

```{r    }
x[x > 6]
```

```{r    }
y = x[x > 4 & x <= 6]
```

## De cómo ordenar un vector

```{r}
sort(x)
```

```{r    }
sort(x,index.return = TRUE)
```

```{r    }
sort(x,decreasing = TRUE,index.return = TRUE)
```

# Varias muestras  

## Matrices  {.scrollable}
```{r    }
x = matrix(rpois(10*4,lambda=5),nrow=10)
```

```{r    }
class(x)
```

```{r    }
colnames(x) = c("sample1","sample2","sample3","sample4")
```

```{r    }
colnames(x) = paste0("sample",1:4)
```

```{r    }
rownames(x) = paste0("gene",1:10) 
```

```{r    }
x
```

La expresión del gen en la fila  6 y en la columna 2.

```{r    }
x[6,2]
```

```{r    }
x["gene6","sample2"]
```

La expresión de los genes en la muestra 2 podemos hacerlo con

```{r    }
x[,2]
```

```{r    }
x[,"sample2"]
```

Borramos el espacio de trabajo.

```{r }
rm(list=ls())
```

## Datos golub {.scrollable}
	
- Los datos son los niveles de expresión de 
  3051 genes (que aparecen en filas) para 38 pacientes de leucemia. 
  De estos pacientes, 27 de ellos tienen leucemia linfoblástica
	  aguda (ALL) y los restantes 11 tienen leucemia mieloide aguda (AML).

```{r ,results = 'hide',message = FALSE}
data(golub,package="multtest")
```

- Hemos leído

```{r }
golub.cl
```
¿Qué tipo de dato tenemos?

```{r }
class(golub.cl)
```
Es más cómodo trabajarlo como **factor**.

```{r }
(golub.fac = factor(golub.cl,levels=0:1,labels=c("ALL","AML")))
```
Veamos un resumen.
```{r }
summary(golub.fac)
```
Gráficamente.

```{r }
pacman::p_load(ggplot2)
df0 = data.frame(golub.fac)
ggplot(df0,aes(x=golub.fac))+geom_bar()
```

- Los datos de expresión están en el objeto **golub**.

```{r }
class(golub)
```

- Veamos las expresiones de los primeros genes

```{r }
head(golub,n=2)
```
- El número de filas corresponde con el número de genes.
```{r }
nrow(golub)
```
- El  número de columnas corresponde con el número de individuos
o muestras. 
```{r }
ncol(golub)
```
O las dimensiones de la matriz.
```{r }
dim(golub)
```

## Un perfil de expresión {.scrollable}

El nivel de expresión del gen que está en la fila 2000 y
ha sido observado en la muestra 3 (columna 3). 
```{r }
golub[2000,3]
```
Y todos los niveles de este gen lo tendremos con

```{r }
golub[2000,]
```
A estos niveles los llamaremos **perfil de expresión**.


```{r }
muestra = 1:ncol(golub) ## En abscisas el número de la muestra
y2000 = golub[2000,] ## En ordenadas su expresión
```

## Dibujando el perfil de expresión {.scrollable}

```{r }
golub[2000,12]
```

```{r }
golub[2000,]
```

```{r }
pacman::p_load(ggplot2)
muestra = 1:ncol(golub) ## En abscisas el número de la muestra
y2000 = golub[2000,] ## En ordenadas su expresión
df = data.frame(muestra = 1:ncol(golub),y2000= golub[2000,])
ggplot(df,aes(x = muestra,y= y2000))+geom_point()
```

```{r }
golub[2000,golub.fac == "ALL"]
```

```{r }
golub[2000,golub.fac == "AML"]
```

```{r }
df = data.frame(muestra = 1:ncol(golub),y2000= golub[2000,],
                tipo = golub.fac)
ggplot(df,aes(x = muestra,y= y2000,colour=tipo))+geom_point() +
    xlab("Número de muestra") + ylab("Gen en fila 2000") +
    facet_grid(tipo~.)
```

```{r }
df = data.frame(muestra = 1:ncol(golub),y2000= golub[2000,],
                tipo = golub.fac)
ggplot(df,aes(x = muestra,y= y2000,colour=tipo))+geom_point() +
    xlab("Número de muestra") + ylab("Gen en fila 2000") +
    facet_grid(tipo~.)
```

```{r }
df = data.frame(muestra = 1:ncol(golub),y2000= golub[2000,],
                tipo = golub.fac)
ggplot(df,aes(x = muestra,y= y2000,colour=tipo))+geom_point() +
    xlab("Número de muestra") + ylab("Gen en fila 2000") +
    facet_grid(. ~ tipo) #Modificamos esta línea
```

## De qué genes estamos hablando {.scrollable}

```{r   }
golub.gnames[2000,]
```

```{r   }
class(golub.gnames)
```

```{r   }
dim(golub.gnames)
```

```{r   }
golub.gnames[2000,2]
```

```{r   }
golub.gnames[2000,3]
```

```{r   }
colnames(golub) = golub.fac
```

## apply

```{r   }
mean(golub[2000,])
```

```{r   }
mean(golub[2000,])
```


-  Seleccionamos las submatrices correspondientes a cada leucemia.

```{r }
golub.ALL = golub[,golub.fac == "ALL"]
golub.AML = golub[,golub.fac == "AML"]
```
- Calculamos la media y la mediana para cada submatriz de golub.

```{r }
ALL.mean = apply(golub[,golub.fac == "ALL"],1,mean)
AML.mean = apply(golub[,golub.fac == "AML"],1,mean)
ALL.median = apply(golub[,golub.fac == "ALL"],1,median)
AML.median = apply(golub[,golub.fac == "AML"],1,median)
```
##  
```{r }
#| layout-ncol: 1
#| fig-cap: 
#|   - "Medias de ALL (abscisas) frente a las medias AML (ordenadas)"

df = data.frame(x0 = ALL.mean, y0 = AML.mean)
p = ggplot(df,aes(x=x0,y=y0))+geom_point()
p + xlab("Medias ALL") + ylab("Medias AML")
```

# Listas 

## Listas {.scrollable}

- Tenemos un grupo de 10 genes que podemos identificar por un número.

```{r    }
seq_len(10)
```
- Tenemos tres grupos.

```{r    }
geneset1 = c(1,4)
geneset2 = c(2,5,7,8)
geneset3 = c(1,5,6)
```

```{r    }
(genesets = vector("list",3))
```

```{r    }
genesets[[1]] = geneset1
genesets[[2]] = geneset2
genesets[[3]] = geneset3
```

```{r    }
genesets
```

```{r    }
names(genesets) = paste0("set",1:3)
```

```{r    }
genenames = paste0("gene",1:10)
```

```{r    }
genesets[[1]] = genenames[geneset1]
genesets[[2]] = genenames[geneset2]
genesets[[3]] = genenames[geneset3]
```

## `lapply` y `sapply` {.scrollable}

- ¿Qué longitud tiene cada grupo de genes?

La primera opción con `lapply`. 

```{r   }
lapply(genesets,function(i) length(i))
```
Notar que hemos utilizado una función **anónima**.

Podemos conseguir un vector con

```{r   }
unlist(lapply(genesets,function(i) length(i)))
```
También lo podemos obtener con `sapply`.

```{r   }
sapply(genesets,function(i) length(i))
```

# Bioconductor

## Instalación

- Y después [Bioconductor](http://www.bioconductor.org)

```{r}
#| eval: false
install.packages("BiocManager")
BiocManager::install(version = "3.16")
```

- Una vez instalado la parte básica de Bioconductor podemos instalar
algún paquete adicional (como **ALL**).

```{r}
#| eval: false
BiocManager::install("ALL", version = "3.16",dependencies=TRUE)
```
