2.2 Vectores
2.2.1 Creación de vectores
diasMes <- c(31,29,31,30,31,30,31,31,30,31,30,31)
dias <- c('Lun','Mar','Mi ́e','Jue','Vie','S ́ab','Dom')
diasMes
## [1] 31 29 31 30 31 30 31 31 30 31 30 31
dias
## [1] "Lun" "Mar" "Mi ́e" "Jue" "Vie" "S ́ab" "Dom"
quincena <- 16:30
quincena
## [1] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
semanas <- seq(1,365,7)
semanas
## [1] 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 113 120 127
## [20] 134 141 148 155 162 169 176 183 190 197 204 211 218 225 232 239 246 253 260
## [39] 267 274 281 288 295 302 309 316 323 330 337 344 351 358 365
rep(T,5)
## [1] TRUE TRUE TRUE TRUE TRUE
c(rep(T,5),rep(F,5))
## [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
rep(c(T,F), 5)
## [1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
2.2.2 Acceso a los elementos de un vector
length(dias)
## [1] 7
length(semanas)
## [1] 53
dias[2] # Solo el segundo elemento
## [1] "Mar"
dias[-2] # Todos los elementos menos el segundo
## [1] "Lun" "Mi ́e" "Jue" "Vie" "S ́ab" "Dom"
dias[c(3,7)]
## [1] "Mi ́e" "Dom"
2.2.3 Generaci ́on de vectores aleatorios
set.seed(4242)
rnorm(100, mean=10, sd=3)
## [1] 16.601503 7.782490 11.597301 12.759985 11.251900 7.049153 4.087217
## [8] 12.464106 7.505729 9.416750 5.900797 6.930702 11.462176 13.634359
## [15] 11.915339 8.320269 12.219524 4.553933 14.626155 9.829156 10.867099
## [22] 7.073053 9.469537 9.398100 9.629391 12.712182 5.536700 16.427711
## [29] 4.279690 12.181423 4.775551 6.310720 14.329029 11.314088 5.968193
## [36] 13.372781 5.319390 5.886031 19.273538 7.377150 9.222643 8.400000
## [43] 16.307809 8.762114 6.517521 7.350390 15.326032 9.000971 10.128321
## [50] 10.220721 12.423237 9.295735 7.661076 10.664515 15.588475 15.646877
## [57] 9.293694 9.181816 14.327371 9.470363 6.989486 11.248542 11.961460
## [64] 12.153842 6.076185 9.772697 10.623449 10.217452 12.734511 15.803807
## [71] 13.701893 7.093037 16.272279 11.458514 8.253390 10.349666 10.063023
## [78] 9.581695 10.499814 9.124369 8.715328 11.906492 6.666753 15.347326
## [85] 12.292075 6.786419 13.456128 5.749136 10.983657 2.637713 9.446325
## [92] 9.363261 9.336171 15.940844 9.236966 6.066087 10.272637 12.942529
## [99] 8.637694 12.164843
loto <- as.integer(runif(6, min=1, max=49))
loto
## [1] 15 9 22 43 16 15
2.2.4 Operar sobre vectores
vect1 <- rnorm(100000)
vect2 <- rnorm(100000)
vect3 <- c() # El vector de resultados est ́a inicialmente vaćıo
system.time(for(idx in 1:length(vect1))
vect3[idx] <- vect1[idx] * vect1[idx] + vect2[idx])
## user system elapsed
## 0.047 0.012 0.060
system.time(vect4 <- vect1 * vect1 + vect2)
## user system elapsed
## 0.000 0.000 0.001
stopifnot(vect3 == vect4) # Resultados deben ser id ́enticos
2.3 Matrices
mes <- matrix(1:35,ncol=7) # Dos formas de generar exactamente
mes <- matrix(1:35,nrow=5) # la misma matriz
mes
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 1 6 11 16 21 26 31
## [2,] 2 7 12 17 22 27 32
## [3,] 3 8 13 18 23 28 33
## [4,] 4 9 14 19 24 29 34
## [5,] 5 10 15 20 25 30 35
mes <- matrix(1:35,nrow=5,ncol=7,byrow=T)
mes
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 1 2 3 4 5 6 7
## [2,] 8 9 10 11 12 13 14
## [3,] 15 16 17 18 19 20 21
## [4,] 22 23 24 25 26 27 28
## [5,] 29 30 31 32 33 34 35
length(mes)
## [1] 35
nrow(mes)
## [1] 5
ncol(mes)
## [1] 7
dim(mes)
## [1] 5 7
is.matrix(vect4)
## [1] FALSE
dim(vect4)
## NULL
dim(vect4) <- c(1000, 100)
is.matrix(vect4)
## [1] TRUE
dim(vect4)
## [1] 1000 100
2.3.2 Acceso a los elementos de una matriz
mes[2,5] # Quinto elemento de la segunda fila
## [1] 12
mes[2,] # Segunda fila completa
## [1] 8 9 10 11 12 13 14
mes[,2] # Segunda columna completa
## [1] 2 9 16 23 30
2.3.3 Columnas y filas con nombre
rownames(mes) <- c('Semana1','Semana2','Semana3','Semana4','Semana5')
colnames(mes) <- dias
mes
## Lun Mar Mi ́e Jue Vie S ́ab Dom
## Semana1 1 2 3 4 5 6 7
## Semana2 8 9 10 11 12 13 14
## Semana3 15 16 17 18 19 20 21
## Semana4 22 23 24 25 26 27 28
## Semana5 29 30 31 32 33 34 35
attributes(mes)
## $dim
## [1] 5 7
##
## $dimnames
## $dimnames[[1]]
## [1] "Semana1" "Semana2" "Semana3" "Semana4" "Semana5"
##
## $dimnames[[2]]
## [1] "Lun" "Mar" "Mi ́e" "Jue" "Vie" "S ́ab" "Dom"
mes[,'Jue']
## Semana1 Semana2 Semana3 Semana4 Semana5
## 4 11 18 25 32
mes['Semana4',]
## Lun Mar Mi ́e Jue Vie S ́ab Dom
## 22 23 24 25 26 27 28
mes['Semana2', 'Vie']
## [1] 12
2.4 Factors
mdias <- c(dias[as.integer(runif(1000,0,7)+1)])
mdias[1:10]
## [1] "Jue" "Mar" "Mar" "Jue" "Jue" "Mar" "Mar" "Lun" "Jue" "S ́ab"
object.size(mdias)
## 8440 bytes
fdias <- factor(mdias)
fdias[1:10]
## [1] Jue Mar Mar Jue Jue Mar Mar Lun Jue S ́ab
## Levels: Dom Jue Lun Mar Mi ́e S ́ab Vie
object.size(fdias)
## 4888 bytes
nlevels(fdias)
## [1] 7
levels(fdias)
## [1] "Dom" "Jue" "Lun" "Mar" "Mi ́e" "S ́ab" "Vie"
levels(fdias)[1] <- 'Sun'
peso <- ordered(c('Ligero','Medio','Pesado'))
tam <- peso[c(sample(peso,25,replace=T))]
tam
## [1] Medio Medio Pesado Medio Pesado Ligero Ligero Medio Pesado Pesado
## [11] Pesado Ligero Pesado Pesado Medio Ligero Ligero Medio Medio Medio
## [21] Pesado Ligero Pesado Medio Ligero
## Levels: Ligero < Medio < Pesado
tam[2] < tam[1]
## [1] FALSE
dias[3]
## [1] "Mi ́e"
fdias[3]
## [1] Mar
## Levels: Sun Jue Lun Mar Mi ́e S ́ab Vie
as.numeric(fdias[3])
## [1] 4
as.numeric(dias[3])
## Warning: NAs introduced by coercion
## [1] NA