Vous êtes sur la page 1sur 8

Programacin en R

Introduccin a la programacin en R
Qu es un programa de ordenador? Un programa de ordenador consiste en una secuencia de instrucciones que un ordenador pueda entender. El procesador de los ordenadores slo es capaz de comprender un nmero limitado de instrucciones, y ello en un lenguaje incomprensible para la mayora de personas. En la prctica, los programas se escriben en otros lenguajes ms inteligibles para los humanos, como Pascal, Fortran, Java, o C, por citar algunos de los ms conocidos. Luego, los programas escritos en estos lenguajes de alto nivel se traducen al lenguaje que entienden los procesadores. Est traduccin la hacen otros programas que se denominan compiladores o intrpretes. Qu es R? R es un dialecto de S. S es un lenguaje que se desarroll para el anlisis de datos, clculos estadsticos, simulacin y grficos. Adems, y eso es lo que nos interesa ms aqu, es un lenguaje de programacin de tipo general. S-Plus es la versin comercial de S. R es la versin en cdigo abierto y gratuita de S. Componentes bsicos de un programa Los programas de ordenador pueden llegar a ser muy complejos, pero, en realidad todos ellos constan de muy pocos componentes. El aprendizaje de los componentes bsicos no es difcil. Esto es especialmente cierto en R, que es un lenguaje de programacin con pocos requerimientos, por lo que se pueden escribir programas sencillos en poco tiempo. Cuando se ejecuta un programa es necesario acceder a la memoria interna del procesador. La mayora de lenguajes no permiten el acceso directo a dicha memoria, sino que el acceso se hace mediante unas entidades denominadas variables. Estas variables pueden contener nmeros, caracteres u otras estructuras ms complejas. A lo largo del programa el contenido de una variable puede cambiar de valor. Los programas se estructuran en sentencias, las cuales se van ejecutando unas detrs de otras. Las sentencias pueden ser simples o complejas. Las sentencias complejas constan de varias sentencias simples. Para que un programa pueda hacer cosas interesantes es necesario que se le permita bifurcarse. Normalmente esto se hace mediante la evaluacin de una condicin lgica. Si sta es cierta el programa hace una cosa y si es falsa hace otra cosa distinta. Los ordenadores son excelentes haciendo tareas repetitivas. Estas tareas que hay que realizar muchas veces se ponen dentro de unas estructuras conocidas como bucles. A veces nos encontramos dentro de un programa con partes muy parecidas, solo que unas veces se aplican a unas variables y otras veces a otras. Los lenguajes de programacin suelen permitir unas estructuras (funciones en R) que pueden ser ejecutadas de forma ligeramente distinta dependiendo de unos parmetros o argumentos que se pasan en el momento de la ejecucin.

J Piol

Taller de Modelizacin

Programacin en R

Variables Las ms elementales que nos encontraremos contendrn nmeros (enteros o reales) o tiras de caracteres. Los nombres de las variables empiezan por una letra que puede ir seguida de ms letras, dgitos o los smbolos punto (.) y subrayado (_). Las letras maysculas y minsculas son tratadas como caracteres distintos. Para dar un valor a una variable se usa el smbolo de asignacin <-. En R, a diferencia de otros lenguajes, no es necesario declarar a priori el nombre y el tipo de las variables. Para crear una variable denominada r que valga 2.5 basta con escribir: r <- 2.5 El signo de asignacin <- se tiene que interpretar como una flecha que apunta a la izquierda y que dice que ponemos el valor 2.5 en la variable r. Para saber el contenido de una variable basta con teclear su nombre r [1] 2.5 Si queremos que una variable contenga una tira de caracteres introduciremos dichos caracteres entre comillas () apellido <- Ferrer Un tipo especial de variables contiene los valores lgicos cierto (TRUE) y falso (FALSE) condicion <- TRUE Muy a menudo conviene guardar varias variables del mismo tipo bajo el mismo nombre. Para ello usamos vectores y para asignarles valores se usa la funcin c primos <- c(1, 2, 3, 5, 7, 11, 13, 17, 19) Se puede acceder al vector entero por su nombre primos [1] 1 2 3 5 7 11 13 17 19

