Uno de los objetos más importantes del entorno R son los vectores. Gracias a ellos se pueden construir matrices, listas, data frame, etc. Lo que posibilita que se pueda hacer análisis de datos al más alto nivel. Por tanto, en las siguientes lineas se muestra como definir vectores, sus clases, y los comandos más importantes para poder obtener vectores.
Para poder definir un vector se puede usar cualquiera de los tres signos <-, =, ->. Para este tutorial se usará el primero.
Tambien es necesario el comando c que sirve para concatenar elementos (más adelante se verá a más detalle este comando).
Con estas dos herramientas será suficiente para poder definir vectores. Los ejemplos se muestran más adelante.
En la siguiente tabla se muestran las clases de vectores que se pueden usar en R.
| CLASE DE VECTOR | QUE CONTIENE |
|---|---|
| Integer | Números enteros |
| Numeric | Números reales |
| Logical | Caracteres lógicos |
| Character | Caracteres o Palabras |
| Complex | Números complejos |
Para la clase de vectores Integer sólo permite elementos que sean números enteros. En el entorno R para definir un número entero es necesario agregar al número la letra L, como se muestra a continuación:
#Vector Integer - Números enteros.
x<-c(1L,2L,3L,4L,5L,6L)
y<-c(1L,3L,5L,7L,9L,11L,13L)
Se realizó la definición de los vectores x y y. En los cuales se hizo uso de <- y c. Los resultados se muestran a continuación:
x
## [1] 1 2 3 4 5 6
y
## [1] 1 3 5 7 9 11 13
Con respecto a la clase de vectores Numeric estos adminten números reales. Es muy fácil definirlos, a continuación se muestra un ejemplo.
#Vector Numeric - Números reales.
z<-c(1.3, pi, exp(1))
t<-c(sin(pi/4), log(45), tan(pi/3))
Los vectores z y t contienen números reales, en el caso del vector z está compuesto por 1.3, pi y el número de euler. Los resultados son los siguientes:
z
## [1] 1.300000 3.141593 2.718282
t
## [1] 0.7071068 3.8066625 1.7320508
Para el caso de los vectores Logical sólo acepta como elementos a TRUE y FALSE. A continuación se muestra un ejemplo:
# Vector Logical - Caracteres lógicos.
m<-c(TRUE,FALSE,FALSE,TRUE)
p<-c(T,F,F,T,T,T,F)
Como se habrán podido dar cuenta no es necesario escribir las palabras completas (TRUE y FALSE) es suficiente con escribir sus iniciales. Para comprobarlo a continuación se muestran los resultados.
m
## [1] TRUE FALSE FALSE TRUE
p
## [1] TRUE FALSE FALSE TRUE TRUE TRUE FALSE
Si se desea crear vectores Character se tendrá que usar como elementos sólo palabras o caracteres. Estos vendrán especificados por las comillas "", un ejemplo se muestra a continuación:
# Vector Character - Palabras.
p1<-c("Luis", "María", "José")
p2<-c("12", "casa", "pi")
El vector p1 contiene nombres (palabras) y el vector p2 contiene los números 12 y pi, pero como se usó las comillas R los considera como caracteres, adicionalmente tiene a la palabra casa.
p1
## [1] "Luis" "María" "José"
p2
## [1] "12" "casa" "pi"
Por último, los vectores complex que tiene elementos que sólo son números complejos. Para definir un número complejo es necesario considerar el número imaginario i. A continuación se muestran uno ejemplo:
# Vector Complex - Números complejos.
c1<-c(1+2i, 4i, 3+6i)
El vector c1 contiene tres elementos, los cuales son números omplejos. Los resultados son los siguientes:}
c1
## [1] 1+2i 0+4i 3+6i
Para poder saber si un objeto definido es un vector, es necesario usar el comando is.vector(). Este nos arrojará los valores TRUE (si es un vector) o FALSE (si no es un vector). Acontinuación se muestran los resultados para algunos de los vectores que hemos definido antes:
is.vector(x)
## [1] TRUE
is.vector(z)
## [1] TRUE
is.vector(m)
## [1] TRUE
is.vector(p1)
## [1] TRUE
is.vector(c1)
## [1] TRUE
Como era de esperarse, todas las variables definidas, resultan ser vectores.
Para conocer la clase, se tendrá que usar los comandos is.integer(), is.numeric(), is.logical(), is.character() y is.complex(). Al igual que antes este arrojará TRUE o FALSE. A continuación se muestran unos ejemplos.
is.integer(x)
## [1] TRUE
is.numeric(x)
## [1] TRUE
is.logical(m)
## [1] TRUE
is.character(p1)
## [1] TRUE
is.complex(p1)
## [1] FALSE
Puede parecer algo confuso, pero usted se puede preguntar, por qué el vector x que fue definido como Integer también arroja como si fuera un vector Numeric. Esto es porque los números enteros están contenidos en los números reales, mejor dicho el conjunto de números enteros es un subconjuto del conjunto de los números reales.
¿Qué clase de vector será si defino el siguiente vector?
v<- c(12, "azul", 2+1i, pi)
is.integer(v); is.numeric(v); is.logical(v); is.character(v); is.complex(v)
## [1] FALSE
## [1] FALSE
## [1] FALSE
## [1] TRUE
## [1] FALSE
Como se puede observar el vector fue definido como Character, porque existe una jerarquía de elementos. Si el vector contiene un elemento caracter considerará a los otros elementos como caracteres. Como se muestra a continuación:
v
## [1] "12" "azul" "2+1i"
## [4] "3.14159265358979"
La jerarquía es la siguiente:
Character>Complex>Numeric>Integer>Logical
Para poder construir un vector de números consecutivos se necesitará el comando :. A continuación se muestra un ejemplo:
x0<-1:5 # Vector que tiene como elementos desde el 1 al 5.
x0
## [1] 1 2 3 4 5
También existen vectores en los que sus elementos siguen cierto patrón:
| COMANDO | GENERA |
|---|---|
| rep() | Repite elementos del vector |
| seq() | Elementos ordenados en progresión aritmética |
Este comando tiene la siguiente sintaxis:
# rep("elemento", " # de veces")
A continuación se muestra unos ejemplos:
x1<-rep(2,5) # Para repetir 2 cinco veces.
x1
## [1] 2 2 2 2 2
x2<-rep("Luis",10) # Para repetir "Luis" diez veces.
x2
## [1] "Luis" "Luis" "Luis" "Luis" "Luis" "Luis" "Luis" "Luis" "Luis" "Luis"
Este comando también puede repetir vectores. Para lo cual usa la siguiente sintaxis:
rep("vector", "time" or "each")
La condición time se usa cuando se quiere repetir el vector un número determinado de veces y each cuando se requiere repetir los elementos del vector. A continuación se muestran unos ejemplos (recordar que el vector x0 =1,2,3,4,5):
# Repetirá el vector x0 tres veces.
r1<-rep(x0, time=3)
r1
## [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
# Repetirá los elementos del vector x0 dos veces.
r2<-rep(x0, each=2)
r2
## [1] 1 1 2 2 3 3 4 4 5 5
# Repetirá los elementos del vector x0 tres veces y luego este nuevo vector dos veces.
r3<-rep(x0, each=3, time=2)
r3
## [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Para repetir Arbitrariamente los elementos del vectos se usa el comando concatenar c y se indica la veces que se desea repetir cada elemento del vector. A continuación un ejemplo:
# Repetición arbitratia de elementos del vector.
r7<-rep(1:6, c(3,0,1,0,4,2))
r7
## [1] 1 1 1 3 5 5 5 5 6 6
Se repite el elemento 1 tres veces, el elemento 2 cero veces, el elemento 3 una vez, el elemento 4 cero veces, el elemento 5 cuatro veces y el elemento 6 dos veces.
También se puede usar para repetir el vector y especificar una determinada dimension. La sintaxis para estos casos es el siguiente:
rep("vector", "time" or "each", "length")
Donde length es la dimensión deseada del vector.
El siguiente es un ejemplo de este caso:
# Repetirá los elementos del vector x0 dos veces. Pero la dimensión sólo será de 5.
r5<-rep(x0, each=2, length=5)
r5
## [1] 1 1 2 2 3
Si no se hubiese puesto la condición length el vector tendría una dimensión de 10, pero como sé especificó que sólo tenga una dimensión de 5. Sólo considero los elementos hasta llegar a una dimensión de 5.
A continuación se muestra un ejemplo más, con el fin de aclarar dudas:
r6<-rep(1:10, each=5, length=3)
r6
## [1] 1 1 1
Si no se hubiera puesto la condición length el vector r6 tendría una dimensión de 50, pero gracias a la consición length este sólo cuenta con una dimensión de 3.
Este comando tiene como fin que los elementos del vector aumenten o decrezcan en proporción a una razón aritmética. La sintaxis es la siguiente:
seq("inicio", "final", by="razón")
Donde inicio corresponde al número con el que empezará la progresión, final indica el último número de la progresión y por último by= es el comando en donde se tendrá que indicar la razón aritmética. A continuación se muestra un ejemplo:
# La progresión será creciente, ya que se tiene que considerar al elemento inicial 1 y al elemento final el 20 o algún número cercano a este (por la especificación de la razón aritmética).
v1<-seq(1, 20, by=2)
v1
## [1] 1 3 5 7 9 11 13 15 17 19
# La progresión será decreciente, puesto que el número inicial es 40 y el final el número 3 o un número cercano.
v2<-seq(40, 3, by=-4)
v2
## [1] 40 36 32 28 24 20 16 12 8 4
Como se puede dar cuenta si el número inicial es mayor que el número final la razón tiene que ser negativa.
Por último, si deseamos tener una determinada dimensión y omitir la razón se considera la siguiente sintaxis:
seq("inicio", "final", length.out="n")
Donde length.out indica la dimensión del vector.
# El vector empezará de 1 y terminará en 50 y tendrá una dimensión de 10.
v3<-seq(1,50, length.out=10)
v3
## [1] 1.000000 6.444444 11.888889 17.333333 22.777778 28.222222 33.666667
## [8] 39.111111 44.555556 50.000000
Para concatenar elementos, como se explicó antes, se usa el comando c, para esta sección también se usará pero con el fin de agregar elementos a un vector definido.
En el siguiente ejemplo se puede observar este procedimiento:
# Se define el vector t2.
t2<-seq(1, 20, by=3)
t2
## [1] 1 4 7 10 13 16 19
# Ahora si se desea agragar un cero al inicio del vector t2.
t2<-c(0,t2)
t2
## [1] 0 1 4 7 10 13 16 19
# Por último si se desea agregar dos elementos al final del vector.
t2<-c(t2, 20, 21)
t2
## [1] 0 1 4 7 10 13 16 19 20 21
Esta forma es muy útil cuando se usa los comando seq() y rep).
Por último si se desea agregar o quitar elementos manualmente se tiene que usar el comando fix(). La sintaxis es la siguiente:
fix("Vector")
A continuación se muestra un ejemplo:
fix(t2)
En donde aparecerá un archivo .txt en donde puede agregar o borrar elementos. A continuación se muestra el resultado:
Archivo txt
Una vez terminada la edición hace clic en “Archivo” y luego en “Guardar” y su vector habrá sido editado.
Si le quitamos el último elemento, el resultado que nos quedaría sería el siguiente:
t2
## [1] 0 1 4 7 10 13 16 19 20
En efecto, el último elemento ha sido removido.