Post on 06-Feb-2018
Curso de Programacin en RIbon Martnez
http://fdesnedecor.wordpress.com/
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 1/35
Programacin Prctica con R
Ya que hemos echado un vistazo general a la funcionalidad de R, volvamos
por un momento a su uso como lenguaje de programacin. Veremosdiferentes ejemplos e intentaremos implementarlos en R.
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 2/35
Variables
Hay que considerar que cuando se programa en R podemos utilizar todos losobjetos de R: Data frames, Listas, Arrays, Matrices, Vectores, . . . . Adems,
cada objeto est compuesto de un tipo bsico de elementos, que pueden ser:
integer
double
character
logical: que puede tomar los valores TRUE, FALSE o NA.
factor o categorical
En R no hace definir previamente las variables, nicamente se asigna el valorque queramos.
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 3/35
Variables
> a a
[1] 3
> v v
[1] TRUE FALSE TRUE
> t t
[1] "Una cadena de texto"
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 4/35
Variables
Como hemos visto, l modo de asignacin por defecto es assign("mivariable", 3.141592)
> mivariable
[1] 3.141592
> "prueba" "prueba"
[1] "prueba"
> get("prueba")
[1] 10
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 5/35
Bucles y vectorizacin
Una ventaja de R comparado con otros programas estadsticos con menus y
botones es la posibilidad de programar de una manera muy sencilla una seriede anlisis que se puedan ejecutar de manera sucesiva.
Esto es comn a cualquier otro lenguaje de programacin, pero R poseecaractersticas muy particulares que hacen posible programar sin muchos
conocimientos o experiencia previa en programacin.
Como en otros lenguajes, R posee estructuras de control que no son muy
diferentes a las de un lenguaje de alto nivel como C, C++, VB, FORTRAN, . . .Supongamos que tenemos un vector x, y para cada elemento de x con valor
igual a b, queremos asignar el valor 0 a otra variable y, o sino asignarle 1.Primero creamos un vector y de la misma longitud de x:
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 6/35
Bucles y vectorizacin
> b x y for (i in 1:length(x)) if (x[i] == b) y[i] y
[1] 1 1 1 1 0
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 7/35
Bucles y vectorizacin
Tambin se pueden usar corchetes para ejecutar varias instrucciones:
> for (i in 1:length(x)) {
+ y[i] if (x[i] == b) {
+ y[i]
Bucles y vectorizacin
Sin embargo, este tipo de bucles y estructuras se pueden evitar gracias a una
caracterstica clave en R: vectorizacin. La vectorizacin hace los buclesimplcitos en las expresiones. Por ejemplo, consideremos la suma de dos
vectores:
> z x
[1] 4 5 2 1 3
> y
[1] 1 1 1 1 0
> z
[1] 5 6 3 2 3
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 9/35
Bucles y vectorizacin
Esta suma se hubiera podido escribir como un bucle, como se hace enmuchos otros lenguajes:
> z for (i in 1:length(z)) z[i] z
[1] 5 6 3 2 3
En este caso, es necesario crear con anterioridad el vector z por la necesidadde indexar los elementos. Es fcil ver que este bucle explcito solo funciona si
x e y son de la misma longitud.
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 10/35
Bucles y vectorizacin
Las ejecuciones condicionales (if . . . else) se pueden evitar con el uso de
indexacin lgica; volviendo al ejemplo anterior:
> x == b
[1] FALSE FALSE FALSE FALSE TRUE
> y[x == b] y[x != b]
Bucles y vectorizacin
Tambin existen varias funciones del tipo applya que evitan el uso de bucles.
La funcin apply() acta sobre las filas o columnas de una matriz, y su sintaxises apply(X, MARGIN, FUN, . . . ), donde X es una matriz, MARGIN indica si se
van a usar las filas (1), las columnas (2), o ambas (c(1, 2)), FUN es unafuncin (o un operador, pero en este caso debe especificarse en corchetes) a
ser aplicada.
> x y X apply(X, 2, mean)
x y
-5.005757 5.336591
aapply, lapply, mapply, sapply, tapply
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 12/35
Bucles y vectorizacin
La funcin lapply() acta sobre una lista. Su sintaxis es similar a la de apply y
devuelve una lista.
> forms lapply(forms, lm)
[[1]]
Call:
FUN(formula = X[[1L]])
Coefficients:
(Intercept) x
36.152 6.156
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 13/35
Bucles y vectorizacin
La funcin sapply() es una variacin ms flexible de lapply() que puede tomar
un vector o una matriz como argumento principal, y devuelve los resultados enuna manera ms amigable, generalmente en una tabla.
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 14/35
Escribiendo un programa en R
Los programas en R se escriben en un archivo que se guarda en formato
ASCII con terminacin .R. Un programa se usa cuando uno quiere hacer unao varias operaciones muchas veces. En nuestro primer ejemplo, queremos
hacer el mismo alisis de regresin para una serie de datos que estn en tresarchivos diferentes. Procederemos paso a paso y veremos diferentes maneras
de programar este problema.
Primero, hagamos nuestro programa de la manera ms intuitiva posible
ejecutando sucesivamente los comandos necesarios, teniendo cuidado departicionar el dispositivo grfico con anterioridad.
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 15/35
Escribiendo un programa en R
> layout(matrix(1:3, 1, 3))
> data plot(data$Sepal.Length, data$Sepal.Width, type = "p")
> title("setosa")
> data plot(data$Sepal.Length, data$Sepal.Width, type = "p")
> title("versicolor")
> data plot(data$Sepal.Length, data$Sepal.Width, type = "p")
> title("virginica")
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 16/35
Escribiendo un programa en R
4.5 5.0 5.5
2.5
3.0
3.5
4.0
data$Sepal.Length
data
$Sep
al.W
idth
setosa
5.0 5.5 6.0 6.5 7.0
2.0
2.4
2.8
3.2
data$Sepal.Length
data
$Sep
al.W
idth
versicolor
5.0 6.0 7.0 8.0
2.5
3.0
3.5
data$Sepal.Length
data
$Sep
al.W
idth
virginica
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 17/35
Escribiendo un programa en R
El problema del primer programa es que se puede volver bastante largo siqueremos agregar otras especies. Ms an, algunos comandos se ejecutan
varias veces, y por lo tanto, se pueden agrupar y ejecutar juntos cambiandoalgunos argumentos. La estrategia que usamos aqui es poner estos
argumentos en vectores de tipo caracter, y despus usar indexacin paraacceder a los diferentes valores.
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 18/35
Escribiendo un programa en R
> layout(matrix(1:3, 1, 3))
> especie fichero for (i in 1:length(especie)) {
+ data
Escribiendo un programa en R
4.5 5.0 5.5
2.5
3.0
3.5
4.0
data$Sepal.Length
data
$Sep
al.W
idth
setosa
5.0 5.5 6.0 6.5 7.0
2.0
2.4
2.8
3.2
data$Sepal.Length
data
$Sep
al.W
idth
versicolor
5.0 6.0 7.0 8.0
2.5
3.0
3.5
data$Sepal.Length
data
$Sep
al.W
idth
virginica
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 20/35
Escribiendo un programa en R
Observamos que el argumento file[i] no se pone entre comillas en read.table()
ya que este argumento ya es de tipo caracter.
Ahora nuestro programa es mucho ms compacto. Es ms fcil agregar otras
especies ya que los nombres de las mismas estn en vectores al principio delprograma.
Los programas anteriores funcionarn correctamente siempre y cuando losarchivos de datos .dat estn localizados en el directorio de trabajo de R; de
lo contrario el usuario debe cambiar el directorio de trabajo o especificar ladireccin completa en el programaa
aImportancia de las estructuras de carpetas y ficheros
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 21/35
Creando nuestras funciones en R
Hemos visto que la mayor parte del trabajo en R se realiza a travs de
funciones con sus respectivos argumentos entre parntesis. R nos permiteescribir nuestras propias funciones.
sto, nos permite un uso flexible, eficiente y racional de R. Volvamos anuestro ejemplo donde leemos unos datos y dibujamos una grfica de los
mismos. Si deseamos hacer esta operacin en diferentes situaciones, puedeser una buena idea escribir una funcin:
http://fdesnedecor.wordpress.com/, Agosto 2011 p. 22/35
Creando nuestras funciones en R
> mifun
Creando nuestras funciones en R
Para que esta funcin pueda ser ejecutada, primero es necesario cargarla en
memoria, y esto se puede hacer de varias maneras. Las lneas de la funcinse pueden escribir directamente desde el teclado, como cualquier otro
comando, o ser copiada y pegada a un editor de texto. Si la funcin estguardada en un archivo ASCII, se pu