O a uno de sus elementos proporcionando la posicin del mismo (el quinto elemento del vector primos es el nmero 7) primos[5] [1] 7 Operaciones aritmticas Suma Diferencia Producto + *

J Piol

Taller de Modelizacin

Programacin en R

Divisin Divisin entera Mdulo (resto) Potencia Ejemplos: a <- 4 b <- 3 suma <- a + b diferencia <- a producto <- a * division <- a / potencia <- a^b division_entera modulo <- a%%b suma [1] 7 diferencia [1] 1 producto [1] 12 division [1] 1.333333 potencia [1] 64 division_entera [1] 1 modulo [1] 1

/ %/% %% ^

- b b b <- a %/% b

A diferencia de otros lenguajes de programacin, R puede efectuar operaciones directamente con vectores. Es fcil, por ejemplo, obtener el cuadrado de cada uno de los elementos contenidos en el vector primos primos^2 [1] 1

25

49 121 169 289 361

Bifurcaciones A veces nos interesa ejecutar alguna parte del programa dependiendo de alguna condicin. Para ello R dispone de la instruccin if: alpha <- 2 if (alpha > 1) x <- 99 x [1] 99 Si la sentencia que se desea ejecutar cuando se cumple la condicin es compleja, es decir, est compuesta de varias sentencias simples, entonces estas deben agruparse dentro de los smbolos { y }. Las sentencias simples se separan unas de otras mediante el smbolo ; o mediante el salto de lnea.

J Piol

Taller de Modelizacin

Programacin en R

alpha <- 2 if (alpha > 1){ x <- 99 y <- 999} x [1] 99 y [1] 999 A menudo nos interesa indicar tambin lo que se debe hacer si no se cumple la condicin. Para ello tenemos una variacin de la sentencia if que es if else alpha <- 0 if (alpha > 1) x <- 99 else x <- -99 x [1] -99 La sentencia que sigue a else puede ser a su vez una sentencia if, de forma que se pueden encadenar una serie de secuencias if else if else alpha <- 1 if (alpha > 1) x <- 99 else if (alpha < 1) x <- -99 else x <- 0 x [1] 0 Bucles Hay dos tipos de bucles dependiendo de si conocemos de antemano el nmero de veces que hay que repetirlo (iteraciones). Si sabemos a priori el nmero de iteraciones la instruccin en R es for; por el contrario, si el nmero de iteraciones depende de los clculos que se efecten en el propio bucle la instruccin adecuada en R es while. Por ejemplo, si deseamos calcular e imprimir los cuadrados de los 10 primeros nmeros naturales bastan con for [1] [1] [1] [1] [1] [1] [1] [1] [1] [1] (i in 1:10) print(i^2) 1 4 9 16 25 36 49 64 81 100

La variable i del bucle anterior se denomina variable de control del bucle. En el parntesis que sigue a for indicamos el nombre de la variables de control y como debe variar mediante la instruccin in (entre 1 y 10 en este ejemplo). Aunque puede hacerse, es desaconsejable alterar dicho valor dentro del mismo bucle for.

J Piol

Taller de Modelizacin

Programacin en R

Por supuesto, la sentencia que sigue a for puede ser compleja. Por ejemplo, si deseamos generar cinco nmeros aleatorios de distribucin uniforme entre 0 y 1 (funcin runif) e imprimirlos basta con for (i in 1:5){ x <- runif(1) print(x) } [1] 0.5627295 [1] 0.8562093 [1] 0.3574094 [1] 0.9727754 [1] 0.6712237 Supongamos ahora que queremos escribir todos los nmeros naturales cuyo cubo sea inferior a 100. Un bucle while nos permite hacerlo fcilmente: i <- 1 i3 <- i^3 while (i3 < 100){ cat(i, i3, "\n") i <- i + 1 i3 <- i^3 } La palabra clave while va seguida de una condicin. Si la condicin es cierta se ejecuta la sentencia (compleja en este caso) que sigue. Despus de ejecutar la sentencia se evala de nueva la misma condicin (ahora con un valor distinto de i3) y si es cierta se ejecuta de nuevo. Cuando deja de cumplirse la condicin el programa prosigue con la siguiente sentencia. Dentro del bucle se escribe el nmero natural que cumple la condicin de que su cubo es menor que 100, se incrementa a cada paso la variable de control y se calcula el nuevo cubo. En este caso usamos la funcin cat para imprimir el resultado en lugar de la funcin print; cat permite concatenar el output ("\n" indica salto de lnea). Funciones Una de las grandes ventajas de trabajar con R es que dispone de una gran cantidad de funciones escritas por miles de programadores en todo el mundo y puestas a nuestra disposicin en Internet. Pero no siempre existir la funcin que nosotros queramos, por lo que tambin es conveniente que sepamos crear nuestras propias funciones. Una funcin se define de la siguiente forma nombre <- function (lista_de_parametros) cuerpo_de_la_funcion donde nombre es el nombre de la funcin, function es una palabra reservada que indica que lo que sigue es una funcin, lista_de_parametros es una lista separada por comas que contiene los parmetros que se pueden pasar a la funcin y cuerpo_de_la_funcion es una serie de sentencias vlidas en R, normalmente incluidas dentro de los smbolos { y }.

