Está en la página 1de 8

Programacin en R 1

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, J ava, 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 2
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 ()

apel l i do <- Fer r er

Un tipo especial de variables contiene los valores lgicos cierto (TRUE) y falso (FALSE)

condi ci on <- 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

pr i mos <- c( 1, 2, 3, 5, 7, 11, 13, 17, 19)

Se puede acceder al vector entero por su nombre

pr i mos
[ 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 pr i mos es el nmero 7)

pr i mos[ 5]
[ 1] 7

Operaciones aritmticas

Suma +
Diferencia -
Producto *
J Piol Taller de Modelizacin
Programacin en R 3
Divisin /
Divisin entera %/%
Mdulo (resto) %%
Potencia ^

Ejemplos:
a <- 4
b <- 3
suma <- a + b
di f er enci a <- a - b
pr oduct o <- a * b
di vi si on <- a / b
pot enci a <- a^b
di vi si on_ent er a <- a %/ %b
modul o <- a%%b
suma
[ 1] 7
di f er enci a
[ 1] 1
pr oduct o
[ 1] 12
di vi si on
[ 1] 1. 333333
pot enci a
[ 1] 64
di vi si on_ent er a
[ 1] 1
modul o
[ 1] 1

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 pr i mos

pr i mos^2
[ 1] 1 4 9 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 i f :

al pha <- 2
i f ( al pha > 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 4
al pha <- 2
i f ( al pha > 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 i f que es i f el se

al pha <- 0
i f ( al pha > 1) x <- 99 el se x <- - 99
x
[ 1] - 99

La sentencia que sigue a else puede ser a su vez una sentencia i f , de forma que se
pueden encadenar una serie de secuencias i f el se i f el se

al pha <- 1
i f ( al pha > 1) x <- 99 el se i f ( al pha < 1) x <- - 99 el se 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 f or ; 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 whi l e.

Por ejemplo, si deseamos calcular e imprimir los cuadrados de los 10 primeros
nmeros naturales bastan con

f or ( i i n 1: 10) pr i nt ( i ^2)
[ 1] 1
[ 1] 4
[ 1] 9
[ 1] 16
[ 1] 25
[ 1] 36
[ 1] 49
[ 1] 64
[ 1] 81
[ 1] 100

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

J Piol Taller de Modelizacin
Programacin en R 5
Por supuesto, la sentencia que sigue a f or puede ser compleja. Por ejemplo, si
deseamos generar cinco nmeros aleatorios de distribucin uniforme entre 0 y 1
(funcin r uni f ) e imprimirlos basta con

f or ( i i n 1: 5) {
x <- r uni f ( 1)
pr i nt ( 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 whi l e nos permite hacerlo fcilmente:

i <- 1
i 3 <- i ^3
whi l e ( i 3 < 100) {
cat ( i , i 3, " \ n" )
i <- i + 1
i 3 <- i ^3
}

La palabra clave whi l e 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 i 3) 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 pr i nt ; 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

nombr e <- f unct i on ( l i st a_de_par amet r os) cuer po_de_l a_f unci on

donde nombr e es el nombre de la funcin, f unct i on es una palabra reservada que
indica que lo que sigue es una funcin, l i st a_de_par amet r os es una lista separada
por comas que contiene los parmetros que se pueden pasar a la funcin y
cuer po_de_l a_f unci on es una serie de sentencias vlidas en R, normalmente
incluidas dentro de los smbolos { y }.
J Piol Taller de Modelizacin
Programacin en R 6

Una vez definida la funcin se puede invocar desde nuestro programa de la forma
siguiente

x <- nombr e ( par 1, par 2, par 3)

En la variable x obtendremos el resultado de aplicar la funcin nombr e a los
parmetros indicados (par 1, par 2, par 3, en este ejemplo).

Entenderemos mejor su funcionamiento con un ejemplo. R dispone de la funcin l og
para calcular el logaritmo natural de un nmero. Tambin dispone de las funciones
l og2 y l og10 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 <- l og10( 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 l og5 que efectuara el clculo. Veamos como:

# devuel ve el l ogar i t mo en base 5 de un nmer o
l og5 <- f unct i on( x) {
y <- l og( x) / l og( 5)
r et ur n( y)
}

La instruccin r et ur n le dice a la funcin el valor que debe devolver. No es necesario
que toda funcin contenga la instruccin r et ur n; hay muchas funciones que efectan
distintas tareas sin necesidad de devolver un resultado.

La invocacin de l og5 nos proporciona el resultado deseado

l og5( 25)
[ 1] 2

Ms general todava sera la siguiente funcin que calcula logaritmos en cualquier base

#Devuel ve el l ogar i t mo de un nmer o en l a base i ndi cada
l ogBase <- f unct i on( x, base) {
y <- l og( x) / l og( base)
r et ur n( y)
}

J Piol Taller de Modelizacin
Programacin en R 7
Ejercicios

1. Escribir un programa que intercambie los valores de dos variables denominadas
x e y.
2. Escribir un programa que escriba Hol a si el valor de la variable x es menor
que 0.5 y que escriba Adi s 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 <-
r uni f ( 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 pl ot ( 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. [r nor m( 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 N
0
. 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 ht t p: / / cr an. r - pr oj ect . or g. 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- wi n32. 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 8
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

l i br ar y( l at t i ce)

En este ejemplo se ha cargado la librera l at t i ce, con la que es posible realizar un
gran nmero de representaciones grficas. Teclear hel p( l at t i ce) 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 l i br ar y.

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

También podría gustarte