Variables, tipos de datos y vectores

Carlos Zelada
5 de Octubre 2016

Variables

En R se pueden asignar variables de dos forma x = 1 y x <- 1. La diferencia es que <- puede ser usado en cualquier parte del código y = solo puede ser usado en nivel superior, es decir en la linea de comando. Nosotros para este curso usaremos siempre <-.

Ejemplos

x<-10 ##asignamos 10 a x
x
[1] 10
x<-3 ##asignamos 3 a x
y<-2 ##asignamos 2 a y
x+y
[1] 5

Tipos de datos en R

clase Descripción
Character texto
Complex Numero complejo
numeric Un numero real
integer Un numero entero
logical booleano

Para revisar de que clase es una variable se usa la función class().

Ejemplos

x1<-"¡hola mundo!"
class(x1)
[1] "character"
x2<-1+1i
class(x2)
[1] "complex"
x3<- -1.5
class(x3)
[1] "numeric"
x4<-5L
class(x4)
[1] "integer"
x5<-TRUE
class(x5)
[1] "logical"
x6<-F
class(x6)
[1] "logical"

Vectores

  • Los vectores son el tipo básico de objeto en R.
  • Iniciemos creando un vector usando el “colon operator” primero veamos la documentación de este operado ingresando en la linea de comando.
?':'
  • Se puede ver que hay una descripción completa de como usar esta función, dedíquele un rato a la lectura de la documentación del operador :
  • Hagamos un ejemplo del uso de esta

Ejemplos

1:10
 [1]  1  2  3  4  5  6  7  8  9 10
pi:9.5
[1] 3.141593 4.141593 5.141593 6.141593 7.141593 8.141593 9.141593
3:50
 [1]  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[24] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
[47] 49 50

Ejemplos

También podemos crear vectores usando la función c().

c(1,2,15,7)
[1]  1  2 15  7
c(TRUE, FALSE, FALSE, TRUE)
[1]  TRUE FALSE FALSE  TRUE
c("h","o","l","a")
[1] "h" "o" "l" "a"

También podemos crear vectores con la función seq().

seq(0, 1, length.out = 11)
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
seq(1, 9, by = 2)    
[1] 1 3 5 7 9
seq(1, 9, by = pi) 
[1] 1.000000 4.141593 7.283185
seq(1, 6, by = 3)
[1] 1 4
seq(1.575, 5.125, by = 0.05)
 [1] 1.575 1.625 1.675 1.725 1.775 1.825 1.875 1.925 1.975 2.025 2.075
[12] 2.125 2.175 2.225 2.275 2.325 2.375 2.425 2.475 2.525 2.575 2.625
[23] 2.675 2.725 2.775 2.825 2.875 2.925 2.975 3.025 3.075 3.125 3.175
[34] 3.225 3.275 3.325 3.375 3.425 3.475 3.525 3.575 3.625 3.675 3.725
[45] 3.775 3.825 3.875 3.925 3.975 4.025 4.075 4.125 4.175 4.225 4.275
[56] 4.325 4.375 4.425 4.475 4.525 4.575 4.625 4.675 4.725 4.775 4.825
[67] 4.875 4.925 4.975 5.025 5.075 5.125
seq(17) # lo mismo que 1:17, o todavia mejor seq_len(17)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17

Combinando vectores

La función c() se puede usar para combinar vectores.

x<-c(1,2,3)
y<-c("a","b","c","d")
z<-c(x,y)
z
[1] "1" "2" "3" "a" "b" "c" "d"

Combinando vectores

  • Note que el primer vector era de clase numeric y el segundo vector clase character y el vector que nos devolvió R es de clase character.

  • A esto se le llama coerción y R tiene predeterminadas ciertas coerciones.

  • Esto es por que todos los elementos de un vector tienen que tener la misma clase, mas adelante aprenderemos lo que es una lista y esta si permite tener diferentes tipos de clases en un arreglo.