J Piol

Taller de Modelizacin

Programacin en R

Una vez definida la funcin se puede invocar desde nuestro programa de la forma siguiente x <- nombre (par1, par2, par3) En la variable x obtendremos el resultado de aplicar la funcin nombre a los parmetros indicados (par1, par2, par3, en este ejemplo). Entenderemos mejor su funcionamiento con un ejemplo. R dispone de la funcin log para calcular el logaritmo natural de un nmero. Tambin dispone de las funciones log2 y log10 para calcular los logaritmos en base 2 y base 10, respectivamente. Estas funciones se pueden invocar directamente puesto que ya vienen en la implementacin por defecto de R: x <- log10(1000) x [1] 3 Supongamos que nosotros tuviramos que efectuar en nuestro programa repetidas veces el clculo del logaritmos en base 5 de un nmero. Para facilitar nuestra tarea lo mejor sera crear una funcin log5 que efectuara el clculo. Veamos como: # devuelve el logaritmo en base 5 de un nmero log5 <- function(x){ y <- log(x) / log(5) return(y) } La instruccin return le dice a la funcin el valor que debe devolver. No es necesario que toda funcin contenga la instruccin return; hay muchas funciones que efectan distintas tareas sin necesidad de devolver un resultado. La invocacin de log5 nos proporciona el resultado deseado log5(25) [1] 2 Ms general todava sera la siguiente funcin que calcula logaritmos en cualquier base #Devuelve el logaritmo de un nmero en la base indicada logBase <- function(x, base){ y <- log(x) / log(base) return(y) }

J Piol

Taller de Modelizacin

Programacin en R

Ejercicios 1. Escribir un programa que intercambie los valores de dos variables denominadas x e y. 2. Escribir un programa que escriba Hola si el valor de la variable x es menor que 0.5 y que escriba Adis si x es mayor que 0.5. 3. Escribir un programa que genere 1000 nmeros aleatorios (con distribucin uniforme entre 0 y 1), que cuente los que son mayores y los que son menores o iguales que 0.5 y que escriba la respuesta. [Podemos generar los 100 nmeros aleatorios en una sola instruccin de la siguiente forma: x <runif(1000)] 4. Escribir un programa que genere los primeros cien trminos de la serie de Fibonacci. 5. Calcular el cociente entre trminos consecutivos de la serie de Fibonacci y representar dichos valores. [La funcin plot(x) dibuja los valores del vector x] 6. Escribir un programa que genere nmeros aleatorios (con distribucin uniforme entre 0 y 1) hasta que encuentre uno que sea mayor que 0.9999 y que diga cuantos intentos ha necesitado. 7. Escribir una funcin que devuelva el valor medio de dos nmeros. 8. Generar un vector de n nmeros aleatorios con distribucin normal y mostrar el valor mayor de todos. [rnorm(n, mean=0, sd=1) genera n nmeros aleatorios con distribucin normal de media 0 y desviacin tpica 1] 9. Hacer un programa que simule el crecimiento exponencial de una poblacin con tasa finita de crecimiento y poblacin inicial N0. Hacer un grfico con el tamao poblacional hasta un tiempo t = 100. 10. **Generar un vector de n nmeros aleatorios y mostrarlo ordenado de mayor a menor. Obtencin, instalacin y ejecucin de R R se ha desarrollado para las plataformas Unix, Windows y MAcOS. El copyright de R pertenece a The R Foundation for Statistical Computing, aunque se trata de software libre, por lo que su utilizacin es libre y gratuita. Los archivos de R se encuentran en el Comprehensive R Archive Network, o CRAN, en http://cran.r-project.org. En esta direccin se pueden descargar los archivos y la documentacin necesaria para instalar R en nuestro ordenador. El archivo principal que se necesita es el de instalacin (setup file); en el momento de redactar este documento, el nombre del archivo de instalacin era R-2.5.1-win32.exe, lo que indica que se trata de la versin 2.5.1 de R. Este archivo es autoejecutable y instalar R automticamente en nuestro ordenador una vez finalizada la descarga (de unas 29 MBytes). Para ejecutar R basta con clicar sobre el icono de R. Una vez iniciado el programa se puede obtener abundante informacin adicional sobre R mediante la ayuda del propio programa. En particular, es conveniente acudir a los manuales en pdf que contiene.

