Operaciones con Vectores.

El primer tipo de objeto que manejaremos es el vector (colecci ́on ordenada de elementos del mismo tipo). Podemos escribir vectores de varias maneras, utilizando la opci ́on “:” (el vector comienza en el primer n ́umero suministrado y finaliza en el segundo o en un n ́umero anterior sin sobrepasarlo, tanto en orden ascendente como descendente) ́o mediante la funci ́on de concatenaci ́on “c( )”.

1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
10:1
##  [1] 10  9  8  7  6  5  4  3  2  1
1.5:7.5
## [1] 1.5 2.5 3.5 4.5 5.5 6.5 7.5
c(1,2,4,3)
## [1] 1 2 4 3
c(1:5)
## [1] 1 2 3 4 5
c(1:5,2,4,-3)
## [1]  1  2  3  4  5  2  4 -3

Tenemos formas adicionales de crear vectores. Una de las m ́as comunes es utilizando la funci ́on “seq(a,b,c)”, que genera secuencias de n ́umeros reales, donde el primer elemento indicar ́ıa el principio de la secuencia, el segundo el final y el tercero el incremento que se debe usar para generar la secuencia. Aunque tambi ́en podemos poner la funci ́on de estas formas “seq(length = d, from = a, to = b)” o “seq(by = c, from = a, to = b)” siendo “d” la longitud del vector.

seq(1,10,2)
## [1] 1 3 5 7 9
seq(from = 1, to = 20, by =2)
##  [1]  1  3  5  7  9 11 13 15 17 19
seq(1,10,2)
## [1] 1 3 5 7 9
seq(from = 1, to = 10, by =2)
## [1] 1 3 5 7 9
# Si lo que queremos es 6 elementos
seq(from = 1, to = 10, length =6)
## [1]  1.0  2.8  4.6  6.4  8.2 10.0
# Con el argumento along creamos un vector con los indices del vector al que llamemos
x<-c(1,2,1,3,4)
seq(along=x)
## [1] 1 2 3 4 5
y<-25
seq(along=y)
## [1] 1

La funcíon “rep(a, b)” que crea un vector con “b” elementos id ́enticos al valor “a”.

# repetimos el elemento 3 diez veces
rep(3,10)
##  [1] 3 3 3 3 3 3 3 3 3 3
# repetimos el vector "a" 2 veces
a=1:5; rep(a,2)
##  [1] 1 2 3 4 5 1 2 3 4 5
# repetimos cada elemento del vector 3 veces de 5 en 5
rep(1:3,rep(5,3))
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
y<-rep(2,5)
# repetimos cada elemento de "a" tantas veces como indica "y"
rep(a,y)
##  [1] 1 1 2 2 3 3 4 4 5 5
rep(a,a)
##  [1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
x<-2
# repetimos el elemento "x" 5 veces
rep(x,length=5)
## [1] 2 2 2 2 2

La funcíon “sequence( )” que crea una secuencias de enteros. Cada secuencia terminar ́a en el n ́umero especificado como argumento.

sequence(c(3,2))
## [1] 1 2 3 1 2
# Hemos creado una secuencia del vector 1:3 y del 1:2
sequence(c(5,3))
## [1] 1 2 3 4 5 1 2 3
# Hemos creado una secuencia del vector 1:5 y del 1:3
sequence(c(c(2,3),3))
## [1] 1 2 1 2 3 1 2 3
# Hemos creado una secuencia del vector 1:2, 1:3 y del 1:3

La funci ́on “gl( )” (generador de niveles) genera series regulares de factores. Tiene la forma “gl(a, b)” donde “a” es el n ́umero de niveles (o clases) y “b” es el n ́umero de r ́eplicas en cada nivel. Se pueden usar dos opciones: “length” para especificar el n ́umero de datos producidos, y “labels” para especificar los nombres de los factores.

# Repetimos los dos niveles 6 veces con la etiqueta Hombre y Mujer
gl(2, 6, labels = c("Hombre", "Mujer"))
##  [1] Hombre Hombre Hombre Hombre Hombre Hombre Mujer  Mujer  Mujer  Mujer 
## [11] Mujer  Mujer 
## Levels: Hombre Mujer
# 20 elementos de dos niveles primero uno y luego el otro
gl(2, 1, 20)
##  [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
## Levels: 1 2
# 20 elementos de dos niveles los dos a la vez
gl(2, 2, 20)
##  [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2
## Levels: 1 2

Finalmente, “expand.grid( )” crea una tabla de datos con todas las combinaciones posibles de los elementos de los vectores o factores que proporcionemos como argumentos.

expand.grid(edad=c(36,25), peso=c(75,60), sexo=c("Hombre","Mujer"))
##   edad peso   sexo
## 1   36   75 Hombre
## 2   25   75 Hombre
## 3   36   60 Hombre
## 4   25   60 Hombre
## 5   36   75  Mujer
## 6   25   75  Mujer
## 7   36   60  Mujer
## 8   25   60  Mujer
# Crea todas las combinaciones posibles

R puede escribir vectores con caracteres o n ́umeros, pero siempre entiende los elementos como si fuesen del mismo tipo. Un vector siempre est ́a formado por elementos del mismo tipo, no pueden mezclarse n ́umeros y cadenas de caracteres (se transformar ́ıa en cadenas de caracteres). Del mismo modo, si mezcla n ́umeros reales y complejos, se entender ́ıan como complejos.

c("Hola", "Adios")
## [1] "Hola"  "Adios"
c(1, 1+2i)
## [1] 1+0i 1+2i
c(1-1i, 2)
## [1] 1-1i 2+0i
dias.semana=c("Lunes","Martes","Mi ́ercoles","Jueves","Viernes","S ́abado","Domingo")
dias.semana
## [1] "Lunes"       "Martes"      "Mi ´ercoles" "Jueves"      "Viernes"    
## [6] "S ´abado"    "Domingo"

Una opci ́on de R es que podemos asignar nombres a los elementos de un vector mediante la funci ́on “names”(tambi ́en se podr ́a utilizar para nombrar cualquier objeto).

x<-1:7
x
## [1] 1 2 3 4 5 6 7
names(x)<-c("Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo")
x
##     Lunes    Martes Miercoles    Jueves   Viernes    Sabado   Domingo 
##         1         2         3         4         5         6         7

Tambi ́en podemos conocer o cambiar el modo o tipo de los elementos que forman el vector mediante la funci ́on “mode” (tomar ́ıa los valores: logical, numeric, complex, character, null, list, function, graphics, expression, name, frame, raw y unknown).

y<-seq(from=3, to=11, by=2)
y
## [1]  3  5  7  9 11
mode(y)
## [1] "numeric"
# Cambiamos y a complejo
mode(y)<-"complex"
y
## [1]  3+0i  5+0i  7+0i  9+0i 11+0i