PRÁCTICA 3 

Bucles y Funciones

El lenguaje R nos permite programar bucles ('loops' en inglés), estructuras que se repiten durante cierto tiempo para analizar conjuntos sucesivos de datos.

Las funciones adquieren una gran importancia en la programación y, trabajando con ellas, podemos incluir multitud de procesos como bucles, estructuras condicionales (explicadas en la lección 4), representación gráfica de las mismas...

Bucles


En R, el bucle se escribe:

For (i in vinic : vfin){

proceso de cálculo

}

También se pueden realizar bucles anidados, unos dentro de otros:

for (i in vinic1:vfin1){

for (j in vinic2:vfin2){

for (k in vinic3:vfin3){

proceso de cálculo

}

}

}

Pero, ¿para qué usamos este tipo de bucles? Es prácticamente imposible hacer un sumatorio o un productorio de mil términos con tu cabeza o con la calculadora y para eso sirven los bucles for: para que no perdamos nuestro tiempo en repetitivas operaciones.

Todos sabemos que tanta notación marea, así que vamos a poner algunos ejemplos más visuales y fáciles de entender:

1. SUMATORIO: Tenemos como dato un vector cuyas componentes son las notas obtenidas por la clase en Biología sobre 10. Para obtener la media de la clase usaremos un bucle for para sumar las componentes del vector para, posteriormente, dividir entre el número de notas.

Tras haber introducido el vector Notas, el valor de vfin, que es el número total de elementos que entran en el bucle (número de "vueltas" que da el bucle)normalmente, se simboliza con la letra n y tras haber inicializado el vector NotaSuma=0 (al ser un sumatorio) hacemos el bucle:

     Notas=c(6, 7.5, 4.3, 8.1, 3.75, 7.1, 6.25, 8.3)     #Vector notas de la clase

    n= length(Notas)    #n es igual al número de componentes del vector Notas...              ¡Cuidado con length!

i= 1     #inicio contador

NotaSuma= 0

for (i in 1:n) {

        NotaSuma= NotaSuma + Notas[i]

   }

   NotaMedia= NotaSuma/n

   NotaMedia

Al ejecutar el programa, R nos devuelve:  6.4125 

Funciones


Al hacer un programa, es mejor escribir primero todas las funciones que se utilizarán y después escribir todo el desarrollo de dicho ejercicio. 

De esta forma, cuando acabemos el desarrollo podremos asignar los valores obtenidos a cada variable de la función y obtener un resultado.


Las funciones en R son fragmentos de código. Dicho código se engloba dentro de una función, a la que se da un nombre determinado, de tal manera que, cada vez que se "llame" a esa función a lo largo de del programa, se va a ejecutar el código o el fragmento de programa que contenga pero con los distintos parámetros que se le exija a la función en cada caso. 

Podemos determinar una función al principio del programa sin que ocurra nada; las funciones solo se ejecutan cuando las "llamamos" (no cuando las definimos). Además, las funciones facilitan la lectura del programa, haciéndolo mucho más entendible.

Las funciones en R se definen como:

Nombre de la función = function (argumento1,argumento2,...){

expresión de la función

}

Las funciones adquieren una gran importancia en la programación y, trabajando con ellas, podemos incluir multitud de procesos como bucles, estructuras condicionales, representación gráfica...

EJEMPLO 1

Un ejemplo de función es:

área_triángulo = function(base, altura){     #el nombre de la función es área_triángulo

area = (base*altura)/2                                    #base y altura son los argumentos

print(paste("el área es ", area))                    #con el comando "paste" hacemos que aparezca la frase escrita dentro del paréntesis cuando R nos da el resultado

}           #la función ya está definida

área_triángulo(base=3, altura=4)              #llamamos a la función y pedimos que calcule para unos parámetros determinados

Tras ejecutar el programa, R nos devuelve: [1] "el área es  6"

EJEMPLO 2: Función con BUCLES FOR

TemperaturaMedia= function(Temperatura,n){  #el nombre de la función es TemperaturaMedia

SumaTemperatura=0

for (i in 1:n){ #abrimos bucle

SumaTemperatura=SumaTemperatura+Temperatura[i] #Temperatura y n son los argumentos

} #cerramos bucle

TMedia= SumaTemperatura/n

print(paste("La temperatura media es", TMedia, "ºC"))

} #la función ya está definida

Temperatura=c(23,31,18,25,15) #damos valores a Temperatura ¡CUIDADO, es un VECTOR!

n=length(Temperatura) #n es igual al número de componentes del vector Temperatura

TemperaturaMedia(Temperatura, n) #llamamos a la función y pedimos que calcule para unos parámetros determinados

Tras ejecutar el programa, R nos devuelve: [1]"La temperatura media es 22.4 ºC"

También existen funciones que integran estructuras condicionales explicadas en la Lección 4.

Representación de funciones

El programa R nos permite representar datos (por ejemplo estadísticos), a través de gráficas, histogramas, diagramas circulares o de barras.

A través de distintos comandos, podemos cambiar los colores, la forma, el tipo de gráfico, los nombres de los ejes, la leyenda de las representaciones. Existen comandos que nos permiten incluso representar dos funciones a la vez en la misma gráfica.

Gracias al comando plot() podemos representar gráficas bidimensionales, asignando un vector a cada eje. Por ejemplo:

a=c(3,2,6,5)

b=c(100,350,220,180)

plot(a,b)

Obtendremos una gráfica con los valores de a en el eje de abscisas y los de b en el eje de ordenadas.

Resultado del programa
Resultado del programa

Además, para dar nombre a los ejes utilizaremos xlab="nombre" e ylab="nombre", por ejemploplot(a,b,xlab="manolito",ylab="pepita").

a=c(3,2,6,5)