J Piol

Taller de Modelizacin

Programacin en R

Con la operacin anterior se habr instalado la versin bsica de R. Sin embargo, existen numerosas libreras de funciones de R que pueden sernos de utilidad en algn momento y que hay que instalar manualmente. Algunas de estas funciones se han descargado a nuestro ordenador con la instalacin efectuada pero no se cargan automticamente al ejecutar R. Podemos cargar estas libreras con la instruccin Load package de la pestaa Packages del programa. Alternativamente, podemos utilizar la instruccin library library(lattice) En este ejemplo se ha cargado la librera lattice, con la que es posible realizar un gran nmero de representaciones grficas. Teclear help(lattice) en R para obtener ms informacin. Hay otras libreras que no se han descargado a nuestro ordenador con la configuracin bsica. Si deseamos utilizar alguna de ellas se deben descargar manualmente (normalmente en formato zip) e instalar con la instruccin Install packages from local zip files de la pestaa Packages del programa. Una vez realizada esta operacin hay que cargar la librara deseada con la instruccin library. Instalacin y ejecucin de Tinn-R Tinn-R es un editor para escribir programas en R. No es imprescindible, ya que los programas se pueden escribir como scripts en el editor que proporciona el propio compilador de R (Rgui). Sin embargo, Tinn-R facilita notablemente esta tarea. Tinn-R es, al igual que R, un software de utilizacin libre y gratuita. Se puede descargar en https://sourceforge.net/projects/tinn-r. En el momento de redactar este documento el fichero de instalacin (setup) era Tinn-R_2.3.2.3_setup.exe, el cual instalaba la versin 1.19.2.3 de Tinn-R. Una vez instalado, podemos ejecutar Tinn-R clicando sobre el icono correspondiente. El programa tiene un conjunto de mens ms o menos estndar que permite abrir o crear nuevos ficheros de cdigo (men File), o trabajar con conjuntos de ficheros relacionados (men Project). Una de las ventajas de Tinn-R sobre el editor de Rgui es que Tinn-R resalta la sintaxis utilizando colores distintos para indicar diferentes tipos de cdigo, lo cual facilita mucho la deteccin de errores. Por ejemplo, los fragmentos comentados (#) se muestran en color verde y en cursiva; las palabras reservadas (funciones y parmetros de R, por ejemplo) se muestran en rojo, azul y fucsia, dependiendo de su tipo; mientras que los valores numricos y las variables creadas por el usuario se muestran en negro. Tinn-R ofrece tambin opciones avanzadas de bsqueda, formato y visualizacin. Una vez escrito el programa de R utilizando Tinn-R, lo primero que hemos de hacer para ejecutarlo es abrir la consola de R (opcin R: Start preferred Rgui). Una vez hecho esto podemos ejecutar todo el cdigo de una vez (R: Send to R: All) o por fragmentos (R: Send to R: Selection), lo cual facilita mucho tanto la deteccin de errores como la construccin del cdigo de una manera modular. Tinn-R permite tambin interactuar con la consola de R para controlar la ejecucin de los programas mediante la opcin R: Controlling R. Se puede obtener abundante informacin adicional consultando la ayuda que ofrece el propio programa.

J Piol

Taller de Modelizacin

Vous aimerez peut-être aussi