x<-c(1,2,3)
class(x)
[1] "numeric"
y<-c("a","b","c","d")
class(y)
[1] "character"
z<-c(x,y)
class(z)
[1] "character"
z
[1] "1" "2" "3" "a" "b" "c" "d"

Aritmetica de vectores

Definamos los siguientes vectores,

x<-1:5
y<-c(10,20,30,40,50)

Podemos multiplicar un vector por una constante

3*x
[1]  3  6  9 12 15
(1/10)*y
[1] 1 2 3 4 5

podemos sumarlos

x+y
[1] 11 22 33 44 55

podemos restarlos

x-y
[1]  -9 -18 -27 -36 -45

podemos multiplicarlos

x*y
[1]  10  40  90 160 250

tambien dividirlos

x/y
[1] 0.1 0.1 0.1 0.1 0.1

Note que todas las operaciones son de componente con componente.

Reciclado

Si se operan dos vectores de diferentes logitudes el vector mas pequeño se opera varias veces sobre el mas grande.

a<-c(0,1)
b<-1:15
a*b
 [1]  0  2  0  4  0  6  0  8  0 10  0 12  0 14  0

Indice de vectores: Una posición

y
[1] 10 20 30 40 50
y[2]
[1] 20

Indice de vectores: Una posición

y[-2]
[1] 10 30 40 50

Indice de vectores: Una posición

y[10]
[1] NA

Indice de vectores: Varias posiciones

y
[1] 10 20 30 40 50
y[c(2,3)]
[1] 20 30

Indice de vectores: Varias posiciones

y[c(2,3,2)]
[1] 20 30 20

Indice de vectores: Varias posiciones

y[c(3,2,1)]
[1] 30 20 10

Indice de vectores: Varias posiciones

y[2:4]
[1] 20 30 40

Indice lógico

s <- c("aa", "bb", "cc", "dd", "ee")
L <- c(FALSE, TRUE, FALSE, TRUE, FALSE) 
s[L]
[1] "bb" "dd"

Etiquetando las posiciones de un vector

v <- c("Maria", "Perez")
names(v)
NULL
names(v)<-c("nombre","apellido")
v
  nombre apellido 
 "Maria"  "Perez" 
v["apellido"]
apellido 
 "Perez" 

Listas

a<-2:5
b<-c("carlos","sandra","maria","luis")
c<-c(TRUE,FALSE,FALSE,TRUE)
lista<-list(a,b,c)
lista
[[1]]
[1] 2 3 4 5

[[2]]
[1] "carlos" "sandra" "maria"  "luis"  

[[3]]
[1]  TRUE FALSE FALSE  TRUE

Listas

lista[1]
[[1]]
[1] 2 3 4 5
lista[c(2,3)]
[[1]]
[1] "carlos" "sandra" "maria"  "luis"  

[[2]]
[1]  TRUE FALSE FALSE  TRUE

Listas

lista[[2]]
[1] "carlos" "sandra" "maria"  "luis"  
lista[[2]][2]
[1] "sandra"

Listas

a<-2:5
b<-c("carlos","sandra","maria","luis")
c<-c(TRUE,FALSE,FALSE,TRUE)
lista<-list(codigo=a,nombre=b,ingles=c)
lista
$codigo
[1] 2 3 4 5

$nombre
[1] "carlos" "sandra" "maria"  "luis"  

$ingles
[1]  TRUE FALSE FALSE  TRUE

Listas

lista$nombre
[1] "carlos" "sandra" "maria"  "luis"  
lista$ingles
[1]  TRUE FALSE FALSE  TRUE
lista$codigo
[1] 2 3 4 5
names(lista)
[1] "codigo" "nombre" "ingles"
names(lista)<-c("cod","nom","ing")
lista
$cod
[1] 2 3 4 5

$nom
[1] "carlos" "sandra" "maria"  "luis"  

$ing
[1]  TRUE FALSE FALSE  TRUE