c(1,2,3)[1] 1 2 3
a <- c("a", 1, 1.5)
print(a)[1] "a" "1" "1.5"
is.vector(a)[1] TRUE
Se pueden instalar las dependencias también - install.packages("pkg", dependencies=TRUE). A veces hay dependencias del sistema que también hay que instalar.
install.packages("pkg") |
instala un paquete |
remove.packages("pkg") |
desinstala un paquete |
old.packages("pkg") |
comprueba la versión del paquete |
update.packages() |
actualiza todos los paquetes (o el definido) |
sessionInfo() |
devuelve la versión de R y los paquetes cargados |
.libPaths() |
devuelve la localización de los paquetes en el sistema |
library() |
devuelve los paquetes instalados en RStudio |
library("pkg") |
añade pkg al ambiente |
detach("package:pkg", unload = TRUE) |
elimina el paquete del ambiente |
search() |
lista los paquetes cargados y archivos del ambiente |
Para descargar paquetes de un repositorio, se puede utilizar
install.packages() con el argumento repos=https://cran.rediris.es/ (o el correspondiente)source(), definiendo en su interior el URL:> source("https://bioconductor.org/biocLite.R")
> biocLite(c("GenomicFeatures", "AnnotationBi" ))getwd() |
devuelve el directorio de trabajo |
setwd() |
cambia el directorio de trabajo |
read.csv()data <- read.csv("file.csv",
header = FALSE,
sep = ","
)readr::read_csv()readxl::read_excel() para .xlswrite.table() a .txt, especificando separadorwrite.csv()xlsx::write.xlsx()foreign::write.foreign("data", "file.spss", package="SPSS") (también exporta de SAS y otros programas estadísticos)c(1,2,3)[1] 1 2 3
a <- c("a", 1, 1.5)
print(a)[1] "a" "1" "1.5"
is.vector(a)[1] TRUE
x <- c("A", "B", "B", "A", "A")
x <- as.factor(x)
print(x)[1] A B B A A
Levels: A B
levels(x) <- c("Anna", "Bob")
print(x)[1] Anna Bob Bob Anna Anna
Levels: Anna Bob
bin <- c(0,1,1,0,1,0,1,1,0,0,1,0)
gen <- factor(bin,
levels=c(0,1),
labels=c("Mujer", "Hombre"))
print(gen) [1] Mujer Hombre Hombre Mujer Hombre Mujer Hombre Hombre Mujer Mujer
[11] Hombre Mujer
Levels: Mujer Hombre
datos <- seq(1:20)
dimensiones <- c(4,5) # c(rows, columns)
matriz <- matrix(datos, dimensiones)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 5 9 13 17
# [2,] 2 6 10 14 18
# [3,] 3 7 11 15 19
# [4,] 4 8 12 16 20
matriz[3,]
# 3 7 11 15 19
matriz[,2]
# 5 6 7 8
matriz[3,2]
# 7| Funciones | Descripción |
|---|---|
t() |
Transpose - cambia las filas por columnas |
dim() |
Consultar y editar las dimensiones de la matriz (en forma de vector) |
colSums() |
Suma de columnas |
rowSums() |
Suma de filas |
colMeans() |
Media de columnas |
rowMeans() |
Media de filas |
Permite cualquier tipo de dato (incluso otras listas):
num <- c(10,11,12)
x <- list("Text", num, 1.5)
# [[1]]
# [1] "Text"
# [[2]]
# [1] 10 11 12
# [[3]]
# [1] 2.5El índice empieza en 1 (no en 0); se indexa con corchetes o dobles corchetes
x[1]
# "Text"
x[[2]][1]
# 10Para eliminar un elemento se sustituye por NULL o se indexa con - delante (list[-i]):
x[2] <- NULL # x[-2]
# [[1]]
# [1] "Text"
# [[2]]
# [1] 2.5| Comandos útiles | |
|---|---|
View(data) |
devuelve una tabla |
dim(data) |
devuelve el número rows y cols |
length(data) |
devuelve el número de variables |
names(data) |
devuelve el nombre de las variables |
head(data) |
devuelve las primeras observaciones |
attach(data) |
integra el data frame en el ambiente |
detach(data) |
elimina variables del data frame del ambiente |
str(data) |
devuelve la estructura del objeto |
| Acceso al data frame | |
|---|---|
| índice | data[n] |
| fila | data[n,] |
| columna | data[,n] |
| variable | data$var |
| variable condicional | data$var1[data$var2 == 1] |
rbind() (row bind) concatena dos data frames que tengan las mismas variables, aunque aparezcan en un orden distinto.
merge() unifica las entradas en base a la coincidencia de alguna de sus columnas; por defecto omite aquellos elementos no representados en ambos data frames (unión interna o inner join).
La unión externa combina todas las entradas, convirtiendo los valores no coincidentes en NA; se hace con la opción all=TRUE:
z <- merge(x, y,
all = TRUE # todas las líneas ('x' e 'y')
# all.x = TRUE # todas las líneas de 'x' - unión izquierda
# all.y = TRUE # todas las líneas de 'y' - unión derecha
)subset() sirve para generar nuevos conjuntos de datos a partir de selecciones:
a <- subset(x, select = c(Var1, Var2))b <- subset(x, Var1 <=24)c <- subset(x, Var1 == 1, select = c(-Var2)) (eliminar Var2)d <- subset(x, Var1 < 5 | Var1 > 10)sample() toma muestras aleatorias de un conjunto; el comando set.seed(int), si se define, permite reproducir las selecciones. Permite definir los índices a indexar, donde
i <- sample(x:y, n, replace=FALSE)
pop_sample <- dataframe[i,]
# devuelve 'm' líneas desde 'x' a 'y', a través del índice iif (x == 2) {
print("Just right")
} else if (x >= 5) {
print("Too high")
} else {
print("Too low")
}if(x == 2){print("Just right")}for (i in 1:length(df)) {
if (df$var1[i] < 30) {
print(i)
}
}Devuelve un valor sí se cumple una condición y otro si no lo hace:
a <- c(0,1,1,0,1,0,0)
b <- ifelse(a == 0, "female", "male")
print(b)[1] "female" "male" "male" "female" "male" "female" "female"
| Comando | Descripción |
|---|---|
sort() |
ordena los datos |
summary() |
resúmenes estadísticos |
fivenum() |
mímino, Q1, media, Q3, máximo |
min() |
mínimo |
max() |
máximo |
mean() |
media |
median() |
mediana |
range() |
(mínimo, máximo) |
sd() |
desviación típica |
var() |
varianza |
cor() |
correlación |
lapply y sapplylapply() y su versión simplificada sapply() aplican una función a una lista, y devuelven sus resultados:
iris2 <- subset(iris, select = c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width))
sapply(iris2, mean, na.rm=TRUE)Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
aggregateSubdivide los datos de una muestra y aplica una función estadísticos sobre cada subdivisión:
library(MASS)
aggregate(Tetrahydrocortisone ~ Type, data=Cushings, FUN=mean) Type Tetrahydrocortisone
1 a 2.966667
2 b 8.180000
3 c 19.720000
4 u 14.016667
plot(Cushings$Tetrahydrocortisone)aggregate(iris[,1:4], by = list(iris$Species), FUN = mean) Group.1 Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
table() - frecuencias absolutasprop.table(data) - frecuencias relativasknitr::kable() y knitr::kables() - markdownPasando dos argumentos hace una tabla de contingencia, que luego pueden ser utilizadas con test estadísticos que las utilizan (como \(\chi^{2}\) o el test de Fisher):
letters <- c("a", "b", "c", "c", "c", "a", "b", "b", "a")
numbers <- c(1,2,3,2,3,1,1,2,3)
table(letters, numbers) numbers
letters 1 2 3
a 2 0 1
b 1 2 0
c 0 1 2
set.seed() permite especificar una “semilla” para el generador de números aleatorio.
runif()runif(n = n,
min = min,
max = max)sample()replace = permite volver a sacar el mismo número; prob = define la probabilidad de que aparezca cualquiera de los elementos.
sample(min:max, n,
replace = TRUE) # permite repetir númerossample(1:6, 10, replace = TRUE,
prob = c(1, 1, 1, 1, 6, 1)) [1] 5 4 5 5 3 2 5 5 5 2
replicate()replicate (
n = 8, # número de repeticiones
{ rnorm(4, 25, 5)} # una función cualquiera
) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 37.36451 20.47024 26.87435 20.57864 23.73142 35.82391 28.93165 25.93017
[2,] 29.24226 15.61959 27.52311 28.69677 26.90371 26.22942 28.70096 23.62187
[3,] 26.45862 31.39325 21.00204 20.04801 18.39523 18.52740 25.43375 21.33571
[4,] 29.63224 21.97318 25.15192 22.91632 26.28487 27.75149 32.13828 26.72102
Requiere gtools:: | ——————–|— permutations() | Genera todas las permutaciones posibles de los elementos que se le pasan, atendiendo al orden en el que aparecen combinaations() | Genera todas las combinaciones posibles de los elementos que se le pasan (el orden no es importante)
| Distribuciones discretas | Distribuciones contínuas | ||
|---|---|---|---|
| Binomial | binom() |
Uniforme | unif() |
| Poisson | pois() |
Normal | norm() |
| Geométrica | geom() |
T de Student | t() |
| Hipergeométrica | hyper() |
F de Fisher | F() |
| Binomial negativa | nbinom() |
Chi-Cuadrado | chisq() |
| Exponencial | exp() |
Las distintas opciones tiene un atajo en forma de prefijo:
| Prefijo | Función |
|---|---|
d |
Función de densidad o probabilidad (mass probability) |
p |
Función de distribución |
q |
Cálculo de cuantiles |
r |
random - muestra aleatoria |
En el caso de la distribución binomial, donde
\[ \begin{aligned} X & \sim Binomial(n, \theta) \\ \\ Ejemplo: & \\ X & \sim Binomial(9, 0.7) \end{aligned} \]
podemos calcular la función de densidad para \(P(X=8)\) con dbinom():
dbinom(x = 8,
size = 9,
prob = 0.7)[1] 0.1556496
la función de probabilidad para \(P(X \le 8)\) con pbinom()
pbinom(8, 9, 0.7)[1] 0.9596464
plot(dbinom(0:9, 9, 0.7), type = "h",
main = "Función de probabilidad",
xlab = "x",
ylab = "Probabilidad")simular una población con esa distribución con rbinom()
rbinom(50, 9, 0.7) [1] 6 7 4 6 7 6 8 9 5 5 5 4 6 5 9 4 6 5 7 4 6 7 5 7 6 6 8 4 6 5 6 7 5 4 6 5 7 7
[39] 3 4 7 6 5 7 6 6 8 8 5 6
plot(table(rbinom(10000, 9, 0.7)),
main = "10.000 casos simulados",
xlab = "x",
ylab = "Número de casos")plot(x, y, ...) es la forma básica de generar gráficos en R - plot() abre una ventana con la base; los comandos siguientes dibujan elementos gráficos sobre ella.
Para cerrar la ventana se utiliza dev.off().
Existen opciones para muchos formatos:
pdf("file.pdf") |
|
svg("file.svg") |
svg |
win.metafile("file.wmf") |
Windows Metafile |
jpeg("file.jpg") |
jpg |
png("file.png") |
png |
bmp("file.bmp") |
bmp |
postscript("file.ps") |
ps |
svg("filename.svg") # Abre el documento
plot(data$var1, data$var2) # Vuelca el plot
dev.off() # Cierra y guarda el documento
file.show("filename.svg")plotLa opción más básica es plot(); su argument type= permite modificar el tipo de gráfico:
type= |
Descripción |
|---|---|
p |
puntos |
l |
líneas |
b |
both |
c |
líneas (vacío en lugar de los puntos) |
o |
overplot - líneas sobre los puntos |
h |
histogram |
s |
steps |
S |
otro tipo de steps |
n |
no plotting |
stem()hist()boxplot()pairs() - analiza las variables entre sí por parejasbarplot()pie()persp()| High-level functions | |
|---|---|
xlab, ylab |
título del eje |
xlim, ylim |
límites del eje c(min, max) |
main |
título del gráfico |
sub |
subtítulo del gráfico |
Se pueden añadir capas de datos a los gráficos
lines() - añade líneas entre puntosabline() - añade una pendiente al gráficopoints() - añade puntos al gráficolegend()text()grid() - en el fondotitle()Los argumentos más habituales son
| Opción | Descripción |
|---|---|
cex= |
escala del elemento respecto al gráfico (1.0 por defecto) |
col= |
color colores |
font= |
tipo de letra |
las= |
label style |
lty= |
line type - tipo de línea |
lwd= |
line width - grosor de la línea |
pch= |
el símbolo utilizado en los puntos |
type= |
cómo se representan los datos |

pch=También se puede utilizar cualquier símbolo con el siguiente código:
pch=as.character("#")
lty=iris_means <- aggregate(iris[,1:4], by=list(iris$Species), FUN=mean)
iris_means Group.1 Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
barplot(Petal.Length ~ Group.1, data=iris_means,
xlab="Species", ylab="Petal length",
col=blues9)
legend(x="topleft",
legend=c("setosa", "versicolor", "virginica"),
fill=blues9,
title="Media del grupo")x <- rnorm(1000)
y <- x + rnorm(1000)
plot(x, y,
main="Gráfico de dispersión",
xlab="Valor en X", ylab="Valor en Y",
xlim=c(-2,2), ylim=c(-5,5),
pch=19, cex=1,
col=sample(c("aquamarine4",
"cadetblue",
"cyan4",
"lightblue3")),
)
abline(lm(x~y),
lwd= 2, lty="1342",
col = "darkblue")plot(density(x),
main="Gráfico de densidad",
col=4) # los números también represntan colores
lines(density(y),
col="blue")z <- rnorm(1000,1,0.2) + 4
head(z)[1] 5.198223 4.935374 4.941418 4.960100 4.898786 5.158417
plot(x,y,
main="Grupos en función de otra variable",
sub="Colores y formas según la variable z",
pch=z,
col=z)par() sirve para definir los parámetros gráficos de una imagen (o device):
par(mfrow=c(2,2)) # matrix 2x2 en device
hist(iris$Petal.Length,
breaks=10,
col="cadetblue3")
plot(iris$Petal.Length,
col="cadetblue3")
plot(iris$Sepal.Width,
col="darkred")
boxplot(iris$Petal.Width,
col="darkred",
main="Ancho del pétalo")par(mfrow=c(1,1)) # resetea la imagencherry <- c(8,4,9,10,24,17)
names <- c("One", "Two", "Three", "Four", "Five", "Six")
pie(cherry,
labels=names)ggplot2ggplot2 es parte de tidyverse; tiene tres elementos:
medicos <- data.frame(id= c(seq(1:30)),
nota1= c(round(runif(30, min=0, max=10),2)),
nota2= c(round(runif(30, min=0, max=10),2)),
esp= sample(c(1,2,3), 30, replace = TRUE))
head(medicos) id nota1 nota2 esp
1 1 7.10 0.57 1
2 2 4.96 7.84 3
3 3 2.16 8.15 2
4 4 3.11 8.36 3
5 5 2.05 8.95 2
6 6 7.68 5.99 3
ggplot(data=medicos) +
geom_point(aes(x=nota1, y=nota2),
col=medicos$esp, alpha=0.9,
shape=medicos$esp, size=2)facet_wrap(~factor) sirve para separar los gráficos (facetarlos) en base a un criterio:
ggplot(data=medicos) +
geom_point(aes(x=nota1, y=nota2),
col=medicos$esp + 15,
shape=medicos$esp + 15, size=4) +
facet_wrap(~medicos$esp)b <- na.omit(subset(airquality, select=c(Solar.R, Temp, Month)))
ggplot(b) +
geom_point(aes(Temp, Solar.R,
pch=as.factor(Month), col=as.factor(Month))) +
labs(pch="Months") + # rotula esta leyenda
guides(col="none") + # elimina la innecesaria
xlab("Temperature") + ylab("Solar radiation")rep()Repite un elemento las veces que se especifique:
rep(1:3, 4, length.out=5)[1] 1 2 3 1 2