Un vector almacena una secuencia de valore simples del misma clase. Es decir, todos sus elementos son del mismo tipo de dato simple.
Crear un vector
La forma más habitual de crear un vector es usando la función c() (combine). Tambien podemos usar las funciones seq()
vector_numeros <- c (2 , 4 , 6 , 8 )
vector_numeros
seq_numeros <- seq (2 , 6 )
seq_numeros
seq_numeros2 <- 2 : 6
seq_numeros2
seq_numeros3 <- seq (2 , 6 , by = 0.5 )
seq_numeros3
[1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0
La función c() permite añadir elementos a un vector existente, o combinar dos vectores
vector_numeros2 <- c (1 , 3 , 5 )
vector_numeros2 <- c (vector_numeros2, 7 )
vector_numeros2
comb_vector <- c (vector_numeros, vector_numeros2)
comb_vector
vector_caracteres <- c ('A' , 'B' , 'C' )
vector_caracteres
vector_logico <- c (TRUE , FALSE , TRUE )
vector_logico
vector_logico2 <- 10 == 5
vector_logico2
La función rep() permite construir vectores a partir de la repetición de otro vector.
letras <- c ('A' , 'B' , 'C' )
letras
letras_rep <- rep (letras, times = 3 )
letras_rep
[1] "A" "B" "C" "A" "B" "C" "A" "B" "C"
letras_rep2 <- rep (letras, each = 3 )
letras_rep2
[1] "A" "A" "A" "B" "B" "B" "C" "C" "C"
Aritmética de vectores
Las operaciones aritméticas con vectores se hacen posición a posición.
vector_numeros <- seq (10 , 50 , by = 5 )
vector_numeros
[1] 10 15 20 25 30 35 40 45 50
[1] 11 16 21 26 31 36 41 46 51
[1] 5.0 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0
Dos vectores:
vector_numeros_1 <- c (1 , 2 , 3 , 4 )
vector_numeros_2 <- c (1 , 1 , 0 , 0 )
vector_numeros_1 + vector_numeros_2
vector_numeros_1 - vector_numeros_2
vector_numeros_1 * vector_numeros_2
vector_numeros_1 / vector_numeros_2
Se puede observar que en el resultado de la operación anterior en el vector resultante aparecen los valores Inf , es debido a que la división por 0 es indefinida (Infinito).
Dos vectores, diferente longitud:
vector_numeros_1 <- c (1 , 2 , 3 , 4 , 5 , 6 )
vector_numeros_2 <- c (1 , 1 , 0 )
vector_numeros_1 + vector_numeros_2
vector_numeros_1 - vector_numeros_2
vector_numeros_1 * vector_numeros_2
vector_numeros_1 / vector_numeros_2
Lo que hace R es concatenar el vector de menor longitud consigo mísmo hasta rellenar los huecos hasta la longitud del mayor.
Es mejor evitar las operaciones con objetos de diferente longitud.
Vector númerico y vector de texto.
letras <- c ('A' , 'B' , 'C' , 'D' )
numeros <- c (1 , 2 , 3 , 4 , 5 )
resultado = paste (letras, numeros, sep= "-" )
resultado
[1] "A-1" "B-2" "C-3" "D-4" "A-5"
La función paste() que concatena texto, pero numeros es un vector númerico. Internamente paste() llama a la función as.character() que convierte el tipo númerico a tipo texto.
numeros <- c (1 , 2 , 3 , 4 , 5 )
numeros
texto_numeros <- as.character (numeros)
texto_numeros
Elementos de un vector
Para poder manipular los elementos contenidos en un vector vamos a hacerlo usando los corchetes ([]) de la forma vector[ ]
[1] 10 11 12 13 14 15 16 17 18 19 20
Obtener el elemento en la posicion cuarta
Obterner todos los elementos menos el de la cuarta posicion
[1] 10 11 12 14 15 16 17 18 19 20
Eliminar los elementos de la posicion 1 y 5
[1] 10 11 12 13 14 15 16 17 18 19 20
numeros <- numeros[- c (1 , 5 )]
numeros
[1] 11 12 13 15 16 17 18 19 20
Añadir elementos nuevos.
[1] 11 12 13 15 16 17 18 19 20
numeros <- c (numeros, c (50 , 100 ))
numeros
[1] 11 12 13 15 16 17 18 19 20 50 100
En definitiva lo que estamos haciendo es usar vectores índices para seleccionar elementos del vector.
vector[vector_indice]
Ordenar un vector
En ocasiones nos puede interesar ordenar los elementos de un vector. Esto se puede realizar con la función order()
[1] 11 12 13 15 16 17 18 19 20 50 100
order (numeros, decreasing = TRUE )
[1] 11 10 9 8 7 6 5 4 3 2 1
La función order devuelve el índice del vector ordenado, (no los valores).
numeros[order (numeros, decreasing = TRUE )]
[1] 100 50 20 19 18 17 16 15 13 12 11
Máscara lógica
Otra manera de seleccionar los elementos de un vector es usar una máscara lógica (vector de valores lógicos). De la manera vector[mascara_logica]
[1] 10 11 12 13 14 15 16 17 18 19 20
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
Vectores con nombres
En ocasiones puede ser interesante poner nombre a las posiciones de un vector.
log2FoldChange <- c (- 5.3823 , - 1.2634 , - 1.0972 , - 1.0904 , - 0.9888 , - 0.9792 )
log2FoldChange
[1] -5.3823 -1.2634 -1.0972 -1.0904 -0.9888 -0.9792
ensembles <- c ('ENSMUSG00000020000' ,
'ENSMUSG00000060036' ,
'ENSMUSG00000060613' ,
'ENSMUSG00000038092' ,
'ENSMUSG00000020926' ,
'ENSMUSG00000001435' )
ensembles
[1] "ENSMUSG00000020000" "ENSMUSG00000060036" "ENSMUSG00000060613"
[4] "ENSMUSG00000038092" "ENSMUSG00000020926" "ENSMUSG00000001435"
names (log2FoldChange) <- ensembles
log2FoldChange
ENSMUSG00000020000 ENSMUSG00000060036 ENSMUSG00000060613 ENSMUSG00000038092
-5.3823 -1.2634 -1.0972 -1.0904
ENSMUSG00000020926 ENSMUSG00000001435
-0.9888 -0.9792
log2FoldChange['ENSMUSG00000060613' ]
ENSMUSG00000060613
-1.0972
log2FoldChange[c ('ENSMUSG00000060613' , 'ENSMUSG00000001435' )]
ENSMUSG00000060613 ENSMUSG00000001435
-1.0972 -0.9792
Valores faltantes
En algunos casos es posible que no se conozcan completamente los componentes de un vector. Cuando un elemento o valor está “no disponible” o es un “valor faltante” en el sentido estadístico, se le puede reservar un lugar dentro de un vector asignándole el valor especial NA . Los datos faltantes son comunes en los datos de multi-omicas , debido a una gran variedad de razones.
vector_na <- c (10 : 15 , NA , 20 : 25 , NA )
vector_na
[1] 10 11 12 13 14 15 NA 20 21 22 23 24 25 NA
En general cualquier operación con un valor faltante NA dará como resultado un NA .
Afortunadamente las funciones en R suelen estar preparadas para manejar valores NA . Si leemos la documentación de la función mean() en R.
Observamos que la función mean para el parámetro na.rm tomo el valor FALSE por defecto. Si cambiamos el valor a TRUE los valores faltantes son eliminados antes de realizar la media.
mean (vector_na, na.rm = TRUE )
La función is.na() nos permite identificar los valores faltantes. Devuelve una máscara lógica que nos permite filtar el vector.
[1] 10 11 12 13 14 15 NA 20 21 22 23 24 25 NA
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[13] FALSE TRUE
vector_sin_na <- vector_na[! is.na (vector_na)]
vector_sin_na
[1] 10 11 12 13 14 15 20 21 22 23 24 25