top of page

PRÁCTICA 5: 

Bucles while, funciones y representación gráfica en R 

EJERCICIO 1

*Para entender mejor el objetivo de la práctica ver el vídeo

imagen_2020-12-16_192843.png
imagen_2020-12-16_193217.png

En este primer paso creamos la función que reparte los escaños

imagen_2020-12-16_193346.png

Introducimos datos

imagen_2020-12-16_193511.png
imagen_2020-12-16_193633.png

Elaboración de los gráficos

SOLUCIÓN:

Parte 1:

# Comenzamos nombrando la función:
asignacion_escaños<-function(votos,npart,nesc) {
# todo lo que viene a continuación es nuestra función:
 # Ponemos los contadores a 1
  k=1
  cuenta_escan=1
# Creamos la matriz A, que será nuestra tabla de votos a cada partido
  A=matrix(c(0),nrow=npart, ncol=nesc)
# ponemos el vector escaños_unica a 0, que indica que inicialmente cada partido tiene 0 escaños
  escaños_unica=0
  for (i in 1:npart){
    escaños_unica[i]=0 }
# iniciamos proceso de reparto de escaños con un bucle while, que dura hasta que todos los escaños se han repartido. Dentro de ese bucle while comparamos todos los valores de la matriz A, y el máximo lo almacenamos, le sumamos un escaño a su partido, y convertimos ese valor a 0, para no ser vuelto a usar. Al final sumamos 1 a las columnas (k) y a el escaño a repartir (cuenta_scan)
   while(cuenta_escan<=nesc){
    for(i in 1:npart){
      A[i,k]=votos[i]/k
      }
    
    max=A[1,1]
    imax=1
    jmax=1
    for (i in 1:npart){
      for (j in 1:k){
        if(A[i,j]>=max){
          max=A[i,j]
          imax=i
          jmax=j
          }
      }
    }
    A[imax,jmax]=0
    escaños_unica[imax]=escaños_unica[imax]+1
    k=k+1
    cuenta_escan=cuenta_escan+1
  }
# Llamamos a la función, que nos dará como valor de salido escaños_unica, un vector con el número de escaños de cada partido:
return(escaños_unica)  
  
}
# la función se cierra, y ya está terminada

Parte 2:

# Ahora, usamos la función metiendo datos:
↓↓Este código nos lo proporciona el profesor en el guión para realizar mejor la práctica↓↓
#datos para la función#
nesc=350; npart=17
votos=c(6752983, 5019869, 3640063, 3097185, 1637540, 869934, 577055, 527375, 377423, 276519, 244754, 226469, 123981, 119597, 98448, 68580, 19696)
Partido=c('PSOE','PP','VOX','PODEMOS','Cs','ERC','MasPais','JxCAT','PNV','BILDU', 'CUP','PACMA', 'CC', 'BNG', 'NAVARRA_SUMA','PRC','TeruelExiste');
escaños_reales=c(120, 89, 52, 35, 10, 13, 8, 8, 6, 5, 2, 0, 2, 1, 2, 1, 1);

Para el programa principal:
#le damos un nombre a la función que hemos creado y construimos la tabla#
escañitos=asignacion_escaños(votos,npart,nesc)
T=data.frame (Partido, escañitos, escaños_reales)
T

También se piden dos gráficos de distintos diseños:
#Ordenar los gráficos distribuidos en 2 filas y 1 columna#
par(mfrow=c(2,1),mar=c(5,4,0.01,1)) 
#Primer gráfico: sectores circulares#
names(escañitos)=c('PSOE','PP','VOX','PODEMOS','Cs','ERC','MasPais')
pie(escañitos,clockwise=TRUE,col=c('red','blue','green','purple','orange','yellow','pink','red','dark green','blue','brown'), cex=0.8)
#Segundo gráfico: barras superpuestas#
names(escaños_reales)=c('PSOE','PP','VOX','PODEMOS','Cs','ERC','MasPais','JxCAT','PNV','BILDU', 'CUP','PACMA', 'CC', 'BNG', 'NAVARRA_SUMA','PRC','TeruelExiste')
escaños=rbind(escaños_reales, escañitos)
barplot(escaños,beside=TRUE,col=c(4,5),las=2)
legend(x='top',rownames(escaños),col=1:17,fill=c(4,5))

NOTA: para que las barras sean horizontales se pondría: horiz=1, las=1 (horiz gira las barras y las gira los nombres). 
 

imagen_2020-12-16_194754.png

¡¡CUIDADO!!

ERRORES COMUNES:

- Llamar a una variable un nombre con o sin minúscula, de forma que es un nombre diferente

- while se escribe con minúscula

- Llaves no cerradas de los bucles

- Confundir el <= con >=, de manera que el ejercicio sale al revés

- Llamar a la función fuera de la llave del final, se pone antes.

Explicación en vídeo:

Para más información se puede acceder al repositorio a través del enlace

* DESCARGA AQUÍ EL DOCUMENTO CON LA PRÁCTICA 5 RESUELTA

Fuentes: Logo diseñado por una integrante de nuestro grupo, las imágenes de fondo han sido encontradas en la plataforma que nos proporcionó nuestro profesor y en la galería de wix, los enunciados de ejercicios son capturas de nuestros apuntes

©2020 por Grupo T12, programación.

bottom of page