b=c(100,350,220,180)

plot(a,b,xlab="manolito",ylab="pepita")

Resultado del programa
Resultado del programa

Si queremos que se unen los puntos con una línea utilizaremos: plot(a,b,type="l")

Y si queremos que aparezcan tanto puntos como líneasplot(a,b,type="b")

En el caso de que queramos representar dos funciones en el mismo gráfico, es decir, que queramos superponerlas, escribiremos:

plot()

par(new=TRUE)

plot()

Si introducimos el comando ?plot en un script, R nos llevará directos a una página web que nos da información sobre los distintos tipos de representaciones que se pueden hacer utilizando plot() en este programa.

Tipos de gráficos

A través de distintas funciones, bucles y operaciones podemos obtener los resultados de nuestro programa expresados en forma de histograma, gráfico circular, un conjunto de puntos...

Aquí os vamos a enseñar cómo debemos tratar nuestro programa para obtener estos resultados.

Hay diferentes formas de representar una función. Así, nos encontramos con los histogramas (gráfica de barras), gráficas circulares, etc. Para representar distintos tipos de funciones, utilizaremos:

1. Para funciones(x, y): el comando plot(), tal y como hemos visto antes.

2. Para gráficos circulares: el comando pie()

NOTA: "pie" en inglés significa pastel, ¡acuérdate de este comando basándote en eso!

3. Para gráficos de barras: el comando barplot()

Para poder explicar este tema de la manera más clara posible utilizaremos ejemplos ¡así puedes ver todo el proceso!

EJEMPLO 1: Gráfico circular

Supongamos que se está haciendo un estudio acerca de los ingresos brutos y netos por cada comunidad autónoma en España. Los pasos a seguir deberán ser:

#Definir nuestros vectores con todos los datos que se van a necesitar

Comunidades=c("Madrid", "Andalucía", "Galicia", "Valencia", "Cataluña")

RentaB=c(200, 100, 150, 250, 300)

RentaN=c(100, 50, 75, 125, 150)

Si queremos representar en forma de gráfico circular las comunidades con sus rentas brutas, escribimos:

names(RentaB)= c("Madrid", "Andalucía", "Galicia", "Valencia", "Cataluña")

pie(RentaB, clockwise=TRUE,col=rainbow(23)) #con "col" se obtiene el color del gráfico, al escribir "rainbow(23)" obtenemos la gama de colores mostrada en la imagen, se puede cambiar y poner otros colores cambiando el número entre paréntesis

EJEMPLO 2: Histograma

Para representar RentaB y RentaN en columnas para cada comunidad, tenemos que definir el programa así:

names(RentaB) =c("Madrid", "Andalucía", "Galicia", "Valencia", "Cataluña")

names(RentaN) =c("Madrid", "Andalucía", "Galicia", "Valencia", "Cataluña")

Renta =rbind(RentaB, RentaN)

barplot(Renta, beside=TRUE, col=c(8,9))   #cambiando los números 8 y 9 podemos cambiar el color de las columnas

legend(x="top", legend=rownames(Renta), col=1:5, fill=c(8,9))      #leyenda

EXTRAS

Dentro de los gráficos plot, se pueden configurar numerosos parámetros, que apoyan la visualización y aportan facilidad para reconocer tendencias.

Para controlar los diversos puntos de la representación gráfica se utiliza el comando pch=, de tal modo que se puede elegir la forma: 

He aquí 3 ejemplos:

1. Puntos como círculos: plot(x, y, pch=1)

2. Puntos como asteriscos: plot(x, y, pch=8) 

3.  Puntos como estrellas: plot(x, y, pch=11)

También es posible editar el color con el que se va a representar la función con el comando "col=".

Para determinar el color que se va a usar es necesario poner el nombre del color en inglés.

Por ejemplo:

x=c(200, 100, 150, 250, 300)

y=c(100, 50, 75, 125, 150) 

plot(x, y, pch=2, col="red") #colorear en rojo

plot(x, y, pch=2, col="blue") #colorear en azul

plot(x, y, pch=2, col="purple")  #colorear en morado

La elección de colores es importante ya que facilita la visualización de los resultados; cobrando aún más importancia cuando se quieren comparar dos o más funciones en una misma cuadra.

Para establecer límites en los ejes: "xlim=c(Xmin,Xmax)" y "ylim=c(Ymin,Ymax)"

x =c(200, 100, 150, 250, 300)

y=c(100, 50, 75, 125, 150)

plot(x, y, xlim=c(75, 200), ylim=c(60, 130))

De esta forma delimitamos, el eje x entre 75 y 200; el eje y entre 60 y 130; quedan fuera los números que estén por encima y por debajo en cada caso.

Para agregar leyenda a un gráfico se utiliza "legend()"

RentaB=c(200, 100, 150, 250, 300)

RentaN=c(100, 50, 75, 125, 150)

names(RentaB) =c("Madrid", "Andalucía", "Galicia", "Valencia", "Cataluña")

names(RentaN)= c("Madrid", "Andalucía", "Galicia", "Valencia", "Cataluña")

Renta =rbind(RentaB, RentaN)

barplot(Renta, beside=TRUE, col=c(8,9))   

legend(x="top", legend=rownames(Renta), col=1:5, fill=c(8,9), title = "Rentas")   

   #al definir la leyenda debemos determinar en qué sitio del gráfico debe aparecer (en este caso arriba, "top")

#después escribimos los nombres de los distintos datos y los colores que los representan, seguidos del título de la gráfica

¡Descarga los apuntes de la Práctica 3!

Ejercicios Práctica 3

¡Descarga los ejercicios en R de la Práctica 3!

Test R Práctica 3

¡Pon a prueba tus conocimientos haciendo este test sobre los contenidos de la Lección 3!   

¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar