Está en la página 1de 90

Introducción a R utilizando

Rstudio y Rstudio-server

Por Edwin Aguiar


INTA EEA Corrientes (Grupo Tics Corrientes)

Esta obra está licenciada bajo la Licencia Creative Commons Atribución –No Comercial- Compartir Igual 3.0
Unported. Para ver una copia de esta licencia, visita http://creativecommons.org/licenses/by-nc-sa/3.0/.

1 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Índice
Introducción, sentido y alcance 2

1 ¿Por qué no Excel? 2


2 ¿Qué se necesita para usar este manual? 3
3 Conocer la interfaz de Rstudio 5
4 Panel de script 5
5 Abrir un script 6
6 Crear un script 6
7 Panel consola (Console) 6
8 Panel espacio de trabajo (Workspace) 8
9 Panel de Archivos, Paquetes, Graficas y Ayuda 10

El lenguaje R y algunas funciones 11


1 Presupuestos básicos 11
2 Iniciando R 11
3 Objetos como entidades 13
4 operaciones con objetos 14

Algunos objetos en particular 15


1 introducción al tipo de datos 15
2 vectores (arrays o arreglos) 17
a. Una definición formal, creación y manipulación 17
b. Operación con vectores 19
c. Operaciones entre un vector, operadores y funciones 20
d. Operaciones entre vectores 21
e. Poner nombres al índice: una razón 22
f. Vectores de caracteres 22
g. Vectores lógicos, introducción a la lógica matemática 24
3 Factores: un ordenamiento categórico 24
4 Matrices: definiciones y operaciones 25
a. Operaciones elementales sobre matrices 25
b. Operaciones con filas o columnas en matrices 29
c. Un ejemplo real de trabajo con una matriz 31
d. Mas operaciones y funciones con matrices 32
5 Listas 33
a. Aplicando funciones a listas vectores y matrices 37
6. Series temporales 38
7. Dataframes 39
8. Operadores y funciones 41
a. Una noticia, varios ejercicios 43
b. Como hacer secuencias numéricas 45
9. Leer y guardar datos 46
a. Repositorio de datos 46
b. Para comenzar e iniciar sesión en Rstudio 46
c. Configurar directorio de trabajo 49
d. Errores 49
e. Lecturas desde archivos 50

2 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


f. Escritura hacia archivos 52
g. Desde la web 53
h. Excel y otros tipos de formatos 53
i. Conexiones ODBC, lectura y escritura en Bases de Datos 54
j. Introducción al mundo de las Bases de Datos Relacionales 56
k. R y MySql 57
l. Conductos ODBC 58
m. Como grabar datos en MySql 58
n. Otra forma de guardar en MySql 59

Creación de un proyecto partiendo de cero 60


a. Pasos del proyecto 62
b. Fuente de datos 62
c. Iniciando el proyecto 63
d. A escribir se ha dicho 64
e. Distancias (concepto) 65
f. Conclusión del dendograma 66
g. Guardando gráficos 66
h. Finalizando el proyecto 67

Librerías en R 68
a. Librerías precargadas 68
b. Librerías que no están cargadas ni instaladas 69
c. ¿Y si no tengo internet? 70
d. Repositorios de R 71

Graficas con R y Rstudio 73


a. Índice y ejemplos de algunas funciones graficadoras 73
b. Las distribuciones en 3D 74
c. Aspectos generales sobre gráficos 79
d. Ejemplos de plot() 79
e. Uso de barplot() 80
f. Realizar varios gráficos en una sola pantalla 80
g. Parámetros adicionales a los gráficos 81
h. Ejemplo de grafica bidimensional 81
i. Ejemplo de graficación multidimensional 85
j. Concluyendo 87

Bibliografia 89

3 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Introducción: sentido y alcances
La intención de este documento no es ser un manual ni una guía de R, sino solo una exposición de
algunos métodos para trabajar R mediante la interfaz de Rstudio, esta es una aplicación grafica
(frontend) de R y un servidor de R que permite el uso desde cualquier punto de la red interna o
externa que posea la capacidad de conexión a dicho servicio. Además tratamos sobre como se
complementa con el acceso y trabajo en MySql, una base de datos relacional que nos permite
cargar también remotamente los datos de nuestros trabajos/investigaciones y luego desde un
script de R ejecutar las operaciones estadísticas, de calculo o de minería de datos que
necesitemos.

1. ¿Por qué no Excel?


Las ventajas de este sistema están dadas por varios
Nota 1
factores. El primero es la seguridad (un servidor es mas
seguro y eficiente en términos generales que una pc Aunque este documento verse sobre
individual, ya que cuenta con sistemas de contingencias Rstudio server y su uso a través del
navegador web, es perfectamente
eléctricas, seguridad física y lógica, actualización y backup
aplicable a un Rstudio instalado en su pc.
permanente, etc); la disponibilidad (porque al no estar
físicamente en ningún lado pero si virtualmente en la
nube o en una red LAN permite acceder desde cualquier punto conectado); la no instalación y
mantenimiento de otro programa en una pc sobrecargada con el riesgo consiguiente de fallo o
perdida de datos por colapso de dicha pc; el acceso seguro desde cualquier plataforma que integre
la web (Android, Apple IOS, Linux, Windows) con independencia total del hardware que usted
utilice y finalmente que esta configuración de servers de R y Mysql son de uso libre y gratuito (no
poseen licencias de pago) y de uso intenso por investigadores y científicos de todas las
universidades, organismos de investigación y desarrollo, gobiernos, empresas y particulares.

Al respecto sobre el uso de Excel como base de datos, nos advierte el Dr Duncan Golicher 1

…”muchos estudiantes piensan que una hoja de cálculo como Excel es una base de datos. No lo es.
Manejar Excel como una base de datos relacionada es posible, pero no es nada fácil, ni para
usuarios expertos que saben programar en Visual Basic para aplicaciones. Para un usuario normal
sin experiencia con bases de datos sería imposible manejar datos con una estructura jerárquica
compleja en Excel. En cambio, muchas cosas que son difíciles en Excel son fáciles en una base de
datos1. Además la exportación de datos de una base de datos a Excel para su procesamiento
siempre es fácil. Hasta con ODBC se puede hacer una conexión directo para que Excel puede usar la
potencia del “structured query language” directamente.

Es común encontrar una resistencia a tomar el camino del uso de bases de datos entre usuarios con
algo de experiencia intermedia con Excel. Al tener contacto con una base de datos de verdad como
Access, MySQL o PostgreSQL usuarios quienes han encontrado sus propios métodos de lograr
resultados en Excel frecuentemente se quejan que el programa no les deja estructurar y capturar

1
“Como mantener tus datos de investigación ordenados” Duncan Golicher, February 13, 2008

4 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


los datos como quieren. ¡Exactamente! Muy bien. Esta es precisamente su mayor ventaja. Si
quieres mantener tus datos con una estructura que no es posible en una base de datos, entonces
estas ciertamente pensando en una estructura equivocada para tus datos. Por todo lo lógico que te
parezca, tu estructura casi siempre va a ser difícil de comunicar a los demás y probablemente va a
causarte muchos problemas al largo plazo.”

En la imagen lateral podemos


apreciar el software RStudio
corriendo desde un navegador
WEB en un entorno Windows
7. En el detalle de la consola
se aprecia que R corre en un
servidor Linux (Debian). En el
escritorio de Windows
también se aprecian
avanzadas herramientas de
investigación botánica(“Plants
vs Zombies”).

La creación de un servidor con Debian (Linux), la instalación y funcionamiento del servidor de


bases de datos MySql, la creación de conductos ODBC, la instalación y configuración de Rstudio
server, la administración de usuarios que acceden a R la Nota 2
dejaremos para otro documento, ya que se requieren
conocimientos específicos sobre varias cuestiones ¿Por qué Debian? Rstudio server puede ser
adaptado para cualquier distribución de
anexas, en esta guia solo nos enfocaremos en el usuario,
Linux, en Debian ya ha sido ajustada
un técnico o profesional de otras ciencias que requiera el (compilada) para trabajar con solo dos
uso de R dentro de un entorno institucional o en su clics. En Windows no es posible correr el
propio sistema. server de Rstudio, salvo, claro esta, que
virtualicemos con VirtualBox (Oracle) el
2. ¿Que se necesita para utilizar este manual? mencionado Debian. Esto solo tendría
La lista de requerimientos: sentido en una red lan en la que varias
maquinas utilicen Rstudio, si es solo una
individual Rstudio (no server) corre en
• Una pc, con acceso a internet
Windows y Linux sin mas tramite que
• Conocimientos sobre estadísticas y matemáticas instalar R previamente.
acordes a su profesión
• Quizás 1500 cc de masa encefálica, aunque esto
puede ser optativo

Partimos del presupuesto básico que el usuario posee las nociones de estadística básicas,
distribuciones, etc., que incluso haya utilizado Infostat, este software es en realidad un frontend
de R. Es decir que el núcleo de Infostat es R. De hecho R es una consola de comandos, lo que
hacen programas como RComander, Rstudio e Infostat es presentar una interfaz amigable para
evitar pasos intermedios o el tipeo de una serie de parámetros que son quienes ejecutan las

5 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


sentencias y provocan las salidas de pantalla. De todas maneras si no posee experiencia en
Infostat o R este manual tratara de guiarlo mediante un esquema de conocimiento basado en un
crecimiento secuencial mediante la practica del texto.

No tema meter manos en Rstudio, siga las indicaciones de los ejemplos y profundice con sus
propias necesidades las lagunas que necesariamente contiene este documento.

3. Conocer la interfaz de Rstudio


En la imagen vemos que hay
cuatro paneles iniciales, los
dos verticales de la derecha
y dos de fondo oscuro a la
izquierda. En todos ellos es
posible configurar pestañas
que a su vez contienen
otros elementos. Sus
nombres, de izquierda a
derecha verticalmente, son:

• Panel de script o de “source” o código fuente del script, arriba a la izquierda.


• Panel de consola o salida de R, abajo a la izquierda.
• Panel de Espacio de trabajo, variables o historia; arriba a la derecha.
• Panel de ayuda, salida grafica, paquetes etc; abajo a la derecha

4. Panel de Script
Este primer panel es donde
cargamos desde un archivo
con extension “.r”, por
ejemplo “script_algo.r” o
creamos el codigo que
deseamos que ejecute R (y
luego guardamos). Para
cargar un script ya existente
se hace desde el menu

File  Open File o desde la carpeta debajo de iconos del menu. Tambien existe un atajo de
teclado CTRL+O que abre el menu de donde seleccionamos el script que necesitamos. Estos, como
mencionamos en un parrafo anterior, se distinguen por su extension es “.R” En el ejemplo de la
imagen el script guardado es “script_conexionDB.R”.

Los nombres de sus script los determina ud, debe tener en cuenta que tengan una nomenclatura
que le recuerde el objeto del mismo y su version. Es muy comun despues de un tiempo olvidarse
para que era tal o cual, o como se llamaba ese que esta buscando. Tambien a ese respécto es una
buena idea comentar el codigo que se escribe, con aclaraciones sobre el objeto de cada paso.

6 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Tambien es usual que se usen varios scripts en un solo proyecto, ya que ellos realizarian un trabajo
determinado cada uno; de esta forma es posible reutilizar los mismos en varias cosas sin tener
necesidad de escribir un solo script largo y complejo. En programacion a esto se le denomina
“dividir para vencer”, resolver el problema por partes sencillas que conforman una solucion
general.

5. Abrir un script
Al seleccionarlo aparece el panel de script (si no estaba) y
Nota 3
el codigo. En este ejemplo es un conector a una base de
datos para obtener una variable llamada “bruto” desde ¿Qué es una base de datos relacional y
MySql? Una base de datos es una colección
una tabla “Datos”. Para simplificar hemos restringido los
de tablas que contienen registros y se
datos a solo 100, ya que la “Datos” posee mas de 15mil hallan relacionadas entre si por algún tipo
registros. de índice. A diferencia de una planilla de
calculo están diseñadas para contener
Mas adelante veremos como seleccionar datos desde registros y realizar operaciones ABM (Altas,
nuestras tablas, particularizando lo que se denomina bajas y modificaciones) o CRUD (en ingles).
“query”, consulta en lenguaje sql. MySql es una de las más populares en el
mundo web (la usa Google y Facebook por
No se preocupe si en este momento no comprende el ejemplo) y es libre y gratuita.

código o le es confuso, mas adelante lo explicaremos en


detalle, por ahora nos concentraremos en la lógica de trabajo de Rstudio, luego pasaremos al
lenguaje R.

6. Crear un script nuevo


Desde el menú FILE selecciona NEW y de allí la opción R Script, también con el icono debajo de
FILE que posee un signo + en un circulo verde y por supuesto con el atajo de teclado
CTRL+SHIFT+N

Al darle la opción de guardar a su script, le podrá colocar el nombre que desee al mismo. También
es relevante que configure un directorio en donde guardara sus scripts, archivos, proyectos y
salidas, tema que también trataremos mas adelante en el texto.

7. Panel de Consola
En este panel se obtienen las
salidas de los scripts, pero
también es el sitio en donde
se puede escribir código
directamente para ver
resultados. Lo que escriba
aquí no se guardara en el
script, es una salida de
prueba o transitoria.

7 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Sin embargo es posible guardar el estado de esta pantalla (y también el panel de variables e
historia) en un archivo de “workspace” (espacio de trabajo) el cual es posible cargar
posteriormente o indicar por defecto uno en especial. Este espacio se guardará cuando al salir del
programa le interrogara si desea preservarlo o no. En la imagen vemos como se rescata parte del
código de “history” y se vuelve a ejecutar en la consola de comandos:

¿Cómo se carga desde history el código fuente? Copiando y


pegando a la consola de comandos o utilizando el botón
“To Console” como vemos en la imagen; también es
posible copiar al script con el otro botón de “To Source”

¿Cómo se trabaja en la consola? Escribiendo las funciones y sus


parámetros. En general casi todo aquí son funciones que realizan
determinados cálculos en base a parámetros que usted introduce. Un
ejemplo:

tipee en la consola 2+3 y [enter], la salida será 5.

Ha efectuado una simple suma. Si corremos el script de la primera pantalla nos saldrá el resultado
de la imagen. Si tenemos una variable llamada “P” y la llamamos nos dará una pantalla de
números, pero no así si llamamos a “p”. R es “case sensitive” o sea sensible a las mayúsculas. No
es lo mismo “p” que “P”

Hagamos una salida y probemos: Nota 4


en la pantalla de script cargamos
¿Por qué escribir “;” al final de la línea de código? Es una convención
un código, ahora pinte con el
de programación que indica que se ha llegado al final de la instrucción.
cursor parte del texto. Luego con Sin embargo puede escribir el final de la línea sin el punto y coma, el
esta selección pulse Run en la script o comando funcionara aunque la buena práctica es colocarlo ya
parte superior derecha de Script. que evitaría posibles mal interpretaciones y errores de ejecución.
Esto ejecutara el script en la

8 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


consola (y hará otras cosas mas). La línea seleccionada tendrá una salida por consola indicando el
estatus y si todo este bien, que no falten otras variables, funciones etc:

El resultado será el de la pantalla que ilustra este


apartado, constatamos que en el panel de
“Workspace” existe “P” y no “p”, panel que
describiremos en el próximo ítem.

Observemos ahora al vector “P”, por consola


extraemos su información mediante el uso de
funciones.

Las funciones son una serie de códigos que se hallan


implícitos en las librerías de R y que al llamarlas con
un nombre, cargar uno o más parámetros, realizan
una operación determinada. Esas funciones son en
realidad una compleja serie de códigos que alguien
ha programado y puesto a disposición de los
usuarios.

En este ejemplo usaremos varias funciones de un


solo parámetro que nos dará información
relevante, que podemos ver en la imagen.

• length(P) nos dara la longitud del vector


• sum(P) es la sumatoria de los valores que componen el vector
• mean(P) es el promedio matemático del vector
• median(P) es la mediana del vector y
• sort(P) es el ordenamiento del vector de menor a mayor.
Para finalizar este apartado, si usted llena la consola y desea limpiarla solo debe
pulsar CTRL+L y despejara la vista.

9 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


8. Panel de Workspace e History

El panel de “Espacio de trabajo e historia” 2


nos remite a donde se pueden visualizar las
distintas variables que se van generando,
en la primera imagen vemos las variables
que se han capturado al correr el script: Allí
observamos “apellidos” que consiste en
una matriz de 100x2 elementos. Mas tarde
volveremos a ella para visualizar sus
valores. En la segunda imagen del apartado
tenemos la historia de los distintos
comandos que hemos ido introduciendo
durante una ejecución.

Este historial se puede eliminar por


completo al pulsar la escobilla o eliminar
selectivamente en partes señalando las
líneas y utilizando el botón con la equis roja. Al salvar el Workspace guardara también, además de
las variables, este historial depurado.

9. Panel de Files, Plots, Packages, Help


El panel de archivos, salidas graficas, paquetes y ayuda
es muy versátil y útil. En sus distintas pestañas
encontramos utilidades de navegación por directorios
donde tengamos archivos, salidas graficas que
podemos exportar a varios formatos o visualizar en una
pantalla aparte con un zoom, la instalación de librerías
(paquetes) que nos permiten ampliar las funciones de
Rstudio (como el ejemplo del script que requiere
Rodbc) mediante el acceso directo a los repositorios
en la Internet o desde un archivo que hayamos
descargado y copiado a nuestro sistema si estamos fuera de línea y las ayudas. El repositorio que

2
Suena igual a un ONG de alguna cosa ¿No?

10 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


por defecto utilizamos es “Argentina (La Plata) -
Universidad Nacional de La Plata” aunque también
podemos optar (dentro de nuestro país) por “Argentina
(Mendoza) Conicet Mendoza” o por cualquiera de los
86 repositorios en varios países y universidades del
mundo. En el menú TOOLS -> OPTIONS opción CRAN
MIRROR se selecciona desde donde obtener los
paquetes y actualizar R.

En la consola trabajamos con “P” y tomamos varias


medidas estadísticas utilizando funciones de R y graficando el vector “P” que esta ordenado de
menor a mayor:

En la imagen mas pequeña realizamos la desviación


estándar “a mano”: raíz cuadrada de varianza
sqrt(var(P))

Como se podrá el valor “40” que es predominante en


este análisis con una frecuencia de 45% del total de las
muestras y en la graficación de barras es comprobable visualmente:

Como colofón a este breve ejercicio de uso de consola, ayuda y graficas, comprobamos que la
sumatoria de las frecuencias sea correcta, con sum(prop.table(x)) y cuyo resultado 1 es el
100% de las muestras.

11 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Para comprender que significan prop.table() sum() y
Nota 5
otras funciones recuerde que esta la ayuda, en dicha
pestaña puede introducir el termino que desea conocer o Para suscribirse a la lista de R en español
debe darse de alta en la dirección
navegar entre los paquetes (pestaña packages) y allí
https://stat.ethz.ch/mailman/listinfo/r-
encontrara las explicaciones al respecto; sin embargo si help-es
aun así no halla lo que desea (por ejemplo como realizar
determinado calculo o dudas sobre funciones) posee la
lista de R en español en cuyo ámbito científicos y técnicos de todas las disciplinas intercambian
información y ayuda desinteresadamente.

Con esto hemos llegado al resumen de los paneles de Rstudio, de los que en el menú podrá
también acceder y realizar operaciones desde los numerosos submenús.

El lenguaje R y algunas funciones


1. Presupuesto básico
Estimamos que Ud. posee conocimientos de estadística, por lo que omitiremos los conceptos
inherentes a, si en cambio como realizar las operaciones y procedimientos para alcanzar el manejo
fluido de Rstudio-server (o Rstudio en su pc). También en necesario poseer nociones de
matemáticas.

En este apartado nos introduciremos en el lenguaje de scripts de R y en el manejo de algunas


funciones genéricas (y no tanto) como ejemplos de trabajo. Posteriormente trabajaremos en la
adquisición de datos mediante varias formas (archivos excell, csv, DB etc) 3.

2. Iniciando R
Cuando arranca RStudio aparece en la consola una leyenda explicativa:
R version 2.14.1 (2011-12-22)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-mingw32/x64 (64-bit)

R es un software libre y viene sin GARANTIA ALGUNA.


Usted puede redistribuirlo bajo ciertas circunstancias.
Escriba 'license()' o 'licence()' para detalles de distribucion.

R es un proyecto colaborativo con muchos contribuyentes.


Escriba 'contributors()' para obtener más información y
'citation()' para saber cómo citar R o paquetes de R en publicaciones.

Escriba 'demo()' para demostraciones, 'help()' para el sistema on-line de ayuda,


o 'help.start()' para abrir el sistema de ayuda HTML con su navegador.

3
"por mí se va hasta la ciudad doliente, por mí se va al eterno sufrimiento, por mí se va a la gente condenada. La justicia
movió a mi alto arquitecto. Hízome la divina potestad, el saber sumo y el amor primero. Antes de mí no fue cosa creada sino
lo eterno y duro eternamente. Dejad, los que aquí entráis, toda esperanza." Dante Alighieri Divina Comedia, Canto III; aunque
se sospecha que lo plagio de la entrada a la catedra de Estadísticas de la Facultad de Ciencias Exactas de …

12 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Escriba 'q()' para salir de R.

[Workspace loaded from ~/.RData]

Loading required package: sp


Mensajes de aviso perdidos
package ‘sp’ was built under R version 2.14.2
>
En ella nos informa que versión de R se esta ejecutando en Rstudio (en este caso la ultima de R al
redactar estas líneas es 2.15.n.n, por lo que la que corremos esta un poco desfasada); la licencia
aplicada (GNU); algunos comandos –funciones- y algunos mensajes sobre paquetes. El símbolo
final “>” es el prompt. Se llama prompt o cmd al carácter o conjunto de caracteres que se
muestran en una línea de comandos para indicar que está a la espera de órdenes. Es una herencia
de la época en que los sistemas se basaban en ventanas de comandos. Los programas como
VwMaxima (calculo matemático y simbólico, también libre y gratuito) y R utilizan la consola para
introducir los datos directamente, a diferencia de otros programas que poseen interfaz (SAS, SPSS,
Infostat, etc) que utilizan elementos gráficos para dicha función.

En resumen: aquí, en el prompt, escribiremos nuestras funciones.

• Un detalle a tener en cuenta: cada línea termina en “;” cuando se desea finalizar la
instrucción. Si no lo hace la consola esperara a que termine en la próxima, el prompt
agregara un “+” indicando que son varias líneas a ejecutar. No se olvide de colocar “;” al
final de cada instrucción tanto en el script como en la consola.
• Para limpiar la consola pulse CTRL+L, despejara la misma.
• R es un lenguaje que trabaja en base a “objetos”, esto en programación significa que las
formulas, funciones, datos etc consisten en una entidad que poseen ciertas características,
por ejemplo un parámetro: sqrt(n) quiere decir que hay un objeto “raíz cuadrada” que
recibe un parámetro (un numero) “n” y nos da una salida x.
• Esta funcionalidad es muy potente, ya que usted no necesita saber como funciona sino
solo que parámetros requiere para obtener el resultado. Otro ejemplo, con dos
parámetros:
o > n<-c(1:10)
o > n
o [1] 1 2 3 4 5 6 7 8 9 10

Arroja un vector llamado “n” que concatena valores del 1 al 10. Como se puede apreciar
en esta breve formula hay varios conceptos juntos (la concatenación, el vector, la serie de
1 a 10) todas ellas funciones. Esto nos permite suponer que las funciones se pueden
agregar, y esta en lo correcto si piensa asi.

• Un ultimo ejemplo de esta afirmación anterior:


o > alfa<-rnorm(10)
o > alfa
o [1] 0.81861407 -2.18540730 1.12167243 -2.12783387 -0.17183908 0.09290526 0.88798608 -0.11830396 -
0.46704494
o [10] 0.23676978
o > sort(alfa)
o [1] -2.18540730 -2.12783387 -0.46704494 -0.17183908 -0.11830396 0.09290526 0.23676978 0.81861407
0.88798608
o [10] 1.12167243
o

13 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


o > #------ ahora probamos las dos funciones juntas mas una tercera, multiplicar -----------------------
o > sort(beta<-rnorm(10))*10
o [1] -6.5524348 -5.0647560 -2.8489841 -1.9426385 -0.6655324 -0.0572295 5.7592122 7.7804564
9.0297206 31.236577

En este ejemplo creamos una variable “alfa” a la


Nota 6
cual cargamos una serie de 10 números aleatorios
creados de una distribución normal (rnorm) y ¿Cómo saber usar una función? En la
luego los ordenamos en orden creciente (sort), ventana de ayuda escriba el nombre de la
función y le aparecerá el manual, o en la
sin embargo en la ultima sentencia sort(beta<-
consola: > help(sort) help()
rnorm(10))*10 hacemos las tres cosas juntas: también es una función!
crear los números aleatorios en un vector “beta”,
ordenarlos y multiplicarlos por 10. La simplicidad
y la potencia de calculo de R es su mayor ventaja, Nota 7

la sencillez del lenguaje y uso también es una ¿Cómo reconocer una función? Recuerde
gran ventaja. Finalmente para cerrar esta breve que las funciones poseen paréntesis ( ) en
explicación de objetos en R tenga en cuenta que cuyo interior los argumentos, si hay mas
de uno, van separados por comas. Se
las funciones siempre poseen un juego de
pueden anidar (meter adentro) funciones
parentesis“()”: sort(), sqrt(); rnorm(); quit() y sus en las funciones, por ejemplo
argumentos dentro de los paréntesis los
sort(sqrt(rnorm(10)))
parámetros van separados por “,”:
o > sort(alfa, decreasing=TRUE)
o [1] 1.12167243 0.88798608 0.81861407 0.23676978 0.09290526 -0.11830396
-0.17183908 -0.46704494 -2.12783387
o [10] -2.18540730
o > sort(alfa, decreasing=FALSE)
o [1] -2.18540730 -2.12783387 -0.46704494 -0.17183908 -0.11830396 0.09290526
0.23676978 0.81861407 0.88798608
o [10] 1.12167243

En el ejemplo superior, la función sort() posee dos parámetros, la variable a ordenar y el


sentido de la misma (creciente o decreciente) separados por la coma.

3. Los objetos como entidades


Los objetos en R pueden ser cadenas de texto, números, funciones, vectores, matrices etc. Poseen
intrínsecamente dos atributos comunes: tipo y longitud.

• mode(x) nos devolverá el tipo de objeto, por ejemplo “numeric”, “carácter”, “complejo” o
“lógico”.
• Length(x) su longitud, por ejemplo en alfa = 10 (elementos en el vector), o en el caso de
una cadena de caracteres: x<-"El tipo de la cosa" el resultado será 1 (cadena), una
expresión lógica será TRUE o FALSE.
• Si obtiene un resultado N/A el significado no es “nulo” sino “no disponible” es decir que no
se sabe que tipo de dato es. NaN por otra parte es cuando el resultado o el valor no es
numérico. Muchas veces las funciones fallan cuando toman datos N/A o NaN, hay que
tener en cuenta esto al procesarlos porque son fuente de error en muchos casos.

14 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


4. Operaciones con objetos
Los objetos son creados, usados y eventualmente eliminados. Para crear un objeto solo basta dar
la orden antecedida del nombre que tendrá
Nota 8
> obj1<-c(1,2,3,2,3,2,2,1,3,3,3,1,3,4,4,1,0)
> mode(obj1) En el presente manual al trabajar casi
[1] "numeric"
excluyentemente sobre la consola no
> length(obj1)
[1] 17 hemos utilizado los “;” finales. No se olvide
> obj1 de colocarlos en los scripts.
[1] 1 2 3 2 3 2 2 1 3 3 3 1 3 4 4 1 0
> objects()
[1] "a" "alfa" "b" "beta" "c" "cartografia" "datos_manies"
[8] "n" "obj1" "par" "x" "z"
>
En la representación superior podemos advertir que creamos un objeto “obj1” que es un vector
numérico de 17 elementos. Obtenemos su tipo y longitud y mas abajo listamos TODOS los objetos
del workspace que venimos trabajando. Se puede observar que los “a”, “alfa”, “beta” etc
corresponden a los anteriores ejercicios (y otros que veníamos utilizando y que también quedaron
cargados en la memoria de R como “cartografia”, “datos_manies” etc).

Debemos recordar que estos objetos


pertenecen al workspace específico
que venimos trabajando desde antes
y hemos salvado. Si desea eliminar
objetos hay dos maneras:

• Eliminar todo: en el panel


Workspace -> clear all (elimina todos
los datos del entorno)

• Objetos en particular: mediante rm(objeto), Listamos los objetos y removemos n, par y x.


Volvemos a listar para comprobar.

Los objetos creados en una sesión se guardan en el workspace al salir del


programa (si usted así lo determina) también se guarda el historial de comandos,
por lo que en la próxima sesión (tal como hemos visto en el listado de objetos) se
recuperan automáticamente. Por ello es buena práctica guardar workspaces
distintos según el proyecto que vaya realizando. Esos datos de sesión se almacenan
en un archivo “.RDATA”

Por defecto en el server de Linux (Debian) se guardara en /home/ y en Windows


(instalación local de escritorio) en Mis Documentos; si no especifica una carpeta de
proyecto específica.

15 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Algunos objetos en particular
1. Introducción a tipos de datos
Ya hemos visto generalidades de los objetos, ahora profundizaremos en algunos de ellos que
resumen la filosofía de uso de R.

R trabaja los datos mediante un esquema o estructura de datos que es interesante conocer para
poder aplicar su potencia. En estructura de Datos, una materia de programación, se suelen dividir
estos en dos vertientes:

• Datos primitivos (numéricos de distinta índole, lógicos, caracteres y enumeraciones)


• Datos estructurados (una mezcla mas o menos variable de distintos tipos)

En estos últimos, los datos estructurados, para no extendernos, solo mencionaremos que cuando
los datos se agrupan en un tipo de estructura de un solo tipo, según sus “dimensiones” se llaman
vectores o matrices; si son de dos o mas tipos se denominan listas, registros, conjuntos. 4

En los próximos párrafos examinaremos estos conceptos desde el punto de vista operacional y
como utilizarlos, las definiciones académicas deberá profundizarlas en la medida que estime sean
de necesidad para su aplicación particular. Tenemos las siguientes estructuras de datos:

Como datos primitivos: números, caracteres, valores lógicos (de comparación y de evaluación)

• numeric: (numéricos) número real con doble precisión. Los podemos escribir como
enteros (3, -2), con fracción decimal (3.27) o con notación científica (3.12e-47).
• complex: números complejos de la forma a+bi.
• character: (Caracteres) Cadenas alfanuméricas de texto.
• logical: variables lógicas. Puede ser TRUE o FALSE, también
valores lógicos de comparación (mayor, menor igual etc) que establecen TRUE o FALSE

Hay también un valor que consiste en un no valor, llamado NA

• En algunos casos los datos componentes de un objeto pueden no ser completamente


conocidos.
• Cuando un elemento o valor es “not available” le asignamos el valor especial NA.
• En general una operación con elementos NA resulta NA, a no ser que mediante una
opción de la función, podamos omitir o tratar los datos faltantes de forma especial, como
por ejemplo na.omit(), na.exclude(), na.action() etc.
• La opción por defecto en cualquier función es na.rm=FALSE (que indica que NO elimina los
NA), que da como resultado NA cuando existe al menos un dato faltante. Por el contrario
con la opción na.rm=TRUE, la operación se efectúa con los datos válidos.

4
“Algoritmos + estructuras de datos = programas” Niklaus Wirth, ed. Del Castillo, 1984

16 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


También hay valores especiales: INF y NAN

• En la mayoría de los casos, no debemos preocuparnos de si los elementos de un objeto


numérico son enteros, reales o incluso complejos. Los cálculos se realizarán internamente
como números de doble precisión, reales o complejos según el caso.
• Para trabajar con números complejos, deberemos indicar explícitamente la parte
compleja.
• En determinadas ocasiones los cálculos realizados pueden llevar a respuestas con valor
infinito positivo (representado por R como Inf) o infinito negativo (-Inf). Es posible realizar
y evaluar cálculos que involucren Inf.
• Sin embargo, a veces, determinados cálculos resuelven expresiones que no son números
(representados por R como NaN's, del inglés 'not a number').

En la imagen lateral podemos apreciar la diferencia entre 0,


infinito y valores NAN. En la ultima expresión hemos utilizado la
función ABS(), absoluto de… para eliminar el signo negativo y
obtener una salida normal (1.414214), el primer numero
irracional que tantos dolores de cabeza dio y que al menos causo
5
la muerte de algún griego , por suerte hoy es posible extraer la raíz de cualquier numero sin
mayores consecuencias que el redondeo en caso de irracionales.

Como datos estructurados, en R existen:

1. Vectores, llamados arreglos o arrays (en ingles)


2. Factores
3. Matrices
4. Series temporales
5. Hojas o Marcos de datos (dataframes en ingles)
6. Listas

En el cuadro se resumen las características


de cada tipo de estructura de datos
“estructurados”, por seguir la denominación
de Cairo y Guardati. Se pueden apreciar que
la composición de cada cual admite no solo
los datos primitivos o atómicos, sino
también a su vez otros datos estructurados.

5
Hipasos de Metaponto descubrió en el siglo V a.c (paradójicamente mediante el teorema de Pitágoras) que ningún número natural, ni
ninguna relación de otros números naturales podía explicar el resultado: la raíz cuadrada de 2, que es 1,4142135... seguido de infinitos
números sin ninguna regla o patrón. Esto convulsiono a los Pitagóricos, una sociedad de matemáticos y filósofos que fundaban todo en
la armonía de los números y la placidez espiritual. Hipasos exultante por su brillantez e inteligencia para meter en problemas a todos
corrió a mostrar su descubrimiento, que implicaba derrumbar los fundamentos de la Sociedad Pitagórica y demostraba que lo de
inteligente no lo hacia en las relaciones sociales. Porque en lugar de recibir la gloria y los halagos de todos sus pitagóricos colegas; por
alguna extraña razón estos se ofendieron y echaron espuma por la boca, al grito de “Nos arruinaste el estofado”. Fue desterrado de la
Sociedad, y el acto de destierro incluía una ceremonia de funeral, con entierro de cajón (sin el tipo adentro) y colocación de una lápida
que simbolizaba la muerte del hereje para la Sociedad. Otros aseguran que su muerte no fue tan metafórica sino a garrotazo limpio y
factiblemente orinando sobre su lapida, postmorten. ¿Quién dijo que las ciencias duras son solo para gente sin sangre en las venas?

17 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


2. Vectores
Una definición formal, creación y manipulación:
Los arreglos (llamados arrays en lenguajes de programación) consisten en una colección finita,
homogénea y ordenada de datos. Esto es un solo tipo de datos en todos sus componentes para
6
todos los índices .

Una colección finita y homogénea significa que posee un principio y un fin, con datos todos del
mismo tipo y ordenada debido a que los vectores se consideran como celdas cuyo contenido están
referenciados por un índice que inicia en 1 y termina –por ejemplo- en 10. Así la “celda” 1
contiene el valor n, la 2 otro… hasta el final del array.

Índice=17 Valor=1993 En esta representación vemos una celda que posee un índice llamado
17 con un valor 1993, El índice también puede ser nominal, por ejemplo
“bananas” y el valor numérico, caracteres o lógicos.

Un ejemplo de código y algunas aclaraciones:


> a<-c(1,2,3,4,5,6,7,8,9,10); # creamos un vector de 10 elementos del 1 al 10
> length(a); # obtenemos su longitud
[1] 10
> a[11]<-11 # agregamos un valor 11 en la posición 11
> length(a); # obtenemos su longitud nuevamente
[1] 11
> a # listamos todos los elementos del vector
[1] 1 2 3 4 5 6 7 8 9 10 11
> a[12]<-c("A"); # agregamos a la posición 12 un carácter “A”
> a # listamos nuevamente

# se observa que el vector no posee valores numéricos sino de caracteres


[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "A"
> mode(a); # comprobamos el tipo de datos
[1] "character"
# cargamos un valor en a[11]
> a[11]<-11;
# forzamos a datos numéricos:
> as.numeric(a);
[1] 1 2 3 4 5 6 7 8 9 10 11 12
# como no nos identifica nada los índices, cambiamos a uno con nombres:
> names(a)<-c("peras","manzanas","tornillos","clavos","bayas","bellos","vellos");
> a; # listamos el vector
peras manzanas tornillos clavos bayas bellos vellos <NA>
1 2 3 4 5 6 7 8
<NA> <NA> <NA> <NA>
9 10 11 12
# observamos que hay índices que no poseen denominación, son NA, debemos crear
# un vector de nombres igual al vector de índices: 12 posiciones.
> names(a)<-c ("peras", "manzanas", "tornillos", "clavos", "bayas", "bellos",
"vellos", "bollos", "balas", "berros", "oxímoron", "cosas")
> a
peras manzanas tornillos clavos bayas bellos vellos
1 2 3 4 5 6 7
bollos balas berros
8 9 10

6
“Estructura de Datos” de Osvaldo Cairo y Silvia Guardati.

18 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


oximorones cosas
11 12
# cargamos un nuevo valor en a[1] o como se denomina ahora a[“peras”]
> a[peras]<-33
Error en a[peras] <- 33 : objeto 'peras' no encontrado
# el error es porque el índice debe estar con comillas al ser un nombre
> a["peras"]<-33
> a
peras manzanas tornillos clavos bayas bellos vellos
33 2 3 4 5 6 7
bollos balas berros oxímoron cosas

8 9 10 11 12

En la primera línea creamos un array llamado “a” que concatena 10 números enteros, valores del
1 al 10, de manera tal que el valor numérico de la celda 1 es 1, el de la 2 es 2 y así sucesivamente
coincidiendo con el índice, aunque no siempre es así. Comprobamos la longitud del vector con
lenght(a) que devuelve 10 elementos.
El cambio de índice a nombre es agregando un vector de nombres (función names() ), de uso
extendido y común en muchas otras funciones.
En la definición de arrays dijimos que eran una colección finita, sin embargo en R esta colección
no esta cerrada ya que es posible agregar más celdas con valores solo referenciando a que celda
pertenecen. Así cargamos el valor numérico entero 11 en la posición 11, comprobamos que hay 11
elementos ahora.
Hemos comprobado que si mezclamos tipos, cambia el tipo de datos del vector. Al
cargar en la posición 12 un carácter “A” y al comprobar que tipo de array es vemos
que ya no es numérico sino de caracteres. Esto es concordante con la definición del
vector, que no permite mezclar tipos distintos. Por ende al introducir un carácter
el vector cambia de numérico a caracteres. Los valores ya no referencian números
sino caracteres.

Esta operación se llama cast (moldeado) o conversión de tipos y es fuente de errores, ya que no
es posible hacer operaciones aritméticas o matemáticas con caracteres.
> a*5
Error en a * 5 : argumento no-numérico para operador binario

Una simple multiplicación lo demostrara. Para salvarnos el momento existe una función llamada
“as.numeric()” 7, no exenta de cierta consecuencia:
> a
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "A"
> a<-as.numeric(a)
Mensajes de aviso perdidos
NAs introducidos por coerción 8
> a
[1] 1 2 3 4 5 6 7 8 9 10 11 NA
> a*5
[1] 5 10 15 20 25 30 35 40 45 50 55 NA

7
También existen otras: as.nnnn que pueden consultar en la ayuda de RStudio
8
Valores por coerción: a la fuerza nomas…

19 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Se observa que la celda 12 cuyo contenido era el Nota 9
carácter “A” al ser convertido a numero es un valor
desconocido, un NA (not available). Cualquier operación Observe atentamente que no haya valores
NA si va a realizar cálculos, muchas
que se haga sobre esta celda arrojara en consecuencia un funciones no trabajan con ellos
NA; pero en ciertos casos arrojara errores porque
suelen haber funciones que no trabajan sobre la carencia de un dato. Este atento

¿Cómo se soluciona esto? Lo mas simple es cargar un valor 0 en dicha celda o utilizar funciones
na.omit() como en este ejemplo:
> a
[1] 1 2 3 4 5 6 7 8 9 10 11 NA
> na.omit(a) * 5
[1] 5 10 15 20 25 30 35 40 45 50 55
attr(,"na.action")
[1] 12
attr(,"class")
[1] "omit"
Al utilizar na.omit(a) en la multiplicación se omitió el valor NA y el vector resultante contiene solo
valores enteros correctos. La ayuda del Rstudio 9 es muy explicita:
Na.omit:
Trata sobre valores perdidos en objetos
Descripción
Estas funciones genéricas son útiles para trabajar con AN en, por ejemplo, marcos de datos. na.fail devuelve el
objeto si no contiene valores perdidos, y señala un error contrario. na.omit devuelve el objeto con casos
incompletos eliminados. na.pass devuelve el objeto sin cambios.

Se recomienda leer siempre las ayudas ya que


resuelven muchas de las dudas o usos inadecuados
de las funciones.

Operaciones con vectores


Como se habrá advertido es posible efectuar
operaciones matemáticas con vectores, hay
esencialmente dos grandes divisiones:
• Operaciones de un vector con una función o
número
• Operaciones entre vectores
A esto se le llama aritmética vectorial e intervienen
nociones de algebra lineal y mas adelante matricial, pero en este caso R simplifica las cosas
mediante el uso de funciones y de su propia flexibilidad. No ahondaremos en los conceptos
intrínsecos de vectores pero veremos algunas de sus operaciones más usuales.

9
En ingles

20 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Operaciones de un vector con una función u operador
 Cuando trabajamos con un vector con una operación o función, esta se aplica a cada
elemento por separado. El conjunto de datos es afectado por este calculo, una serie de
ejemplos:

>a<-c(1,3,6,8,9,9,2,3,3,3,3,3,2,1,0) # creamos el vector “a”


> a/3 # dividimos por 3 a cada termino del vector “a”
[1] 0.3333333 1.0000000 2.0000000 2.6666667 3.0000000 3.0000000 0.6666667 1.0000000
1.0000000 1.0000000 1.0000000
[12] 1.0000000 0.6666667 0.3333333 0.0000000
> a-1 # restamos a cada termino de “a” - 1
[1] 0 2 5 7 8 8 1 2 2 2 2 2 1 0 -1
> a+1 # sumamos +1 a cada termino del vector “a”
[1] 2 4 7 9 10 10 3 4 4 4 4 4 3 2 1
> log(a) # hallamos el logaritmo de cada termino de “a”
[1] 0.0000000 1.0986123 1.7917595 2.0794415 2.1972246 2.1972246 0.6931472 1.0986123
1.0986123 1.0986123 1.0986123
[12] 1.0986123 0.6931472 0.0000000 -Inf
> log(1/a) # hallamos el logaritmo de cada termino inverso de “a”
[1] 0.0000000 -1.0986123 -1.7917595 -2.0794415 -2.1972246 -2.1972246 -0.6931472 -1.0986123
-1.0986123 -1.0986123
[11] -1.0986123 -1.0986123 -0.6931472 0.0000000 Inf
> abs(a) # hallamos el valor absoluto (sin decimales ni signo) de cada termino de “a”
[1] 1 3 6 8 9 9 2 3 3 3 3 3 2 1 0
> a^a # hallamos el exponencial de cada termino de “a” elevado a si mismo.
[1] 1 27 46656 16777216 387420489 387420489 4 27
27 27 27
[12] 27 4 1 1
>
(los números al inicio de la línea entre corchetes [] indican el numero del índice del vector al inicio
del renglón) En el cuadro al inicio de este apartado hay una serie de funciones comunes para los
vectores. Algunas funciones estadísticas las podemos realizar de la manera clásica (desarrollando
la formula) o utilizando funciones ad hoc, los ejemplos:

> a # el vector”a”.
[1] 1 3 6 8 9 9 2 3 3 3 3 3 2 1 0
> min(a) # hallamos el minimo de “a”.
[1] 0
> max(a) # hallamos el maximo de “a”.
[1] 9
> sum(a) # hallamos la sumatoria de los terminos de “a”.
[1] 56
> length(a) # hallamos la cantidad de componentes de “a”.
[1] 15
> sum(a)/length(a) # hallamos la media aritmetica de “a”.
[1] 3.733333
> mean(a) # usamos la función media en “a”.
[1] 3.733333
> a # el vector”a”.
[1] 1 3 6 8 9 9 2 3 3 3 3 3 2 1 0
> a[15/2+0.5] # buscamos la mediana de ”a” mediante formula.
[1] 3
> median(a) # usamos la función mediana en ”a”.
[1] 3
>

21 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Operaciones entre vectores
Son similares a las anteriores, en el caso que cada vector sea igual en cantidad de términos
(longitud) que el anterior, el cálculo se efectúa completo. En caso que uno de ellos sea menor, se
repiten los valores en el cálculo hasta completar el faltante.
> alfa<-c(1,2,3)
> beta<-c(1,2,3,4,5,6,7,8,9)
> alfa * beta
[1] 1 4 9 4 10 18 7 16 27
La lógica de la multiplicación es la siguiente:
alfa beta resultado
El primer array multiplica al segundo desde la posición 1 a la 3 los valores
1 1 1 del segundo desde la posición 1 a la 3; luego repite del 1 al 3 con los
2 2 4 valores de beta de la posición 4 a la 6, y la tercera repetición hasta
3 3 9 finalizar. Es de destacar que ambos vectores son de longitudes tal que el
1 4 4
vector beta es múltiplo del alfa; si no fuera así R nos daría un error del
2 5 10
3 6 18 tipo
> beta[10]<-10 # agregamos un valor en la posición [10]
1 7 7
> alfa * beta
2 8 16 [1] 1 4 9 4 10 18 7 16 27 10
3 9 27 Mensajes de aviso perdidos
In alfa * beta :
longitud de objeto mayor no es múltiplo de la longitud de uno menor

Pese al mensaje de error, R igual realiza el cálculo y exhibe el resultado: 1 * 10 = 10


Un ejemplo de trabajo entre vectores con funciones de correlación, varianza y covarianza:
# creamos valores aleatorios de una distribución normal
> vector1<-c(round(rnorm(10),2))
> vector1
[1] -1.29 -0.47 -0.57 -0.19 -0.50 0.88 0.56 0.03 1.20 0.88
# los valores de vector1 y vector2 se han redondeado con round a 2 decimales
> vector2<-c(round(rnorm(10),2))
> vector2
[1] 0.40 0.30 -0.58 -0.08 0.04 1.01 -1.06 0.96 -0.15 -1.93
# correlacion entre vectores
> cor(vector1, vector2)
[1] -0.2818315
# varianza entre vectores
> var(vector1, vector2)
[1] -0.2030922
# covarianza entre vectores
> cov(vector1,vector2)
[1] -0.2030922

El tema de operaciones entre vectores cobra mayor fuerza en el apartado sobre matrices, donde
las condiciones según el tipo de operación que se realice depende si estas son de formas
correctas, es decir si son matrices cuadradas, rectangulares, de igual cantidad de dimensiones. En
el próximo capitulo abordaremos esta cuestión que se inicia aquí, ya que los vectores son
esencialmente matrices de una sola dimensión.

22 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Poner nombre a los índices, una razón:
El acceso a un vector es mediante un índice, a[1]=1, a[2]=3, a[5]=9 etc. También podemos
cambiar el índice a nombres mediante la adición del vector de índices con nombres al array, tal
como vimos anteriormente, a estos vectores se les dice que están indexados ordinalmente 10:

Esto es muy útil porque


muchas veces debemos tener
referencias concretas, por
ejemplo en un grafico (imagen
inferior) o en una salida de
pantalla (imagen superior)
para identificar mejor que es lo
que estamos procesando:

Por supuesto que los nombres de índice del vector son solo un ejemplo y además en la graficación
hay otros métodos para poner labels (etiquetas) en los ejes. En realidad representan una
comodidad para el investigador para que no se pierda en el análisis de los datos.

Vectores de caracteres
Los vectores también pueden ser de
caracteres, estos se diferencian de los
anteriores porque el número de
operaciones es más reducido y además no
aplican las operaciones matemáticas.
Los términos de un vector de caracteres se
escriben entre comillas, sean caracteres,
palabras o frases.
En el ejemplo lateral creamos un vector “b” asignándole una palabra, luego asignamos a la
segunda posición de “b” otra palabra y finalmente a la tercera posición de “b” una frase completa.
Si deseamos unir dos vectores de caracteres en uno solo debemos utilizar la función paste() pero
si desean mantener esos dos vectores separados y solo unirlos para una salida que no desea

10
Ordinal porque no sigue un índice de cardinalidad sino algún tipo de organización de orden, en nuestro ejemplo tipos de cosas.

23 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


guardar en el workspace, solo bastara con concatenarlos: e<-c(b,c,d) donde “e” es el vector final
de la copia y pegado de b,c,d con la función c()

Vectores lógicos: breve introducción a la lógica simbólica


Otro tipo de vectores son los que están constituidos por valores lógicos, TRUE o FALSE (1, 0) que
son propios de la lógica simbólica y en cuya “tabla de verdad” resumimos el concepto
fundamental que exponemos a continuación como introducción:

conectivo símbolo enunciación Ejemplos y observaciones / estados lógicos (*)


negación ¬ ¬p (“no p”) “no” / NOT
conjunción ∧ p∧q “y”, eventualmente “pero, además, aunque” / AND
Disyunción ∨ p∨q “y/o” de carácter inclusivo, “este y aquel”. / OR
inclusiva
Disyunción ⊻ p⊻q “o” de carácter excluyente, “este o este” / XOR
exclusiva
Implicación o → p→q “entonces”, es reemplazable por una coma “,”o
condicional también por “es suficiente”, “es una condición
suficiente”, ”solo si”, “es necesario”, La primera
enunciación es la hipótesis de la implicación y la
segunda su conclusión.
Doble ↔ p↔q “si y solo si”, “es necesario y suficiente para” , se
implicación o puede abreviar “sii” (si y solo si)
bicondicional

Tabla de verdad, en donde


p q ¬p p∧q p∨q p⊻q p→q p↔q las proposiciones atómicas
“p” y “q” son sometidas a
0 0 1 0 0 0 1 1 distintos operadores (o
0 1 1 0 1 1 1 0 conectores) lógicos y sus
resultados. 0 equivale a
1 0 0 0 1 1 0 0 falso y 1 a verdad. 11
1 1 0 1 1 0 1 1

La aplicación de esto en un ejemplo con dos vectores lógicos en los que


sometemos a estos términos a distintas operaciones. La utilidad es que
permiten realizar condiciones específicas cuando trabajamos con estados
lógicos (“si tal condición es falsa, entonces hago o no hago tal cosa”).
Esto es en el ámbito de vectores lógicos compuestos de valores T o F
Para ello también hay operadores lógicos pero que aplican a vectores
numéricos por comparacion (igual, distinto, mayor que, menor que, etc).

11
“Matemáticas Discretas y Combinatoria” Ralph P. Grimaldi ed. 2000 s/d. pag. 53, “Introducción a la Lógica” Irving Copi Eudeba
1969

24 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Algunos ejemplos con operadores lógicos:
> a
[1] TRUE
> b
[1] FALSE
> c
[1] TRUE
> d
[1] FALSE
> e<-(a || b && c)
> e
[1] TRUE
> e<-((a || b)&& c)
> e
[1] TRUE
> e<-b || d
> e
[1] FALSE
> vectorLog<-c(a,b,c,d,e)
> vectorLog
[1] TRUE FALSE TRUE FALSE FALSE
Algunos ejemplos con operadores de comparación
> a<-10
> b<-5
> c<-c(1,12,2,3,7,4,65)
> c<=a
[1] TRUE FALSE TRUE TRUE TRUE TRUE FALSE
> a>=c
[1] TRUE FALSE TRUE TRUE TRUE TRUE FALSE
> a==c
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> a<c
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE

La aplicación de vectores (o valores) lógicos a estos últimos operadores es automática. Hay aun
una serie de características que son de interés sobre el uso de vectores, para ello remitimos al
texto “Introduccion a R” del R Development Core Team; descargable gratuitamente del sitio de R
en el link http://cran.r-project.org/ en la sección “contributed documentation” entre otra
documentación en español e ingles.

3. Factores: un ordenamiento categórico

Un factor es un vector utilizado para una clasificación discreta (donde el valor se cuenta no se
mide) en el cual a su vez puede ser nominal u ordinal. En la salida de pantalla creamos un ejemplo
de un Factor por categorías y posteriormente en ordinal:

# creamos una lista de localidades de un ficticio grupo politico correntino en el orden en


# que van llegando a la reunión, cada acrónimo es una localidad.
>distritos <- c("ctes" , "ctes" , "ctes" , "sala" , "riach" , "empe" , "sanl" , "sanl" ,
"ctes" , "sanl" , "riach")
# Ingresamos cuantos representantes acuden con sus credenciales *a razón de uno por orden)
> congresales<-c(1,1,1,1,1,1,1,1,1,1,1)
# creamos el vector FACTOR que contiene el orden categórico “localidades”
> CongresoPartidario <-factor(distritos)
# echamos un vistazo a como quedo conformado el FACTOR

25 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


> CongresoPartidario
[1] ctes ctes ctes sala riach empe sanl sanl
ctes sanl riach
Levels: ctes empe riach sala sanl
# Ahora aplicamos la cantidad de ingresantes con
las localidades, el vector de congresales # debe
ser de igual longitude que el de distritos!!!
> representantes<-tapply(congresales, distritos,
sum)
> representantes
ctes empe riach sala sanl
4 1 2 1 3
# ordenamiento en FACTOR ORDINAL
> ordered(representantes)
ctes empe riach sala sanl
4 1 2 1 3
Levels: 1 < 2 < 3 < 4

También podemos apreciar la grafica, que la podemos


ordenar con un par de funciones en el siguiente
ejemplo: barplot(sort(representantes))
Como se aprecia en la segunda grafica, la hegemonía
De la capital Correntina es de cierto peso pero no determinante. Para ganar una moción no solo
deben votar en bloque todos los representantes capitalinos sino que deben captar al menos dos
votos de la segunda mayoría o de las minorías para obtener una decisión. Como la cifra es impar,
difícilmente el presidente de este ficticio congreso pueda hacer valer su voto doble. Sutilezas del
estatuto.

4. Matrices: definición y operaciones


Las matrices son definidas como arreglos bidimensionales (o “n” dimensiones más) aunque las
mas usuales son las de 2 y 3 dimensiones. En el entorno R se les suele definir como “variables
indexadas” . A continuación un divertido repaso de algebra lineal para entrar en materia12

En palabras mas simples, Una matriz es un conjunto rectangular de datos ordenados dispuestos en
una serie de filas y columnas, su “orden”. Decir que la matriz B33 significa que dicha matriz posee 3
filas de 3 columnas.

Esta matriz de orden 3x3 está representada por las


 a11 a12 a13   2 −3 4 
    letras que indican Fila,Columna y una representación
B= a21
 a22 a23  =  1 2 1
numérica de una matriz cargada con datos.
a a33   −4 5 3 
 31 a32

Operaciones elementales sobre matrices


Sumas y restas

Se pueden sumar y restar las matrices si estas SON IGUALES. El concepto del orden de la matriz
cuadrada o rectangular es la igualdad entre las filas y columnas. Si ambas matrices no son iguales

12
Cortesía del autor, no agradezcan.

26 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


en su orden no es posible la operación. Las sumas y las restas son algebraicas y se hacen de
término a término:

1 −10   1 2   2 −8  Hay que tener en cuenta que en el caso


 + =  de la resta el signo delante de la matriz
2 1   −8 4   −6 5  cambia los signos internos. En la segunda
matriz de la resta en lugar de -2 7 3 -1
 −3 1   −2 7   −1 −6 
− =
quedan 2 -7 -3 1.
  
 −6 5  3 −1  −9 6 
Multiplicación de matrices

La regla de oro es C=F 13. Esto quiere decir que las Columnas de la matriz A deben ser iguales a las
de las Filas de la matriz B. Si no se da esta condición no se pueden multiplicar las matrices.

Por un escalar

La multiplicación de la matriz por el escalar es


 +7 + 4   −21 − 12  termino a termino poniendo atención al signo del
−3.b  −2 + 4  =  +6 − 12  multiplicador y del multiplicando para el resultado
final. La matriz B se ha multiplicado por -3
 −3 − 2   +9 + 6 
Un par de ejemplos en R:
> m1<-matrix(1:25, nrow=5, ncol=5) # creamos una matriz de 5 x 5, secuencia de 25
# elementos secuenciales
> m1 # exhibimos por pantalla el resultado
[,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 21
[2,] 2 7 12 17 22
[3,] 3 8 13 18 23
[4,] 4 9 14 19 24
[5,] 5 10 15 20 25
> -3*m1 # multiplicamos el escalar -3 x |m1|
[,1] [,2] [,3] [,4] [,5] # resultado
[1,] -3 -18 -33 -48 -63
[2,] -6 -21 -36 -51 -66
[3,] -9 -24 -39 -54 -69
[4,] -12 -27 -42 -57 -72
[5,] -15 -30 -45 -60 -75
> m2<-matrix(round(rnorm(25),2),5,5) # creamos una matriz de numeros aleatorios
> m2
[,1] [,2] [,3] [,4] [,5]
[1,] -0.29 1.35 -1.25 -0.05 -0.81
[2,] -0.02 -1.73 0.75 2.07 -0.96
[3,] -1.78 -3.08 -0.29 -0.64 1.95
[4,] -0.86 -0.35 -1.39 0.79 -0.48
[5,] -0.85 -0.43 0.95 -0.06 -0.27

13
C=F: columnas igual a filas (N del A)

27 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


> m1*abs(m2) # multiplicamos |m1| * el absoluto de valores de |m2|
[,1] [,2] [,3] [,4] [,5] # resultado> valores positivos
[1,] 0.29 8.10 13.75 0.80 17.01
[2,] 0.04 12.11 9.00 35.19 21.12
[3,] 5.34 24.64 3.77 11.52 44.85
[4,] 3.44 3.15 19.46 15.01 11.52
[5,] 4.25 4.30 14.25 1.20 6.75
> m1*m2 # multiplicamos |m1| x |m2|
[,1] [,2] [,3] [,4] [,5] # resultados con signos
[1,] -0.29 8.10 -13.75 -0.80 -17.01
[2,] -0.04 -12.11 9.00 35.19 -21.12
[3,] -5.34 -24.64 -3.77 -11.52 44.85
[4,] -3.44 -3.15 -19.46 15.01 -11.52
[5,] -4.25 -4.30 14.25 -1.20 -6.75

Ambas matrices |m1| y |m2| son iguales en filas y columnas, pero tenemos el caso mas usual,
matrices diferentes en CyF:

Debemos atender a la regla Ca=Fb (Columna ‘a’ igual a


 +1 − 1  Fila ‘b’= en este caso a= 3 filas y b= 3 columnas. Si se
 +1 + 2 + 3
a.b =  +2 − 2  x  diera el caso que las filas de ‘b’ fueran mas, o las
 −1 − 2 − 3  columnas de ‘a’ fuesen mas no importa porque la
 +3 − 3  condición es Ca=Fb

Para simplificar realizamos esta operación grafica:

 +1 + 2 + 3 C11= (a11*b11) + (a12*b11)

A*B  −1 − 2 − 3  C12= (a11*b12) + (a12*b22)


  C13= (a11*b13) + (a12*b23)

C21= (a21*b11) + (a22*b21)

 +1 − 1 
C22= (a21*b12) + (a22*b22)
 c11 c12 c13 
 +2 − 2    C23= (a21*b13) + (a22*b23)

   c21 c22 c23 


 +3 − 3  c c c 
 31 32 33 
Las flechas rojas explican gráficamente la mecánica de la multiplicación, la cual se repite para cada
fila y columna hasta completar la matriz C3x3 que resulta de Fa x Cb es decir que de A32 x B 23 = C33
La multiplicación (producto) de un vector columna por una matriz o la de un vector fila respetan el
mismo criterio que se menciono en líneas superiores Ca=Fb siendo el resultado Fa x Cb

28 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


En este caso R no efectúa operación alguna ya que solo trabaja con
matrices cuadradas o rectangulares de iguales dimensiones.

Peculiaridades de la multiplicación de vectores por matrices


Un vector fila por una matriz:

a11: 1+8+21=30
 1 2 3
 
a.b = (1, 2,3) x  4 5 6  a12: 2+10+24=36
7 8 9
  a13: 3+12+27=42

 1 2 3
 
a.b  4 5 6 
7 8 9
 

(1, 2,3) 30 36 42

Si usted ha seguido atentamente esta explicación y esta pensando seriamente en dedicarse a las
ciencias sociales (lo mas opuesto posible a esto); despreocúpese, en R todo es mas simple. El
algebra de matrices es tan simple como trabajar el concepto de vectores.

En R el resultado es esencialmente simple. Si el vector es igual en sus componentes a la fila o


columna de la matriz dara el resultado sin problemas, sino el vector rellenara los componentes
faltantes repitiendo la secuencia tal como vemos en el ejemplo siguiente:
> n1<-matrix(1:10,5,2) # creamos una matriz
> n1
[,1] [,2] # exhibimos la matriz en la pantalla
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
> vector1<-c(1,2,3) # creamos un vector de 3 elementos ≠ filas o columnas de |n1|
> vector1*n1
[,1] [,2]
[1,] 1 18
[2,] 4 7
[3,] 9 16
[4,] 4 27
[5,] 10 10
Mensajes de aviso perdidos # realizara la operación pero dará un mensaje de error
In vector1 * n1 :
longitud de objeto mayor no es múltiplo de la longitud de uno menor

29 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


> vector1[4]<-4 # completamos el vector con un valor 4to
> vector1[5]<-5 # completamos el vector con un valor 5to
> vector1*n1 # ahora el vector == columna de |n1|
[,1] [,2]
[1,] 1 6
[2,] 4 14
[3,] 9 24
[4,] 16 36
[5,] 25 50 # no hay error

> vector2<-c(7,9) # creamos un vector2 con 2 elementos == filas |n1|


> vector2*n1
[,1] [,2]
[1,] 7 54
[2,] 18 49
[3,] 21 72
[4,] 36 63
[5,] 35 90 # no hay mensajes de error, Si C o F |n1| == elementos Vector

Operaciones de filas o columnas con matrices en R


Como se ha definido anteriormente, una matriz es un arreglo rectangular de números, o sea una
variable vectorial con al menos dos índices. Como el número de dimensiones puede ser infinito (e
irrepresentable en nuestra mente) lo usual es dos y tres dimensiones.

La forma más simple de crear una matriz en R, es mediante la función matrix():

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)

la cual posee cinco argumentos. El primero, data, es opcional y debe ser un vector que
corresponderá a los elementos de la matriz: x=vector, el segundo y tercero de los argumentos son
para declarar el número de filas y columnas de la matriz:

nrow=número de-filas y
ncol=número de columnas, el cuarto argumento sirve para definir cómo se
completará los elementos de la matriz, o por columnas, o si no se define
nada, se completa la matriz por filas:
byrow=True-False y por último,
dimnames=nombre columnas y filas.

Pero no es la única manera de crear matrices, también se pueden construir a través de la unión de
vectores con iguales números de componentes, sean filas o columnas :

• Mediante adicción de vectores en columnas: cbind(a,b,c,d)


• Mediante adicción de vectores en filas: rbind(a,b,c,d)
> a<-c(1,1,1,1,1,1) # creamos un vector
> b<-c(2,2,2,2,2,2) # creamos un vector
> c<-c(3,3,3,3,3,3) # creamos un vector
> d<-c(4,4,4,4,4,4) # creamos un vector
> x<-rbind(a,b,c,d) # creamos una matriz por columnas con los vectores anteriores

30 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


> x # listamos la matriz |x|
[,1] [,2] [,3] [,4] [,5] [,6]
a 1 1 1 1 1 1
b 2 2 2 2 2 2
c 3 3 3 3 3 3
d 4 4 4 4 4 4
> w<-rbind(a,b,c,d) # creamos una matriz por filas con los vectores anteriores
> w # listamos la matriz |w|
[,1] [,2] [,3] [,4] [,5] [,6]
a 1 1 1 1 1 1
b 2 2 2 2 2 2
c 3 3 3 3 3 3
d 4 4 4 4 4 4
>

La creación de una matriz mediante la función de concatenación empleando los parámetros de los
vectores a,b,c,d (que dan la matriz |w|):
> w<-matrix(c(a,b,c,d),ncol=6,nrow=6, byrow=TRUE, dimnames=list(c("fila
1","fila 2","fila 3","fila 4","fila 5","fila 6"), c("col 1","col 2","col
3","col 4","col 5","col 6")))
> w
col 1 col 2 col 3 col 4 col 5 col 6
fila 1 1 1 1 1 1 1
fila 2 2 2 2 2 2 2
fila 3 3 3 3 3 3 3
fila 4 4 4 4 4 4 4
fila 5 1 1 1 1 1 1
fila 6 2 2 2 2 2 2

Obsérvese que los vectores poseen 6 elementos, por lo que la matriz cuadrada es la repetición de
dos filas (5 y 6), para crear la matriz similar al ejercicio anterior solo hay que cambiar nrow=4 y
eliminar las etiquetas de filas 5 y 6. Si faltan elementos según la declaración, se completan
repitiendo los existentes en el orden secuencial de la expresión ‘a,b,c,d’

También hemos usado una función llamada list() –lista- que explicaremos en breve. Como siempre
la función “c()” es la que concatena miembros en la lista y vectores. Otro detalle: si el argumento
byrow=FALSE (para crear la matriz |x|) el resultado seria:
> x<-matrix(c(a,b,c,d),ncol=6,nrow=6, byrow=FALSE, dimnames=list(c("fila
1","fila 2","fila 3","fila 4","fila 5","fila 6"), c("col 1","col 2","col
3","col 4","col 5","col 6")))
> x
col 1 col 2 col 3 col 4 col 5 col 6
fila 1 1 2 3 4 1 2
fila 2 1 2 3 4 1 2
fila 3 1 2 3 4 1 2
fila 4 1 2 3 4 1 2
fila 5 1 2 3 4 1 2
fila 6 1 2 3 4 1 2

El parámetro Byrow establece como se ordena por filas o columnas o por filas según sea FALSE o
TRUE. Byrow es “por filas”

31 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Por consiguiente la traspuesta de |x| seria la |w| o al revés, según tomemos a una u otra como
original. Con el parámetro byrow estamos creando una transpuesta a la matriz, pero existe una
función específica para esto, y mas practica. Con una función t(x) hallamos la transpuesta:
> t(x)
fila 1 fila 2 fila 3 fila 4 fila 5 fila 6
col 1 1 1 1 1 1 1
col 2 2 2 2 2 2 2
col 3 3 3 3 3 3 3
col 4 4 4 4 4 4 4
col 5 1 1 1 1 1 1
col 6 2 2 2 2 2 2

El acceso a los datos de una matriz es siguiendo la notación |matriz| [fila, columna]:

> w
col 1 col 2 col 3 col 4 col 5 col 6
fila 1 1 1 1 1 1 1
fila 2 2 2 2 2 2 2
fila 3 3 3 3 3 3 3
fila 4 4 4 4 4 4 4
fila 5 1 1 1 1 1 1
fila 6 2 2 2 2 2 2
> w[1,5]
[1] 1
> w[2,3]
[1] 2
Para acceder a todos los elementos de una fila:

> w[3,] # se omite el valor de columna


col 1 col 2 col 3 col 4 col 5 col 6
3 3 3 3 3 3
Y para leer todos los resultados de una columna:

> w[,3] # se omite el valor de fila


fila 1 fila 2 fila 3 fila 4 fila 5 fila 6
1 2 3 4 1 2

Un ejemplo real de trabajo con una matriz


En uno de nuestros scripts analizamos datos correspondientes a las temperaturas en cierta zona
del Pacifico Norte y su correlación en ríos de la provincia de Corrientes, mediante herramientas de
minería de datos. La primera tarea fue el armado de una matriz:

32 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


# Red neuronal con AMORE para correr correlación hídrica entre ICG y rio Corrientes
# Junio de 2012. Armando Taie / Edwin Aguiar
# Instituto Nacional de Tecnologia Agropecuaria (INTA)
# Estacion Experimental Agropecuaria Corrientes / Mineria de Datos
#==================================================================================
# CONEXION A LA DB
#==================================================================================
library(RODBC)
ch <- odbcConnect("database", "usuario", "contrasena")
odbcGetInfo(ch)
#==================================================================================
# detalle de tablas especificas de la DB:
# Cod_afo (codigos de aforo), Cod_med (codigos de mediciones), son tablas parseadas
# relacionadas para RIOS, la tabla objetivo de las consultas.
#----------------------------------------------------------------------------------
# crudos, pledesma, mirinay, sroquito son tablas obsoletas de datos RIOS, sin uso.
#----------------------------------------------------------------------------------
# nomenclatures es la tabla relacionada con denominacion de indicadores de la tabla
# parseada INDICATORS, con los valores de estos indicadores oceanicos y objeto de la consulta
#==================================================================================
# CREACION y CARGA DE VECTORES EN MATRIZ
#==================================================================================
# detalle de la nomenclatura> P: vector, '1'numero de indicador, 'a,b,c' year, month,
# value, los tres vectores se indexan en una matriz 'N'
# M: matriz de 3x744 '1' numero de indicador
#-----------------------------------------------------------------------------------
#----> creamos vectores indicador 1 y matriz de “year, month y value”:
P1a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 1 " , sep="")))); #M<-P;
P1b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 1 " , sep="")))); #M<-P;
P1c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 1 " , sep="")))); #M<-P;
M1<- matrix(nrow = 744, ncol = 3);
M1<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 2:
P2a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 2 " , sep="")))); #M<-P;
P2b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 2 " , sep="")))); #M<-P;
P2c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 2 " , sep="")))); #M<-P;
M2<- matrix(nrow = 744, ncol = 3);
M2<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 3:
P3a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 3 " , sep="")))); #M<-P;
P3b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 3 " , sep="")))); #M<-P;
P3c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 3 " , sep="")))); #M<-P;
M3<- matrix(nrow = 744, ncol = 3);
M3<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 4:
P4a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 4 " , sep="")))); #M<-P;
P4b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 4 " , sep="")))); #M<-P;
P4c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 4 " , sep="")))); #M<-P;
M4<- matrix(nrow = 744, ncol = 3);
M4<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 5:
P5a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 5 " , sep="")))); #M<-P;
P5b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 5 " , sep="")))); #M<-P;
P5c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 5 " , sep="")))); #M<-P;
M5<- matrix(nrow = 744, ncol = 3);
M5<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 6:
P6a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 6 " , sep="")))); #M<-P;

33 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


P6b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 6 " , sep="")))); #M<-P;
P6c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 6 " , sep="")))); #M<-P;
M6<- matrix(nrow = 744, ncol = 3);
M6<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 7:
P7a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 7 " , sep="")))); #M<-P;
P7b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 7 " , sep="")))); #M<-P;
P7c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 7 " , sep="")))); #M<-P;
M7<- matrix(nrow = 744, ncol = 3);
M7<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 8:
P8a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 8 " , sep="")))); #M<-P;
P8b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 8 " , sep="")))); #M<-P;
P8c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 8 " , sep="")))); #M<-P;
M8<- matrix(nrow = 744, ncol = 3);
M8<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 9:
P9a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 9 " , sep="")))); #M<-P;
P9b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 9 " , sep=""))));#M<-P;
P9c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 9 " , sep=""))));#M<-P;
M9<- matrix(nrow = 744, ncol = 3);
M9<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 10:
P10a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 10 " , sep="")))); #M<-P;
P10b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 10 " , sep="")))); #M<-P;
P10c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 10 " , sep="")))); #M<-P;
M10<- matrix(nrow = 744, ncol = 3);
M10<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 11:
P11a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 11 " , sep="")))); #M<-P;
P11b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 11 " , sep=""))));#M<-P;
P11c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 11 " , sep="")))); #M<-P;
M11<- matrix(nrow = 744, ncol = 3);
M11<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 12:
P12a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 12 " , sep="")))); #M<-P;
P12b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 12 " , sep="")))); #M<-P;
P12c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 12 " , sep="")))); #M<-P;
M12<- matrix(nrow = 744, ncol = 3);
M12<-cbind(P1a,P1b,P1c);
#-----> lo mismo, indicador 13:
P13a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 13 " , sep="")))); #M<-P;
P13b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 13 " , sep="")))); #M<-P;
P13c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 13 " , sep="")))); #M<-P;
M13<- matrix(nrow = 744, ncol = 3);
M13<-cbind(P1a,P1b,P1c);
#=================================================================================
# creamos una superMatrix
#=================================================================================
N<-matrix(nrow=744, ncol=39);
N<-cbind(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13);
# USO> N[a,b] donde a: fila y b: columna, las filas son 744 valores y las columnas
# sets de tres valores (year, month, value), P1a,P1b,P1c hasta P13a, P13b, P13c.
# llamar a valor de abril de 1963 del indicador 13 =====> N[200,37] -> year (1963),
# N[200,38] -> month (4) y el valor: N[200.39] nos dara 0.14.
# Esta matrix es solo a efectos de constatar valores en caso de requerir una vista
# rapida del total general. Solo imprimira 10.000 numeros salvo que se modifique
# el parametro getOption("max.print")

34 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


#*********************************************************************************
# CREACION DE LA MATRIZ DE ENTRADA A LA RED NEURONAL #
#*********************************************************************************
# se concatenan los vectores p1c al p13c (vectores de valores), para seleccionar
# eliminar los vectores no deseados. Eliminar P1a y P1b para salida de 10K.
#---------------------------------------------------------------------------------
# X<-cbind(P1a,P1b,P1c,P2c,P3c,P4c,P5c,P6c,P7c,P8c,P9c,P10c,P11c,P12c,P13c);

X<-cbind(P1c,P2c,P3c,P4c,P5c,P6c,P7c,P8c,P9c,P10c,P11c,P12c,P13c);

Es posible que de entrada no comprenda demasiado de este código. No se preocupe, sin embargo
es fácil de interpretar si lo analiza desde una óptica guiada.

• Lo azul son comentarios que sirven para comprender lo que se ha programado, es una
buena practica hacerlo, ya que al tiempo es muy usual que se olvide que quiso hacer en
esa parte del script en su oportunidad, además al compartir sirve de guía a terceros. El
carácter # al inicio de la línea indica que eso es un comentario y no una instrucción al
programa.
• La primera parte es la carga de una librería para conectar a una base de datos MySql, ya
hablaremos de ello mas adelante.
• La segunda es la obtención de los datos de esa base de datos y la creación de varios
vectores P1a…P13c con datos específicos para el análisis
• Luego los vectores se van uniendo en matrices |Mn| y confluyen en una gran matriz |X|

El resultado es una matriz de 744 filas por 13 columnas que en parte reproducimos aquí:

Esto luego será ingresado para su análisis en una red neuronal. Es destacable que la mayoría del
trabajo de R es repetitivo. Si se observa con detenimiento el ejemplo se advertirá que es
simplemente la repetición de pocos pasos, trece veces, con una configuración específica a cada
situación, pero en definitiva si observamos el “alma” es un trabajo sencillo.

35 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Las funciones que Ud. lea en el script y
que no comprenda recuerde de buscarlas
en la ayuda, en poco tiempo dominara la
mayoría de las posibilidades de R.

Más Operaciones y funciones con matrices


Regresando a las matrices, hay varias operaciones y
funciones que permiten un trabajo fluido en R. En el
primer cuadro, las operaciones básicas. En el
segundo las funciones más usuales. 14

No son las únicas, ya que existen tantas como para


“hacer dulce”; para ampliar o conocer más
posibilidades consulte la ayuda de R en Rstudio.

14
Extraídos de www.unbarquero.blogspot.com.ar/2009/03/r-matrices.html

36 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


5. Listas
Una lista es una colección ordenada de datos, como un vector, pero con la diferencia del vector,
puede contener tipos de datos diferentes.

Los elementos que integran la lista se denominan “componentes”, tal como se menciono arriba,
estos componentes pueden ser valores numéricos, cadenas de caracteres, valores lógicos e incluso
vectores o matrices. La función que crea y maneja las listas es list(). Su sintaxis en un ejemplo es:
> agenda<-list(nombre="Juan",apellido="Perez",codigo="101",categoria="a")
> agenda
$nombre
[1] "Juan"

$apellido
[1] "Perez"

$codigo
[1] "101"

$categoria
[1] "a"
Donde las etiquetas (nombre, apellido, código y categoría) poseen un valor asignado. Si por
ejemplo quisiéramos agregar un vector o matriz solo deberíamos incluirlo en uno de los campos, o
agregar esta lista a una lista que contenga dichos elementos.

El acceso a los componentes se efectúa mediante el índice numérico o por su nombre:


> agenda$nombre[1] "Pedro"

> agenda$categoria
[1] "a"
> agenda$apellido
[1] "Rodriguez"
> agenda[1]
$nombre
[1] "Pedro"

> agenda[[1]]
[1] "Pedro"
> agenda[["nombre"]]
[1] "Pedro"
>
Supongamos que no le hemos puesto nombres a los componentes de la lista, en el ejemplo
siguiente vemos como hacerlo:
> agenda<-list(1, "ahora", T, c(23,34,45)) > names(agenda)<-c("estado", "cuando", "funciona", "variables")
> agenda > agenda
[[1]] $estado
[1] 1 [1] 1

[[2]] $cuando
[1] "ahora" [1] "ahora"

[[3]] $funciona
[1] TRUE [1] TRUE

[[4]] $variables
[1] 23 34 45 [1] 23 34 45

37 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Primero hemos creado la lista y después le hemos colocado los nombres a los componentes. Si
deseamos agregar un nuevo campo solo debemos colocarlo en la posición siguiente (u otra) de la
lista, por ejemplo en este caso en la 5ta con una instrucción de asignación nombrando al nuevo
elemento:
> agenda$nombre_perro<-"Sultan"
> agenda
$estado
[1] 1

$cuando
[1] "ahora"

$funciona
[1] TRUE

$variables
[1] 23 34 45

$nombre_perro
[1] "Sultan"

Si por algún motivo deseamos eliminar un componente de la lista, aplicamos agenda[posición en


numero]=NULL y se corren todos los elementos de dicha lista, si los hubiera detrás del eliminado.
También se puede renombrar un componente utilizando names(lista)[nro componente]<-‘nuevo
nombre’:
> names(agenda)[5]<-"Nombre_del_jefe"
> agenda
$estado
[1] 1

$cuando
[1] "ahora"

$funciona
[1] TRUE

$variables
[1] 23 34 45

$Nombre_del_jefe
[1] "Sultan"

Aplicar funciones a listas, vectores y matrices


Se pueden realizar muchas funciones sobre una lista(vectores y matrices) con la función lapply(),
útil en casos de valores numéricos. Primero creamos una lista con un vector X y una matriz W
# observe como se crea la secuencia de números
> x<-c(1:15)
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)
# observe como se crea la secuencia de números, filas y columnas)
> w<-matrix(12:23, 3,4> w
[,1] [,2] [,3] [,4]
[1,] 12 15 18 21
[2,] 13 16 19 22

38 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


[3,] 14 17 20 23
# creamos la lista conteniendo el vector y la matriz
> lista<-list(vector=x,matriz=w)
# listamos por pantalla el resultado
> lista
$vector
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

$matriz
[,1] [,2] [,3] [,4]
[1,] 12 15 18 21
[2,] 13 16 19 22
[3,] 14 17 20 23
Ahora que ya tenemos una lista podemos aplicar algunas de las funciones de R al conjunto de
datos. Por ejemplo una media, sumar un término, raíz cuadrada etc:

> lapply(lista, > lapply(lista, "*",5) > lapply(lista, sqrt)


mean) $vector $vector
$vector [1] 5 10 15 20 25 30 [1] 1.000000 1.414214 1.732051 2.000000
[1] 8 35 40 45 50 55 60 65 70 2.236068 2.449490 2.645751 2.828427
75 3.000000 3.162278 3.316625
$matriz [12] 3.464102 3.605551 3.741657 3.872983
[1] 17.5 $matriz
[,1] [,2] [,3] [,4] $matriz
[1,] 60 75 90 105 [,1] [,2] [,3] [,4]
[2,] 65 80 95 110 [1,] 3.464102 3.872983 4.242641 4.582576
[3,] 70 85 100 115 [2,] 3.605551 4.000000 4.358899 4.690416
[3,] 3.741657 4.123106 4.472136 4.795832
Algunas funciones para lappy()

La función lapply() es el acrónimo de list-apply


(aplicar a lista), para extender la usabilidad del
comando es conveniente consultar la ayuda de R.
Para finalizar el ítem de listas es posible
concatenar varias en una grande utilizando el
comando c(): GranLista<-c(lista1,lista2,…,lista’n’)

6. Series temporales
La función ts crea un objeto de clase "ts" (serie de tiempo) a partir de un vector (serie de tiempo
única) o una matriz (serie multivariada). Las opciones que caracterizan un objeto de este tipo son:

ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps =


getOption("ts.eps"), class, names)

Donde:
data es un vector o una matriz
start el tiempo de la primera observación ya sea un número o un vector con dos enteros
end el tiempo de la ´ultima observación especificado de la misma manera que start
frequency el número de observaciones por unidad de tiempo
deltat la fracción del periodo de muestreo entre observaciones sucesivas (ej. 1/12 para
datos mensuales); únicamente se debe especificar o frequency o deltat, no ambos
ts.eps tolerancia para la comparación de series. Las frecuencias se consideran iguales si su
diferencia es menor que ts.eps
class clase que se debe asignar al objeto; por defecto es "ts" para una serie univariada, y
c("mts", "ts") para una serie multivariada.

39 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


names para una serie multivariada, un vector de tipo carácter con los nombres de las
series individuales; por defecto los nombres de las columnas de data, o Serie 1, Serie 2, . . .

Ejemplo simple:

> ts(1:10, start=1963)


Time Series:
Start = 1963
End = 1972
Frequency = 1
[1] 1 2 3 4 5 6 7 8 9 10
> ts(1:47, frequency=12, c(1963,2))
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1963 1 2 3 4 5 6 7 8 9 10 11
1964 12 13 14 15 16 17 18 19 20 21 22 23
1965 24 25 26 27 28 29 30 31 32 33 34 35
1966 36 37 38 39 40 41 42 43 44 45 46 47

Ejemplo de un objeto ts multivariado, creando los datos y asignándoles las fechas de inicio y
finalizacion:

z <- ts(matrix(rt(200 * 8, df = 3), 200, 8),start = c(1961, 1), frequency = 12)

Salida de pantalla del objeto z

Los 8 vectores de
200 elementos
conforman una
matriz generada por
la funcion de
densidad df, desde
enero de 1961 hasta
agosto de 1977 (200
meses), para llegar a
diciembre de 1977
hubieramos modificado el valor 200 por 204 en ambos parametros de la matriz, ya que esta (o el vector) da
el parametro end del objeto ts:
Aug 1977 0.344485638 0.10038734 0.4793899037 0.938980707 0.51215920 -0.652676989 -4.201032383 0.19732965
Sep 1977 -0.017276507 -0.58275948 1.2765019418 -0.587473105 -1.27479022 -0.735514614 -0.593461925 -1.20529338
Oct 1977 -0.400361565 -0.70152649 0.3270212261 0.846609274 -0.09344580 -0.073988515 -2.013691343 1.43581177
Nov 1977 -1.047250442 -3.63683123 -1.7609765624 -1.418322486 -0.30770078 -0.261224369 0.186109543 -0.22609936
Dec 1977 0.508033325 -0.22636919 -0.0945126165 -0.416216730 -1.58260960 -1.234875595 -0.065235039 -2.31813237

Por ultimo un ploteo del ejemplo de la ayuda de R que


utilizamos para explicar el código anterior:

El código completo:
> ## Multivariate
> z <- ts(matrix(rt(204 * 8, df = 3), 204, 8),
+ start = c(1961, 1), frequency = 12)
> plot(z, yax.flip = TRUE)
> plot(z, axes = FALSE, ann = FALSE, frame.plot =
TRUE,mar.multi = c(0,0,0,0), oma.multi = c(1,1,5,1))
> title("plot(ts(..), axes=FALSE, ann=FALSE,

40 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


frame.plot = TRUE, mar..., oma...)")
>
> z <- window(z[,1:3], end = c(1977,12))
> plot(z, type = "b") # multiple
> plot(z, plot.type="single", lty=1:3, col=4:2)

Los parámetros en rojo son los modificados para que la graficación llegue a diciembre de 1977.

7. Dataframes
El objeto data.frame, en español “hojas de datos”, es similar a una matriz pero con el concepto de
listas, ya que a diferencia de las primeras, admite datos de distinto tipo. Hay algunos que la
definen como una colección indexada de listas, otros como el objeto más eficiente para el análisis
de datos 15

Los objetos data.frame se pueden construir de varias maneras:

• Mediante la instrucción data.frame()


• Mediante la lectura de una tabla almacenada en un archivo, con read.table()
• Mediante la adicción y forzado a la condición data.frame de otros elementos con la
instrucción as.data.frame() esto acopla los vectores, factores, listas o matrices.

Las condiciones del objeto data.frame


Estas ofician de restricciones y son las siguientes según explica la documentación del sitio oficial
de R 16:

• Los componentes deben ser vectores (numéricos, cadenas de caracteres, o lógicos),


factores, matrices numéricas, listas u otras hojas de datos.
• Las matrices, listas, y hojas de datos contribuyen a la nueva hoja de datos con tantas
variables como columnas, elementos o variables posean, respectivamente.
• Los vectores numéricos y los factores se incluyen sin modificar, los vectores no numéricos se
fuerzan a factores cuyos niveles son los únicos valores que aparecen en el vector.
• Los vectores que constituyen la hoja de datos deben tener todos la misma longitud, y las
matrices deben tener el mismo tamaño de filas

A continuación un ejemplo para crear un data.frame a partir de otros elementos:


> pelaje<-factor(c("blanco","cafe","negro","blanco"))
> peso<-c(2.45,1.90,2.00,1.95)
> conejos<-data.frame(Pelaje=pelaje,Peso=peso,Crias=c(8,6,8,7))
> conejos
> conejos
Pelaje Peso Crias
1 blanco 2.45 8
2 cafe 1.90 6
3 negro 2.00 8
4 blanco 1.95 7

15
“Métodos Estadísticos con R y RComander” (versión 2.1) Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén, 2010 (pg 22)
16
“Introducción a R”, Core Team, pg 35

41 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


En azul la salida de pantalla del data.frame, integrando el factor pelaje, el vector peso y el vector
añadido crías. Las matrices, al igual que casi todos los objetos, pueden ser forzadas. En este caso a
hoja de datos mediante as.data.frame:
> secuencia<-matrix(1:30, 5,6) # creamos una matriz secuencial 1 a 30
> secuencia # imprimimos en pantalla
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 6 11 16 21 26
[2,] 2 7 12 17 22 27
[3,] 3 8 13 18 23 28
[4,] 4 9 14 19 24 29
[5,] 5 10 15 20 25 30
> hoja_calculo_1<-as.data.frame(secuencia) # convertimos a data.frame
> hoja_calculo_1 # imprimimos en pantalla
V1 V2 V3 V4 V5 V6
1 1 6 11 16 21 26
2 2 7 12 17 22 27
3 3 8 13 18 23 28
4 4 9 14 19 24 29
5 5 10 15 20 25 30
Observe que las columnas se enumeran V1, V2 …Vn si deseamos ponerles un nombre especifico
debemos crear un vector de nombres mediante names:
> names(hoja_calculo_1)<-c("Uno","Dos","Tres","Cuatro","Cinco","Seis")
> hoja_calculo_1
Uno Dos Tres Cuatro Cinco Seis
1 1 6 11 16 21 26
2 2 7 12 17 22 27
3 3 8 13 18 23 28
4 4 9 14 19 24 29
5 5 10 15 20 25 30
Algunas formas de llamar a la hoja y a sus datos:
Nota 10
> conejos
Pelaje Peso Crias ¿Cómo saber que objetos tenemos? Con el
1 blanco 2.45 8 comando ls() lista los objetos en memoria
2 cafe 1.90 6 del workspace. Si deseamos saber que tipo
3 negro 2.00 8 de objeto se trata, con is.data.frame(),
4 blanco 1.95 7
is.matrix() o is.vector() nos responderá:
> conejos$Pelaje
> ls()
[1] blanco cafe negro blanco
[1] "lista" "w" "x"
Levels: blanco cafe negro
> is.list(lista)
> conejos$Pelaje[3]
[1] TRUE
[1] negro
> is.data.frame(w)
Levels: blanco cafe negro
> conejos$Peso[4] [1] FALSE
> is.vector(x)
[1] 1.95
[1] TRUE
> conejos$Crias[1]
[1] 8

42 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


8. Operadores y funciones
Como todo programa y entorno de programación (R es un lenguaje interpretado, no compilado 17),
posee una vasta colección de operadores. En las dos tablas que se adjuntan, se exponen algunos
de ellos. Los operadores se suelen
clasificar en unarios, binarios etc.,
según la cantidad de parámetros
que intervienen en su expresión.

El uso general es variable_1


operador variable_2

A != B (dará TRUE o FALSE)


A + B (dará la adicción de ambos)
A & B (dará TRUE o FALSE según
la tabla de verdad)

La asignación no debe utilizarse


con el signo “=” sino con “<-”:
C<-A+B (C recibe la suma de A y
B)

La igualdad (comparación) es
“==”

Las funciones en general reciben uno o más parámetros de una o más variables. En la segunda
tabla observamos que sum(x) o prod(x) [sumatoria y productorio] reciben un vector, matriz o
variable unidimensional, en el ejemplo c=7 y d es un vector de 1 a 10:
> prod(c)
[1] 7
> d<-c(1:10)
> prod(d)
[1] 3628800
> sum(c)
[1] 7
> sum(d)
[1] 55
> factorial(d)
[1] 1 2 6 24 120 720 5040 40320 362880 3628800
En el ejemplo vemos también que el factorial “d” es igual al productorio “d”, dos formas de
realizar lo mismo. Por supuesto hay muchas mas funciones, y cada día se agregan mas en
numerosos paquetes que se van compartiendo en los repositorios. Estos sitios son de donde
descargamos paquetes específicos para ciertos tipos de cálculos o necesidades.

17
Es decir que no genera ejecutables o aplicaciones independientes de su propio entorno.

43 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Una noticia, varios ejercicios de cálculo
Hace un tiempo, en una revista matemática en España, una joven logro emular la proeza de Gauss
cuando era niño; me refiero a la sumatoria de los 100 primeros números. Usualmente para realizar
este ejercicio se suman los términos (n1+n2+n3+…nn ), simbolizados asi:
𝑛

�(𝑥𝑖 )
𝑖=1

Esto significa “sumar los términos de x desde 1 hasta n”

Si no disponemos de una pc o una calculadora científica puede ser engorroso sino imposible (las
calculadoras en general no poseen memoria suficiente para almacenar esta larga suma en una sola
operación). Si tenesmo una calculadora científica o un pc es mas sencillo.

En R la sumatoria es sum(), la maquina realiza las iteraciones (repeticiones) una y otra vez. La
joven de la noticia, lo resolvió con una simple formula que solo utiliza operadores comunes
matemáticos: n(n+1)/2

Nuestro ejercicio: Si quisiéramos saber cual es la sumatoria de los primeros mil números…. ¿Cual
es el resultado y como lo haría?
> sum(1:1000) # utilizando la función sumatoria de n
[1] 500500
> 1000*(1000+1)/2 # Haciendo el calculo de la joven española
[1] 500500
Otro ejemplo de calculo: El cologaritmo18 de un número es el logaritmo de su inverso, por tanto el
cologaritmo de un número es el opuesto de su logaritmo ¿Cómo lo haríamos en R?
> log(10)
[1] 2.302585
> log(1/10) # el inverso de n = 1/n
[1] -2.302585
El logaritmo es definido como “El logaritmo de un número, en una base dada, es el exponente al
cual se debe elevar la base para obtener el número” 19 Si tenemos un logaritmo de base 2 (binario):
> log2(3)
[1] 1.584963 # este es el logaritmo de 3
> 2^1.584963 # si potenciamos la base (2) por el logaritmo ¿Qué tendremos?
[1] 3.000001 # su antilogaritmo! (¿se anima a hacerlo con un logaritmo natural?)
> log(8)
[1] 2.079442
> 2.7182807066232140698591273860753^2.079442 # base de log naturales o neperianos
[1] 7.999997
En estos ejercicios lo que interesa es que comprenda como utilizar la consola, funciones y
parámetros. Pruebe realizar toda serie de cálculos, explorando las posibilidades de R y leyendo la
ayuda. Eso le dará ductilidad en el manejo de expresiones (así se llaman las líneas de programa)
para intentar cosas mas complejas o comprenderlas.

18
Se denomina cologaritmo de un número a su inverso 1/N, de manera tal que log(n) + log(1/n)=0
19
“Elementos de matemáticas” Kutuzov, ed Mir 1980

44 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Como hacer secuencias 20
Habrá advertido que a lo largo del texto hemos salido del paso cuando necesitamos generar datos
para trabajar o demostrar, lo hacíamos con secuencias. Aquí veremos algunas

• Secuencias regulares
• Secuencias aleatorias

Las secuencias regulares como su nombre lo indican, consisten en aquellas que siguen un orden.
Hay varias maneras de crearlas:

La primer manera es
indicar el rango desde
hasta con 1:30, expresión
muy usada para crear
vectores: a<-c(1:30)

La segunda es la función
seq() (de sequence:
secuencia) que consta de un primer parámetro que es desde, el segundo hasta, el tercero el paso
(“by”) que indica la escala y un cuarto que establece una condición de conclusión. 21 En la captura
de pantalla se puede ver que incluso se pueden generar secuencias hacia atrás (recuerde que el
parámetro By debe tener signo negativo).

Las secuencias aleatorias están


compendiadas en la siguiente tabla 22 El
uso de cada cual depende de los
parámetros propios de cada tipo de
distribución. Ejemplos:
> rnorm(19)
[1] -0.38907028 -1.16947999
0.14250125 -0.43886069 -1.24466640 -
0.12730233 1.01931524 -0.10994081 -
0.77472142 0.18728813 -0.33068797 -
0.56841233 1.02925734 0.49822730
0.68306228 -0.09419181 -0.11362381
1.67033036 0.41387123
> rpois(14,10)
[1] 9 7 12 16 9 8 6 12 12 5 13
15 10 9
Por comodidad solemos usar rnorm() o rbinom() pero al tener varios decimales, para usos
sencillos es algo engorroso, por eso también utilizamos round() que establece dos
parámetros: dato a redondear y decimales, por ejemplo c<-round(rnorm(20),2)
que nos dará 20 números aleatorios redondeados a dos decimales.
20
En matematicas a estas secuencias se les denomina “sucesiones”
21
Una tercer manera es concatenar un vector “en crudo”: vector<-c(1,2,3,4,5,6,7,8,9,10)
22
“R para principiantes” Prof. Emmanuel Paradis (Universidad de Montepellier II), traducción de Jorge A. Ahumada (Universidad de
Hawaii) pg. 17 y ssgtes

45 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


9. Leer y guardar datos
El sentido y objeto de R es procesar datos en un entorno estadístico que con el tiempo se han ido
incluyendo más disciplinas como por ejemplo minería de datos, concepto que involucra muchos
procedimientos nuevos como las redes neuronales, los arboles de decisión, etc., esto acarrea
volúmenes mayores de datos para ingresar, procesos intermedios y las salidas consecuentes.

Lejos estamos de la época que para hacer un estudio estadístico o un análisis bastaba teclear una
docena o dos de datos.

Por esto es evidente que a la hora de procesar datos para obtener información relevante, no
vamos a entrar uno a uno cada dato; para eso tenemos algún tipo de repositorio 23 de datos que
accedemos para tomar selectivamente o a granel lo necesario y procesarlo. Lo mismo para la
salida, un repositorio que permita guardar esos datos elaborados (información) de manera tal que
podamos leerlos para extraer las conclusiones pertinentes.

Por ejemplo en algunas de nuestras bases de datos albergamos algunos datos “crudos”:

• Clima: 558.775
• Germoplasma 1: 11.900
• Telecomunicaciones: 159.140

¿No es una tentación para cualquier estadístico o explorador de datos? Aun así, no son grandes
bases, pero el potencial de análisis es grande.

a. Repositorios de datos
Para poder trabajar los datos se suelen importar a R mediante varios tipos de repositorios; a la
inversa, los resultados o pasos intermedios se suelen exportar también. Esencialmente pueden ser
repositorios: Nota 11

• Archivos de texto plano (CSV) delimitados por También puede ingresar desde el teclado
comas, punto y coma o tabulaciones “en vivo” valores mediante scan():
• Archivos de planillas de calculo Excell > scan()
• Bases de datos (MySql y otras) 1: 23
2: 33
• Direcciones de Internet. 3: 44
• Desde el teclado 24 4: 55
5:
Read 4 items
b. Para comenzar: iniciar sesión en Rstudio [1] 23 33 44 55
La primera operación que se debe realizar antes de Finaliza con una entrada de carácter nulo
cargar o guardar material desde R es determinar el (enter)
directorio por defecto. La manera de hacerlo en Rstudio
es por consola de comandos, por script o por la interfaz grafica.

23
Repositorio es un archivo o sistema que permite guardar los datos sin procesamiento alguno (crudos) tal como se han medido o
contado. No confundir con fuente, que puede ser, por ejemplo, un termómetro, un anemómetro, una encuesta, es decir los
instrumentos generadores.
24
El único procedimiento existente en Rstudio es scan(), la función data.entry() no esta implementada en Rstudio pero si en R.

46 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


• Pero esto depende del entorno de trabajo que se halle. Si utiliza Rstudio-
server el path (dirección del directorio de trabajo) lo determina Debian, el
servidor donde este alojado Rstudio server. Usualmente es
“/home/<usuario> “
• En una instalacion local de Rstudio, el directorio por defecto es
“C:/Users/<usuario> /Documents”
• En ambos casos la recomendación es que para cada proyecto se utilice una
carpeta diferente, guardando no solo los scripts sino también el
workspace y los archivos que necesite.

Si usted va a correr una versión de Rstudio-server, debe primeramente conocer la IP (dirección


“internet Protocol”, un grupo de cuatro secuencias de tres números) y el puerto donde se accede
al server. En nuestro ejemplo es: 192.168.0.102:8787

Donde 8787 es el puerto de acceso


y la secuencia previa la “dirección”.
Abrimos el navegador web
(aconsejamos Chrome Google) y
escribimos esa secuencia (o la que
su administrador de red le de). En la
imagen vemos el acceso a Rstudio –server con el navegador Chrome, detalles de la dirección IP y
del panel de acceso (login) en los detalles.

En el caso de una instalación local (solo en su pc) no hay acceso, solo debe púlsar el icono en el
escritorio o en la barra de programas y accede.

47 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Arriba: Rstudio server a través de una interfaz en el navegador WEB, abajo: Rstudio versión local

Como se advierte son idénticas ambas pantallas. Solo difieren en algunos aspectos menores (la
interfaz web requiere validación como usuario con contraseña) no así en las funcionalidades y
elementos.

Una vez abierto el programa en cualquiera de sus dos modalidades, para comenzar y configurar su
directorio de trabajo debe saber donde esta. Con la función getwd() obtiene la ruta por defecto
en donde guardara sus archivos. En las dos imágenes siguientes se podrá ver la misma en dos

48 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


entornos distintos, en el Server (que corre un Linux Debian) 25 y en una instalación local en un
Windows 7

En la imagen de
la izquierda se
aprecia que es
la instalación
del servidor, la
URL es visible.
En la
información de
versión también
nos lo indica. El
directorio por
defecto es
/home/usuario

En la imagen de
la derecha se
visualiza que la instalación es local, en un Windows 7 y el directorio por defecto es /users/usuario/documentos Las
funciones versión y getwd() son las utilizadas para determinar esta información.

c. Configurar directorio
Para hacerlo por consola basta con utilizar el comando setwd(ruta):

En instalación local Windows Errores:


> getwd()
[1] "C:/Users/Edwin/Documents"
> setwd("C:/Users/Edwin/Documents/articulos/proyecto")
Error en setwd("C:/Users/Edwin/Documents/articulos/proyecto") :
no es posible cambiar el directorio de trabajo No existe el directorio “proyecto”
> setwd("C:/Users/Edwin/Documents/articulos/proyecto")
> getwd()
[1] "C:/Users/Edwin/Documents/articulos/proyecto"

En servidor Debian Errores:


> getwd()
[1] "/home/edwin"
> setwd("/home/edwin/r/proyecto")
Error in setwd("/home/edwin/r/proyecto") : Case sensitive: no es “r” sino “R”
cannot change working directory
> setwd("/home/edwin/R/proyecto") el directorio (ver imagen)
> getwd()
[1] "/home/edwin/R/proyecto"

d. Errores:
debe tener en cuenta que el directorio al cual ubicara su proyecto debe necesariamente existir. Si
no es asi, desde el panel de “files” (archivos) puede crear una nueva carpeta (“folder”) e incluso

25
Rstudio server se instala sobre Linux exclusivamente, hasta este momento. Las distribuciones que ya están adecuadas para su
instalación sin mayores compilaciones, son Debian, CentOs y Ubuntu. Utilizamos Debian debido a su facilidad, sus repositorios y su
manejo. Ubuntu y CentOs no le van a la zaga. Las demás distribuciones requieren de compilación de las fuentes y eso a veces si no se es
conocedor se suele dificultar un poco. Si va a instalar Rstudio Server le recomendamos Debian

49 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


asignarla como directorio de trabajo por defecto en el mismo menú grafico, tanto en la
instalación del server como en la local. En la imagen se puede apreciar este trabajo.

En la primera de la izquierda creamos la carpeta, en la segunda asignamos como directorio de


trabajo por defecto.

• También es posible hacerlo desde el menú “ToolsSet working directory” si no le agrada


hacerlo con la consola.

e. Lectura desde archivos 26


La clase “utils” posee varias funciones que permiten leer
varios cuyas funciones inician con “read”, tenemos
read.table(), read.csv(), read.swf(), read.csv2(),
read.delim() y read.delim2().

Un ejemplo de read.csv()
#configuramos donde
setwd("D:/mapas/apellidos/")
# obtenemos la matriz 100*3 apellidos
apellidos <- read.csv("apellidos.csv", header=F)
#View(apellidos) # descomentar para que aparezca
la ventana con los apellidos
# array de nombres de apellidos
nombres<-as.array(apellidos$V1)
cifras<-as.array(apellidos$V2)

En la imagen lateral: un ejemplo con read.table(). El


directorio sobre el cual esta posicionado contiene el
archivo “resultados”, que es una tabla. Si no fuera asa en el parámetro deberá indicar la ruta
absoluta: (“c:/users/usuario/documentos/artículos/proyecto/resultados”). Se recomienda leer la
ayuda de Rstudio para comprender los parámetros necesarios para la apertura de estos archivos.
En el caso del CSV suele ser necesario indicar el tipo de delimitador (comas, espacios, tabulador,

26
Para escribir en archivos se utiliza la función write() que no explicaremos aquí dado que es muy similar a read(), pero se puede
consultar en el manual de R

50 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


punto y coma) además si el header
(encabezado o vector con los
nombres) se carga. En la tabla
adyacente se pueden observar las
configuraciones de los parámetros
para read.table() 27

Un detalle a tener en cuenta es que


Excel genera archivos CSV que suelen
presentar problemas si no se advierte
que los separadores (delimitadores)
entre campos no siguen una norma
estandarizada.

Para abrir estos CSV se sugiere


revisar con un block de notas (no con
Word) y observar cual es la
separación entre campos. De todas maneras la interfaz grafica de carga de Rstudio permite ver en
detalle el proceso de importación y cargar los parámetros visualmente, e inclusive copiándolos de
la consola, incorporarlos a un script. En las imágenes vemos la operatoria:

En el panel de Workspace, la pestaña “import Dataset” seleccionamos desde un archivo de texto.


Navegamos entre los directorios y seleccionamos –por ejemplo- Resultados, la tabla que hemos
salvado. Al seleccionarla se abrirá la ventana de
la imagen, allí vemos dos vistas, la original y la
que se importara si utilizamos los criterios de
separator (delimitador), en este caso es “espacio
en blanco”, Decimal y Quote, que referencian a
los formatos de números y textos. Finalmente
heading es el encabezado con el vector de
nombres, que se puede captar o no según se
seleccione si o no. Es correcto tratar de levantar
distintos tipos de archivos (txt, csv) para
comprender el mecanismo. Si las opciones están
bien configuradas debería ver el resultado similar
a la ventana inferior del ejemplo.

Al aceptar esta configuración abrirá la consola con un comando que puede copiar para guardar
(copy y paste) desde la consola a la ventana de scripts. Es un buen recurso para cuando hay dudas
en cuanto a como escribir correctamente los parámetros de la función read.table(). El ejemplo con
la imagen correspondiente:

27
“R para principiantes” o. cit. Tabla de pagina 11

51 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


> resultados <- read.table("~/articulos/proyecto/resultados", header=T, quote="\"")

El comando Nota 12
view() nos
abre una La mejor manera de importar datos a
Rstudio, en realidad a R, es crear desde el
ventana en el
programa que utilice, un archivo de texto
panel de plano (CSV) e importarlo con la interfaz
scripts con el grafica de Rstudio, así podrá supervisar el
archivo, para proceso y detectar si hay delimitadores o
marcas de formato que impidan la correcta
inspeccionar.
adición de datos a su script.

f. Escritura hacia archivos


Tanto como leer datos es importante saber guardarlos. La función por excelencia para escribir es
write(). La función simple es write(“datos”, file=”archivo.extension”) que guardara en el
directorio de trabajo (o en la ruta si la incorpora al nombre de archivo) su objeto de datos. Las
opciones a este comando permiten determinar el numero de columnas, si el archivo es rescrito o
agregado, si no existe crearlo, etc. El cuadro debajo ilustra sobre dichas opciones y su uso 28

La función write.table guarda el contenido de un objeto en un archivo. El objeto es usualmente un


data.frame, pero puede ser cualquier otro tipo de objeto que el usuario determine (vector, matriz,
lista etc. ). Los argumentos y parámetros son:
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
eol = "\n", na = "NA", dec = ".", row.names = TRUE,
col.names = TRUE, qmethod = c("escape", "double"))

Write.table incorpora sep=”” que indica como van delimitados los datos, por ejemplo por
tabulador (“\t”), coma (“,”), punto y coma(“;”) tambien la indicacion de EOL (final de linea) con un
salto de linea ("\n"); etc. Debe prestar atención que parámetros elegirá para salvar sus datos, ya
que existen varios tipos de codificaciones que varían entre sistemas y programas (es proverbial la

28
“R para principiantes” op. Cit.

52 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


manía de Microsoft Office para cambiar estos valores por defecto, a fin de tener un estándar
propio).

Por supuesto los mismos argumentos que utiliza write, se aplican a write.table. También
se pueden guardar en otros formatos (bases de datos, csv, Excel, consulte la ayuda de las
librerías especificas para tal propósito)

g. Desde la web
Si quisiéramos tomar un archivo de la web existe el comando download.file()
La sintaxis que nos da la ayuda es la siguiente:
download.file(url, destfile, method, quiet = FALSE, mode = "w",cacheOK = TRUE, extra =
getOption("download.file.extra"))

h. Excel y otros tipos de formatos


Los archivos con extensión de Excel XLS pueden ser abiertos instalando el paquete “gdata” y
utilizando la función read.xls() aunque es algo difícil de utilizar y además requiere la instalación
adicional de python.

Con el paquete “XLConnect” existe una función


readWorksheetFromFile() que permite leer los archivos
xlsx de excel 2007 – 2010, cuyo ejemplo vemos en la
imagen adjunta, la instrucción:
data2<-
readWorksheetFromFile("excel2010.xlsx",sheet=1)

Carga en data2 la table de excel. Los archivos anteriores


de excel (xls) también se pueden cargar via ODBC con el
paquete RODBC, que sirve también para cargar datos
desde bases de datos como MySql y otras.

“R no es particularmente bueno importando datos generados por otros programas. No obstante, el


paquete recomendado es foreign que lee ficheros en formatos propios de, entre otros, SPSS, SAS,
Minitab, Stata, Epi y S. Hay que destacar que los formatos pueden presentar ligeras variaciones de
unas versiones a otras (típicamente, las versiones posteriores leen ficheros producidos mediante
las precedentes, pero no al revés). Podemos así encontrar que foreign nos permite leer, por
ejemplo, \worksheets" de Minitab de una versión determinada y las anteriores, pero no las
posteriores. Se impone por tanto también la prueba.” 29

Sin embargo dentro de las opciones evite usar Excel ya que es muy comun que según la
version del mismo (97, 2000, 2003, 2007, 2010) haya variaciones que hagan la lectura
dificil. En parte porque al cambiar el parametro XLM entre el 2003 y 2007, se suelen dar
problemas de compatibilidad al leerlos. Conviertalos a CSV y lea o grabe desde ese formato

29
“Lectura, manipulación y análisis de datos en R”, F. Tusell, actualización 2007 pag. 3; http://www.et.bs.ehu.es/~etptupaf

53 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


i. Conexiones ODBC y lectura-escritura en bases de datos
La lectura y escritura en bases de datos es la mejor opción de trabajo para maximizar la potencia
de R, ya que la naturaleza de una DB (base de datos) es almacenar datos. Existe la costumbre de
utilizar Excel como repositorio de datos. A ese respecto hay una publicación del investigador
especializado en ecología de bosques, Dr (PhD) Duncan Golicher: 30

“No sería una exageración decir que la mayoría de los errores en la captura y mantenimiento de datos tienen la
misma causa. Es el uso casi universal de hojas de cálculo para la captura de datos. Las ventajas de hojas de
cálculos son aparentes.

1. Su lógica es fácil de entender y usar.

2. Son universalmente disponibles en cualquier computadora.

3. Tienen herramientas potentes integradas para procesar y graficar datos.

4. La estructura de los datos es visualmente aparente y transparente

5. Usuarios avanzados de hojas de cálculo pueden usar una hoja de cálculo como si fuera un base de
datos sofisticada.

Efectivamente, mientras que sean correctamente utilizados las hojas de cálculo son herramientas potentes. Sin
embargo las fortalezas de hojas de cálculo están relacionadas con sus debilidades principales. La flexibilidad
que hace hojas de cálculo tan atractivas al mismo tiempo causa su mal uso y abuso. Al abrir una hoja de calculo
el usuario esta presentado con una hoja en blanco sin estructura. Entonces hay mucha tentación de inventar
una estructura de datos particular para cada problema. El resultado es caótico.

Una forma de evitar la mayoría de los problemas comunes es sencilla. Siempre asegurar que se puede entrar
los datos en ...... ¡una base de datos! Suena trivial y hasta tautológico aconsejar que se use software diseñado
para mantener datos para mantener datos! Sin embargo muchos estudiantes piensan que una hoja de cálculo
como Excel es una base de datos.

No lo es. Manejar Excel como una base de datos relacionada es posible, pero no es nada fácil, ni para usuarios
expertos que saben programar en Visual Basic para aplicaciones. Para un usuario normal sin experiencia con
bases de datos sería imposible manejar datos con una estructura jerárquica compleja en Excel.

En cambio, muchas cosas que son difíciles en Excel son fáciles en una base de datos1. Además la exportación de
datos de una base de datos a Excel para su procesamiento siempre es fácil. Hasta con ODBC se puede hacer
31
una conexión directa para que Excel puede usar la potencia del “structured query language” directamente.

Es común encontrar una resistencia a tomar el camino del uso de bases de datos entre usuarios con algo de
experiencia intermedia con Excel. Al tener contacto con una base de datos de verdad como Access, MySQL o
PostgreSQL usuarios quienes han encontrado sus propios métodos de lograr resultados en Excel
frecuentemente se quejan que el programa no les deja estructurar y capturar los datos como quieren.
¡Exactamente! Muy bien. Esta es precisamente su mayor ventaja. Si quieres mantener tus datos con una
estructura que no es posible en una base de datos, entonces estas ciertamente pensando en una estructura
equivocada para tus datos. Por todo lo lógico que te parezca, tu estructura casi siempre va a ser difícil de
comunicar a los demás y probablemente va a causarte muchos problemas al largo plazo.”

Excel, es bueno recordarlo, es una planilla de cálculos, mientras que una base de datos es lo que
su nombre indica, una base de datos. Es algo preparado para soportar grandes volúmenes de
datos, procesarlos para servir consultas, filtrados, operaciones ABM (altas, bajas, modificaciones),
etc. Es una buena práctica que los datos se guarden siempre en una DB. Hay muchos tipos de base

30
“Como mantener tus datos de investigación ordenadas” Duncan Golicher 2008,
31
SQL: lenguaje estructurado de consultas, lenguaje de manejo y administración de DB

54 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


de datos, pero en general se definen entre relacionales y no relacionales. La diferencia esta dada
en que las primeras poseen índices en una tabla que refieren a otras tablas. Así por ejemplo un
código en una tabla refiere a datos más extensos que están contenidos en una segunda tabla. El
mantenimiento de la segunda tabla es independiente de la primera, que solo utilizara estos índices
para indicar ciertas condiciones dadas por esa codificación.

En la imagen vemos un diagrama EER, esto es un diagrama o modelo entidad-relación (a veces


denominado por sus siglas en inglés, E-R "Entity relationship", o del español DER "Diagrama de
Entidad Relación") es una herramienta para el modelado de datos que permite representar las
entidades relevantes de un sistema de información así como sus interrelaciones y propiedades. En
el caso de las relaciones en una base de datos científica, como la del ejemplo 32, tenemos que:

Los registros de la tabla “ríos” nos refieren a las distintas relaciones, por ejemplo “cod_rios”
(código de ríos) involucra una forma de enumeración por cada rio (en tablas separadas) Para
agregar un nuevo rio solo hace falta agregar el código en cod_rios y crear la tabla especifica;
también vemos la relación entre cod_med (códigos de medición) que refiere a distintas medidas
que se cargan también en las tablas de ríos. Este esquema da flexibilidad y permite crear consultas
(“query”) muy especificas o filtradas que serian imposibles en un entorno excel. En R utilizando tan
solo la consulta adecuada se puede disponer de los datos con la granularidad deseada: muy
genéricos o muy específicos, pasando por toda la gama intermedia.

32
Base de datos “Flamenco” en la que analizamos la relación existente entre ríos de Corrientes y determinados puntos del Pacifico
Norte, con el Investigador del Instituto de Clima y Agua INTA Castelar Dr Eduardo Flamenco. El EER es solo demostrativo, no refleja el
estudio en minería de datos con R que se esta efectuando al escribir estas líneas. (N del A)

55 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


j. Introducción al mundo de las bases de datos
Las bases de datos difieren en un funcionamiento y forma en que están programadas, pero poseen
una generalidad que las hace universales, es el SQL o lenguaje estructurado de consultas que hace
que una operación sea mas o menos universal en todas las bases de datos.

Por ejemplo “SELECT * FROM tabla_equis” nos traerá la información contenida en la totalidad
de la “tabla_equis”; “SELECT id,especie,f_siembra,f_emergencia,f_cosecha FROM
tabla_equis WHERE condición=x” tendrá una salida selectiva en cuanto a los datos y su
cantidad.

Un par de capturas de una DB MySql, la primera mediante un software que oficia de manejador de
la base de datos 33, llamado phpmyadmin (especifico para MySql):

En la ventana de comando introducimos una instrucción sql, el resultado (4 registros) se aprecian


en la ventana grande de fondo. Si por el contrario usted posee acceso directo al servidor MySql
puede acceder también por consola, es un método más laborioso pero rápido.

En este ejemplo corremos un server de MySql local (dentro de la propia pc), también es posible
acceder a un server MySql en red LAN o en la Internet, colocando en la llamada el parámetro –h
(host) que es donde esta el servidor de MySql, por ejemplo en 192.168.0.101; en nuestro ejemplo
el server esta ubicado en la propia pc, el server se llama “localhost” o 127.0.0.1, lo que no
requerirá el parámetro –h en la llamada.

En un par de imágenes puede ver como es el trabajo con esta modalidad, la preferida de la
mayoría de los programadores ya que la pantalla de comandos es menos amigable. El programa
cliente de la base de datos se llama: mysql –u root –p [enter] desde la consola de comandos
de su sistema

33
Los sistemas de gestión de bases de datos o mejor conocidos como SGBD (en inglés database management system,
abreviado DBMS) son un tipo de software muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y
las aplicaciones que la utilizan.(Wikipedia)

56 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


La consulta sql de la consola es la misma que la efectuada
en phpmyadmin, la salida es la misma: 4 registros
identificados con el Id (IdMani1) 12, 80, 156, 170

En definitiva el uso de la interfaz grafica o de la consola


dependerá de las preferencias del investigador, para
ambas deberá consultar con su administrador de red
puesto que se requieren crear servers de DB, Apache y
Php (estos dos últimos en caso de utilizar phpmyadmin).
Una solución local (en su pc) es el programa XAMPP que
instala todo esto en una sola aplicación.

k. R y MySql
En R se puede incorporar una consulta SQL mediante una
serie de instrucciones:
1 library(RODBC)
2 ch <- odbcConnect("telip", "root", "entropia")
3 odbcGetInfo(ch)
4 P<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE,
paste("SELECT bruto FROM datos where id <101" ,
sep=""))));

La explicación de este script es la siguiente:

En la línea 1 se carga una librería especifica para conectar


mediante ODBC (un objeto del sistema que se especializa
en la conexiona bases de datos). Este OBDC oficia de
conducto entre la base de datos y el programa, llevando
las consultas y devolviendo el resultado. ODBC existe en
Windows, Linux y otras plataformas.

En la segunda línea se crea un objeto “ch” que posee los


parámetros de conexión a ODBC y el usuario y password
de la base de datos.

La tercera línea nos devuelve


un informe sobre la DB y nos
indica que la conexión posee
un status exitoso.

Finalmente la cuarta línea nos extrae una consulta que se carga en un vector “P” de 100
elementos. Existe una línea final que “plotea” un grafico que vemos a la derecha inferior de la
imagen:

57 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


l. Conducto ODBC
Una parte importante de la conexión ODBC es el conducto. En el
caso que nos ocupa es un driver que se descarga del sitio oficial
de MySql, al momento de esta redacción es el 5.3. Este driver se
debe instalar en el server de Rstudio o en la instalación local
(depende como se use Rstudio) y se configura en Debian
mediante una herramienta llamada UnixODBC, en Windows en
las “herramientas
administrativas”
existe el gestor de
“Administración de
orígenes ODBC”,
ambas imágenes en
las capturas.

Para instalar y crear


los conductos ODBC
consulte con su
administrador de red,
ya que existen
algunos conceptos que pueden resultar difíciles para un usuario que desconozca sobre redes,
direcciones IP y servidores de datos. Ante cualquier duda no dude en consultarnos. Finalmente en
Windows existen nativamente drivers de ODBC para Access y Excel.

58 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


m. Como guardar nuestros datos en MySql
No solo se trata de tomar los datos. Una vez elaborados debemos guardarlos de alguna manera. La
librería RODBC también posee las herramientas para realizar esta acción.
sqlSave(channel, dat, tablename = NULL, append = FALSE,rownames = TRUE, colnames = FALSE,
verbose = FALSE,safer = TRUE, addPK = FALSE, typeInfo, varTypes, fast = TRUE, test = FALSE,
nastring = NULL)

sqlUpdate(channel, dat, tablename = NULL, index = NULL,verbose = FALSE, test = FALSE,


nastring = NULL,fast = TRUE)

Si esto es demasiado técnico para usted, no se preocupe, haremos un ejemplo esclarecedor (eso
esperamos) Tenemos una tabla llamada “resultados” cuya imagen adjuntamos. Esta compuesta de
10 campos, los cuales 9 son utilizados (el primero es el índice único de cada registro, no se repite).
El código:
#==================================================================================
# GUARDAR DATOS EN RESULTADOS
#==================================================================================

library(RODBC)
ch <- odbcConnect("germoplasma", "jefe", "123456789")
odbcGetInfo(ch)
#==================================================================================
sqlTables(ch) #lista las tablas existentes
#==================================================================================

valores<-c(round(rnorm(10),2)) # creamos valores para guardar


mejoresto<-data.frame("casos"=valores); # creamos un data.frame
sqlSave(ch,"resultados", mejoresto, rownames=FALSE, addPK=FALSE);

Este script guardara los datos del dataframe en su base de datos MySql. Como es
costumbre le aconsejamos que revise la bibliografía de la librería, ya que de versión en
versión pueden haber diferencias sutiles que ocasionen algún que otro dolor de cabeza;
de todas maneras si guardar en una base de datos se le complica, guarde en CSV, desde MySql
es posible importar estos datos con seguridad utilizando PhpMyAdmin.

59 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


n. Otras maneras de guardar datos en MySql
Por supuesto, al igual que en la matemática, no hay un único camino para hacer las cosas. Si
deseamos a toda costa y pese a los errores y avisos que emita Rstudio, la forma mas simple de
guardar nuestros datos es la misma manera en que se han rescatado: mediante una query. Una
sentencia “pura” de MySql en lugar de una función de RODBC. ¿Cómo? Utilizando la expresión
propia del lenguaje SQL para ello y usando la función sqlQuery que ya utilizáramos al llamar los
datos de una tabla. Veamos el proceso.
#==================================================================================
# PRIMERA PARTE: CONEXION A LA DB
#==================================================================================

library(RODBC)
ch <- odbcConnect("germoplasma", "mi_usuario", "mi_password")
odbcGetInfo(ch)
#==================================================================================
sqlTables(ch) #lista las tablas existentes
#==================================================================================
Esta salida nos dará las tablas existentes, solo a los fines de detallar y realizar la inserción
correctamente, la salida por consola:
TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
1 germoplasma mani1 TABLE
2 germoplasma resultados TABLE
> #================================================================================

Tenemos dos tablas, una de la cual hemos extraído datos en el ejercicio de creación de un script, y
la tabla “resultados” que esta creada en el ítem anterior, para guardar los resultados de nuestros
cálculos. En SQL la orden de guardar datos es la siguiente:

INSERT INTO “tabla_donde_guardar” VALUES (valor1,valor2, …, valorN)

Donde “valor1…N” es el valor en el tipo de datos especifico que guardara la tabla. En la imagen
del ítem anterior observamos que la tabla Resultados posee tipo numérico decimal 12,2; significa
que admite números de hasta 12 dígitos con dos decimales. Si requiere mas precisión en ellos,
debe cambiar a, por ejemplo, 12,4 etc.

Un ejemplo nos permite cargar datos a la Base:


sqlQuery(ch, as.is=TRUE, paste("INSERT INTO resultados(valor1, … , valorN)
VALUES(valor[1],… valor[N],)"));

Sin embargo a veces no resultan (sqlSave ni sqlQuery) debido a complejidades propias


de los lenguajes R y sql, especialmente por el tema de los caracteres que se utilizan en
uno y otro entorno. Si llegan a producirse problemas o incompatibilidades, consulte la
ayuda de RODBC.

60 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Creación de un proyecto partiendo de cero
Un proyecto en Rstudio, como toda tarea sistemática y metodológica, exige algunos pasos previos
que hacen al resultado final. Estos pasos se pueden resumir en dos o tres conceptos generales:

• Trace un plan de trabajo sobre que va a hacer, desde donde parte, con que elementos
cuenta para los análisis y como los va a procesar para obtener una salida y de allí la
conclusión que permita darle sentido a su trabajo.
• Lo ideal es hacer este plan o esquema de trabajo en un papel, dividiendo las etapas de
manera clara y concisa, por ejemplo “adquisición de datos por csv”, “creación de vectores
de análisis”, “análisis de vectores con matriz de correlaciones”, etc., hasta llegar al final
que usualmente es un despliegue de datos (en forma de matriz, dataframes o vectores) y
gráficos.
• Corroborar todos los pasos intermedios y Nota 13
resultados finales, revisando no solo los Para suscribirse a la lista de R en español debe
datos y sus procesos, sino también las darse de alta en la dirección
funciones aplicadas. Muchas veces se https://stat.ethz.ch/mailman/listinfo/r-help-es
utilizan mal funciones que dan obviamente
Ejemplo de lista:
resultados erróneos o funciones no
adecuadas para el caso. Un defecto común Envíe los mensajes para la lista R-help-es a
r-help-es@r-project.org
es por ejemplo no normalizar valores Para subscribirse o anular su subscripción a través de la
cuando tenemos muchas variables disimiles, WEB
mezclar tipos de variables (continuas, https://stat.ethz.ch/mailman/listinfo/r-help-es
O por correo electrónico, enviando un mensaje con el
discretas, categóricas etc.) o usar un método texto "help" en el asunto (subject) o en el cuerpo a:
que quizás no sea el mas adecuado (por r-help-es-request@r-project.org
Puede contactar con el responsable de la lista
ejemplo en agrupamientos –clustering- se escribiendo a:
utilizan distancias. Hay seis o siete tipos de r-help-es-owner@r-project.org
distancias ¿Cuál es la adecuada para su caso
Si responde a algún contenido de este mensaje, por
específico?) favor, edite la linea del asunto (subject) para que el
texto sea mas especifico que:
Lo bueno del caso es que R posee una gran "Re: Contents of R-help-es digest...". Además, por favor,
comunidad científica y técnica que comparte incluya en la respuesta sólo aquellas partes del mensaje
a las que está respondiendo.
conocimientos en listas de correos, si posee dudas y Asuntos del día:
no tiene a quien recurrir, la suscripción (gratuita) a 1. Re: correr modelos no lineales (Roy Vera)
2. Re: correr modelos no lineales (Jorge I Velez)
estas listas será fuente de conocimiento. Plantear su
3. Re: Gráfico con varias variables (Carlos Ortega)
duda en ella es un procedimiento habitual, ya que la 4. Re: Gráfico con varias variables (M. Monsalvo)
lista de paquetes y funciones de R siguen creciendo ------------------------------------------------------------------
día a día y estar al tanto de todos los paquetes y
actualizaciones es un trabajo ingente y nadie puede abarcar todo el conocimiento por si mismo.

61 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Leer las ayudas de R es otra fuente de conocimientos que reditúa. No deje nunca de consultar y
aun de practicar los ejemplos propuestos, haciendo un “copy y paste” en la consola, ya que ver
como funcionan las cosas ayuda a su comprensión.

En las próximas páginas vamos a abordar un proyecto sencillo, con la idea que se familiarice con el
entorno y su manejo. No se preocupe si no comprende los comandos. Los conceptos son más
importantes.

a. Pasos del proyecto


El siguiente trabajo es un ejemplo de la metodología que aplicaremos, los resultados en este caso
son irrelevantes por cuanto es simplemente un ejercicio, una prueba de concepto.

Caso: tenemos una lista de los 100 apellidos mas usuales en Argentina, deseamos ver que
grado de cercanías hay entre ellos, y como agruparían en un clúster imprimiendo una
salida en un dendograma.

Materiales: apellidos.csv 34

Procedimientos: Preparación del espacio del proyecto, adjuntar archivos de datos al


espacio, instalar y carga de librerías si fueran necesarias, importación de datos del CSV,
transformación de los datos aplicando “distancias” y procesándola finalmente en
“clústeres”, impresión del dendograma resultante.

b. fuente de datos
El CSV es un archivo de texto plano en el que hay dos columnas por cien filas, con campos
separados por comas simples, aquí copiamos en una tabla que usted puede copiar y pegar en un
bloc de notas 35 en una sola columna doble de 100 filas:

Gonzalez, 568.240 Gimenez ,123.938 Vera ,79.882 Paez, 60.580


Rodriguez, 483.212 Molina ,119.674 Vazquez ,75.365 Blanco, 59.333
Gomez, 426.253 Silva ,118.825 Villalba, 74.107 Mendoza, 58.956
Fernandez, 411.462 Castro ,118.106 Cardozo, 73.932 Barrios, 58.811
Lopez, 393.704 Rojas ,116.775 Navarro, 73.907 Escobar, 58.604
Diaz, 346.271 Ortiz ,107.835 Ramos ,73.458 avila ,57.990
Martinez, 336.094 Nunez ,104.668 Arias ,71.587 Soria ,57.192
Perez, 294.527 Luna ,104.581 Coronel ,71.534 Leiva ,55.633
Garcia, 290.821 Juarez ,100.092 Cordoba, 70.713 Acuna, 55.515
Sanchez, 271.351 Cabrera, 99.884 Figueroa, 70.092 Martin ,55.310
Romero, 256.397 Rios ,98.761 Correa ,70.055 Maidana, 54.806
Sosa, 187.974 Ferreyra, 96.761 Caceres, 69.720 Moyano ,54.009
alvarez, 173.055 Godoy ,96.228 Vargas, 69.447 Campos, 52.282
Torres, 166.497 Morales ,95.628 Maldonado, 68.510 Olivera ,51.972
Ruiz, 160.483 Dominguez, 94.781 Mansilla, 66.763 Duarte, 51.493
Ramirez, 154.248 Moreno, 94.537 Farias, 66.535 Soto ,50.657
Flores, 140.829 Peralta, 92.707 Rivero, 66.461 Franco, 50.613
Acosta, 135.893 Vega ,92.127 Paz ,66.457 Bravo, 50.588
Benitez, 133.599 Carrizo ,91.365 Miranda ,66.138 Valdez, 49.717
Medina, 132.625 Quiroga, 89.583 Roldan, 65.375 Toledo, 49.645
Suarez, 130.607 Castillo ,88.398 Mendez ,63.575 Andrada-Andrade, 49.543
Herrera ,129.372 Ledesma, 88.394 Lucero ,63.367 Montenegro, 49.291

34
Extraído del INDEC
35
Recomendamos calurosamente el Notepad++ (va por la versión 6) el preferido por los programadores.

62 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Aguirre ,126.822 Munoz ,81.343 Cruz, 63.226 Leguizamon ,48.602
Pereyra ,125.009 Ojeda, 80.233 Hernandez, 63.157 Chavez ,48.355
Gutierrez, 124.550 Ponce, 80.050 Aguero ,62.727 Arce, 47.344

Es importante que no agregue ni quite nada, por eso se debe usar el bloc de notas y no otros
programas que agregan marcas ocultas de formato. Este archivo lo debe guardar como
“apellidos.csv”; la extensión CSV también es importante. También debe eliminar los caracteres
acentuados, ya que suelen presentar problemas cuando están presentes.

c. Iniciamos el proyecto

Al iniciar Rstudio “limpio” (sin variables ni historial cargado) vamos al ítem Proyecto en Menú y
seleccionamos la opción de nuevo proyecto, si ya tuviese uno activo puede abrirlo en “open
Project” o echar un vistazo en “Recent Projects” para ver el listado de proyectos anteriores.

Como estamos haciendo un proyecto de R desde cero


es de suponer que no tenemos aun nada en la lista de
recientes. Al pulsar "New Project” nos aparece la
ventana de selección de nuevo directorio, directorio
existente y control de versión de proyecto.

• Nuevo directorio permite crear el sitio


especifico para este proyecto
• Abrir uno existente es la segunda opción
• Control de versión es una herramienta para
chequear que los archivos que hemos creado colaborativamente (y almacenados en algún
lugar de la web) estén actualizados.

Seleccionamos la primera opción y completamos los datos requeridos. Esto creara una carpeta
“Apellidos” con un archivo “apellidos.r” que contendrá el workspace y otra información relevante

63 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


adjunta. Cada vez que salgamos se guardaran los datos en dicho lugar, además de poder llamar a
todos los elementos desde proyectos recientes.

Quizás parezca trivial, pero a la hora de revisar y cargar los scripts además de variables y espacio
de trabajo es realmente muy útil, especialmente si llevamos varios proyectos paralelamente.

Si tenemos el archivo de datos “apellidos.csv” lo guardamos en dicha carpeta, donde


inmediatamente aparecerá en el panel de “files” (archivos). Así estará disponible para cuando
configuremos el script y la ruta de aplicación para su lectura.

d. A escribir se ha dicho Nota 14


Es inevitable, esta es la hora de escribir código. Para
evitar que aumente significativamente la tasa de
suicidios, comentaremos el mismo en rojo, estas
¡Sea el alma de las fiestas!
explicaciones tienen por objeto familiarizarse con el
código y su escritura.
#==================================================
# Dendograma con apellidos, una prueba
#==================================================
# File-Name: apellidos.R
# Date: 04/10/2012
# Author: Edwin Aguiar -INTA TICs
Corrientes Desarrollo y Bases de Datos
# Email: eaguiar@correo.inta.gov.ar
# Data: datos de la web (INDEC)
#==================================================
-Yo uso R con Rstudio, y trabajo en el INTA-
# NO configuramos porque el proyecto ya lo hizo y -¡Cásate conmigo!-
# no permitirá la instrucción, dando error:
…..
setwd("apellidos")
En poco tiempo es posible hacer
# obtenemos la matriz 100*3 apellidos
trabajos interesantes y presumir ante
apellidos <- read.csv("apellidos.csv", header=F)
sus amistades enseñándoles estas
# si desea ver la tabla apellidos, descomente:
incomprensibles cosas; pero tenga en
#View(apellidos)
cuenta que para que todo funcione
# creamos el array de apellidos y de valores según sus expectativas dependerá de
nombres<-as.array(apellidos$V1)
cifras<-as.array(apellidos$V2) sus conocimientos de la materia
(estadística o minería de datos) y no de
#==================================================
# DISTANCIAS, CLUSTERING y PLOTEOS: HCLUST=COMPLETE la magia negra o el poder de las
#================================================== pirámides!

64 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


# Distancias y metodos: ver nota mas abajo
distancias1<-dist(apellidos,method="manhattan")

# agrupamiento: cluster, crea el mapa de las distancias


cluster<-hclust(distancias1)

#imprime el resultado en una grafica


plot(cluster,main="Metodo Manhatan",labels=nombres)
el grafico resultante:

Una depuración del código para graficar:

65 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Código agregado:
hc<-hclust(dist(apellidos,"manhattan"))
plot(hc, hang=-1) , labels=nombres)
plot(hc, hang=-2) , labels=nombres)
rect.hclust(hc,3, border="green")
rect.hclust(hc,5, border="red")
rect.hclust(hc,10, border="blue")

Como se advierte en la segunda parte del código (la modificación) la inclusión de unas líneas mas
crean cajas de colores para agrupamientos de 3,5 y 10 grupos. La aplicación de distancias y
clústeres se ha hecho en una sola línea, comprimiendo el código anterior. Esto demuestra la
potencia de R que permite concatenar funciones de manera muy eficiente y sencilla.

e. Distancias:
Es la cuantificación del grado de proximidad entre dos o más puntos en un espacio de dimensión
{d} que tradicionalmente en matemáticas se ha asociado al concepto de “métrica” o “distancias”.

Una métrica es una función que a cada par de puntos x,y ϵ Rd (x e y pertenecen al conjunto de
números reales) les asocia un valor positivo de modo que cuando mayor es, mas distantes son.

La función “δ” definida en el espacio producto Rd x Rd debe verificar algunos axiomas para decir
que es una métrica:

• No negativa d(x,y)≥0
• Un punto dista 0 de si mismo d(x,y)=0
• Simetría d(x,y) = d(y,x)
• Desigualdad triangular d(x,z) ≤ d(x,y) + d(y,z)

El agrupamiento es una cualificación de ese grado de proximidad, es juntar con un criterio


determinado (existen varios tipos de clústeres) que abarcan distintos tipos de conceptos (single,
completo, Ward etc)

f. Conclusiones del dendograma


Mas allá de la veracidad de las conclusiones (que los Gonzales y los Rodríguez forman un poderoso
agrupamiento de primer nivel con un peso preponderante; por lo que no aconsejamos disputar con
miembros de tales familias) podemos apreciar la simpleza de trabajo en R y como con unas pocas
funciones es posible realizar un trabajo mas complejo y serio; que posteriormente la investigación
comprobara hipótesis y establecerá como valedera.

g. Guardando gráficos
Ahora que hemos realizado el script, sin fallos, que la
salida grafica ha sido creada, debemos guardar el grafico.
En el panel de “Plots” (graficas) podemos seleccionar la
opción “export” y guardarla en una variedad de formatos

66 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


gráficos usuales. También en dicha ventana podemos seleccionar que dimensión tendrá (recordar
marcar que conserve la proporción la imagen) y elegir el directorio en el cual guardara la imagen.
Esta le servirá para incluir en sus trabajos de investigación, junto con las tablas que genere (que
deberá también guardar o copiar y pegar en un documento que este redactando).

En la próxima imagen podemos apreciar el proceso completo de guardar gráficos:

Los formatos: PNG, JPEG, TIFF, BMP, METAFILE, SVG y PS además de PDF son fácilmente
insertables en documentos de plataformas Linux, Windows y Apple.

h. Finalizando el proyecto
Cuando termine el proyecto en Rstudio no olvide guardar el script (icono de disquete en la parte
superior izquierda de la ventana de script) y salvar el workspace. De todas maneras al salir le
preguntara Rstudio si desea salvar el espacio de trabajo.

Una buena práctica es cada tanto, e independientemente del estado de su proyecto, guárdelo.

Otra buena práctica es disponer de un repositorio en la red en donde “colgar” sus


proyectos, o al menos sus scripts. Si posee cuenta en Gmail hay una aplicación
llamada “Drive” que permite crear carpetas y compartirlas en distinto grado (solo
lectura, edición) con otros, e incluso a usted mismo si no esta en su pc o no puede acceder al
Rstudio-Server por no estar públicamente disponible fuera de su red. Si su institución posee un
server de Sharepoint también podrá resolver el almacenamiento de sus scripts e imágenes para
tenerlas accesibles desde cualquier lado, y eventualmente dar permisos para acceso o edición a
terceros.

67 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Librerías en Rstudio
Cuando corrimos el ejemplo anterior habrá notado que se requiere la librería RODBC. En R y
Rstudio por defecto hay una serie de librería que ya vienen precargadas, pero no son la totalidad
de las mismas, pues cada tanto se actualiza las existentes y se agregan nuevas que extienden el
alcance de R en otras áreas.
En este breve aparte vamos a comentar
como seleccionar un repositorio y como
cargar las librerías que usted requiera
para su trabajo.

1. Las librerías precargadas

Estas librerías básicas que ya vienen


implícitas en la instalación de R mas la
del RStudio (recuerde que para correr
Rstudio debe primero instalar R en su
sistema) son las siguientes:

Base, Boot, Class, Cluster, Codetools,


Compiler,Datasets, Foreign, Graphics,
GrDevice, Grid, KernSmooth, Lattice,
Mass, Matrix, Methods, Mgcv, Nlme,
Nnet, Parallel, Rpart, Spatial, Splines,
Stats, Survival, Tcltk, Tools, Utils

Dichas librerías consisten en el Corazón


del sistema, herramientas estadísticas y
matemáticas, tratamiento de gráficos,
de matrices etc. Podrá ver la
descripción detallada de cada una en el
“help” de Rstudio o en la ventana de
“packages”; seleccione el link de una
librería de su interés y podrá leer la
documentación sobre la misma

Sin embargo cuando estamos


trabajando a menudo requerimos de
librerías que tenemos en el sistema
pero que no están cargadas en el script.
Para hacerlo solo basta con señalarlas en el casillero de la lista de packages. En la primera imagen
hemos marcado dos librerías para que se carguen en el script de nuestro trabajo:

68 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


• Datasets
• Graphics
Al marcarlas, se incorporan al script
copiándolas de la consola de comandos
(donde queda registrada la preferencia)
y pegándola en la línea 10, debajo del
encabezado del script, en la primera
línea activa. Quedaría así:

#====================================
# Dendograma con apellidos, una
# prueba de concepto
#====================================
# File-Name: apellidos.R
# Date: 04/10/2012
# Author: Edwin Aguiar -INTA
# TICs Corrientes Desarrollo y Bases
# de Datos
#====================================

library("datasets"); # lineas copiadas de la consola


library("graphics"); # y pegadas en el script

#configuramos donde
setwd("D:/mapas/apellidos/");
# obtenemos la matriz 100*3 apellidos
apellidos <- read.csv("D:/mapas/apellidos/apellidos.csv", header=F);
#View(apellidos)
# array de nombres de apellidos
nombres<-as.array(apellidos$V1);
cifras<-as.array(apellidos$V2);

Por supuesto puede (si ya maneja el código de R) escribirlo directamente en el script, e


incluso no hacerlo ya que al señalar la librería en “packages” quedara guardada la
preferencia en el “workspace” por defecto. Pero si usted envía el script a u tercero o lo
corre en otra maquina que no contenga su espacio de trabajo, saltara el error de faltante de la
librería en un mensaje en el que le avisa que no reconoce alguna función.

Si desea eliminar una librería que no necesite, solo desmárquela de “packages” (y escriba en el
script de R: detach("package:datasets") , por ejemplo)

2. Librería que no están cargadas ni instaladas


Es altamente probable que intente hacer algo que requiera librerias adicionales, por ejemplo leer
archivos de Excel 2007-2010; y nada en lo que tenga instalado puede hacerlo porque necesita una
librería faltante: “xlsx”. Por mas que mire y remire el panel de “packages” no hay nada
remotamente parecido a esto, no queda más salida que descargar e instalar el paquete desde un
repositorio 36

36
Un servidor de internet que posee estos paquetes para su descarga

69 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


• Hay dos formas de realizar esto: la usual es desde la consola y la segunda es mediante la
interfaz grafica (más sencilla).

El código y salida de consola para esta descarga e instalación:


> install.packages("xlsx") # orden para la descarga e instalacion
Installing package(s) into ‘D:/Usuario/Documents/R/win-library/2.14’
(as ‘lib’ is unspecified)
also installing the dependencies ‘xlsxjars’, ‘rJava’

probando la URL
'http://mirror.fcaglp.unlp.edu.ar/CRAN/bin/windows/contrib/2.14/xlsxjars_0.4.0.zip'
Content type 'application/zip' length 9041528 bytes (8.6 Mb)
URL abierta
downloaded 8.6 Mb

probando la URL 'http://mirror.fcaglp.unlp.edu.ar/CRAN/bin/windows/contrib/2.14/rJava_0.9-


3.zip'
Content type 'application/zip' length 745867 bytes (728 Kb)
URL abierta
downloaded 728 Kb

probando la URL
'http://mirror.fcaglp.unlp.edu.ar/CRAN/bin/windows/contrib/2.14/xlsx_0.5.0.zip'
Content type 'application/zip' length 381977 bytes (373 Kb)
URL abierta
downloaded 373 Kb

package ‘xlsxjars’ successfully unpacked and MD5 sums checked


package ‘rJava’ successfully unpacked and MD5 sums checked
package ‘xlsx’ successfully unpacked and MD5 sums checked

The downloaded packages are in


C:\Users\Usuario\AppData\Local\Temp\RtmpoP2Dhw\downloaded_packages

Lo que esta en azul es la salida del programa que ubica


el paquete xlsx, las dependencias (otras librerías que
se requieren para complementar el funcionamiento) y
las descarga desde un mirror (un servidor que replica
los paquetes desde el server principal de R). Una vez
que ha descargado las librerías requeridas, las
descomprime e instala.

La descarga e instalación mediante la interfaz grafica


es más simple aun. En el panel de “packages” solo hay
que seleccionar la pestana “install” elegir “repositorio”, comenzar a escribir el nombre (a medida
que lo haga irán apareciendo las sugerencias de librerías) y pulsa “install”. El resto es similar a la
instalación de consola, que enseñara como van sucediendo los pasos y el resultado final.

3. ¿Y si no tengo internet?
Busque en el repositorio de R en internet, allí seleccione la librería para descargar (en Windows o
en Linux) y posteriormente llévela a su Rstudio en su maquina fuera de red e instálelo desde la

70 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


primer opción de la ventana “Install packages” de la Nota 10
imagen superior, instalar desde archivos ZIP. Le
pedirá la ruta de acceso al archivo. Donde descargar librerías de R

Las posee a disposición en http://cran.r-


project.org/ en la pestaña “packages”,
4. Repositorios de R allí encontrara la lista ordenada por
Los repositorios son los servidores que replican los nombres
paquetes y programas de R en todo el mundo, para
seleccionar uno de su preferencia solo debe ir a http://cran.r-
project.org/web/packages/available_packag
“Tools” seleccionar “Options” y de la pestaña
es_by_name.html
principal hallara una caja de texto “CRAN mirror”
para seleccionar de la lista de servidores. o por fecha de actualización.

La lista completa al dia de la fecha de redacción de http://cran.r-


este manual es la siguiente: project.org/web/packages/available_packag
es_by_date.html

0-Cloud
http://cran.rstudio.com/ Rstudio, automatic redirection to servers worldwide
Argentina
http://mirror.fcaglp.unlp.edu.ar/CRAN/ Universidad Nacional de La Plata
http://r.mirror.mendoza-conicet.gob.ar/ CONICET Mendoza
Australia
http://cran.csiro.au/ CSIRO
http://cran.ms.unimelb.edu.au/ University of Melbourne
Austria
http://cran.at.r-project.org/ Wirtschaftsuniversitaet Wien
Belgium
http://www.freestatistics.org/cran/ K.U.Leuven Association
Brazil
http://cran-r.c3sl.ufpr.br/ Universidade Federal do Parana
http://cran.fiocruz.br/ Oswaldo Cruz Foundation, Rio de Janeiro
http://www.vps.fmvz.usp.br/CRAN/ University of Sao Paulo, Sao Paulo
http://brieger.esalq.usp.br/CRAN/ University of Sao Paulo, Piracicaba
Canada
http://cran.stat.sfu.ca/ Simon Fraser University, Burnaby
http://mirror.its.dal.ca/cran/ Dalhousie University, Halifax
http://probability.ca/cran/ University of Toronto
http://cran.skazkaforyou.com/ iWeb, Montreal
http://cran.parentingamerica.com/ iWeb, Montreal
Chile
http://dirichlet.mat.puc.cl/ Pontificia Universidad Catolica de Chile, Santiago
China
http://ftp.ctex.org/mirrors/CRAN/ CTEX.ORG
http://cran.csdb.cn/ Computer Network Information Center, CAS, Beijing
http://mirror.bjtu.edu.cn/cran Beijing Jiaotong University, Beijing
http://cran.dataguru.cn Dataguru (a, Guangzhou)
http://mirrors.ustc.edu.cn/CRAN/ University of Science and Technology of China
http://mirrors.xmu.edu.cn/CRAN/ Xiamen University
Colombia
http://www.laqee.unal.edu.co/CRAN/ National University of Colombia

71 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


http://www.icesi.edu.co/CRAN/ Icesi University
Denmark
http://mirrors.dotsrc.org/cran/ dotsrc.org, Aalborg
Ecuador
http://cran.espol.edu.ec/ Escuela Superior Politecnica del Litoral
France
http://cran.univ-lyon1.fr/ Dept. of Biometry & Evol. Biology, University of Lyon
http://mirror.ibcp.fr/pub/CRAN/ CNRS IBCP, Lyon
http://ftp.igh.cnrs.fr/pub/CRAN/ Institut de Genetique Humaine, Montpellier
Germany
http://mirrors.softliste.de/cran/ Softliste.de, Berlin
http://mirror.layerjet.com/cran layerjet.com
http://ftp5.gwdg.de/pub/misc/cran/ GWDG Goettingen
Greece
http://cran.cc.uoc.gr/ University of Crete
Hungary
http://cran.rapporter.net/ Rapporter.net, Budapest
India
http://ftp.iitm.ac.in/cran/ Indian Institute of Technology Madras
Indonesia
http://cran.repo.bppt.go.id/ Agency for The Application and Assessment of Technology
Iran
http://cran.um.ac.ir/ Ferdowsi University of Mashhad
Ireland
http://ftp.heanet.ie/mirrors/cran.r-project.org/ HEAnet, Dublin
Italy
http://cran.mirror.garr.it/mirrors/CRAN/ Garr Mirror, Milano
http://cran.stat.unipd.it/ University of Padua
http://dssm.unipa.it/CRAN/ Universita degli Studi di Palermo
Japan
http://essrc.hyogo-u.ac.jp/cran/ Hyogo University of Teacher Education
http://cran.md.tsukuba.ac.jp/ University of Tsukuba
http://cran.ism.ac.jp/ Institute of Statistical Mathematics, Tokyo
Korea
http://cran.nexr.com/ NexR Cortporation, Seoul
Latvia
http://mirrors.webhostinggeeks.com/cran/ Webhostinggeeks
Mexico
http://cran.itam.mx/ Instituto Tecnologico Autonomo de Mexico
http://www.est.colpos.mx/R-mirror/ Colegio de Postgraduados, Texcoco
Netherlands
http://cran.xl-mirror.nl/ XL-Data, Amsterdam
http://cran-mirror.cs.uu.nl/ Utrecht University
New Zealand
http://cran.stat.auckland.ac.nz/ University of Auckland
Norway
http://cran.uib.no/ University of Bergen
Philippines
http://cran.stat.upd.edu.ph/ University of the Philippines and PREGINET
Poland
http://r.meteo.uni.wroc.pl/ University of Wroclaw
Russia
http://cran.gis-lab.info/ GIS-Lab.info
Singapore
http://cran.stat.nus.edu.sg/ National University of Singapore
Slovakia
http://cran.fyxm.net/ FYXM.net, Bratislava

72 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


South Africa
http://cran.mirror.ac.za TENET, Johannesburg
Spain
http://cran.es.r-project.org/ Spanish National Research Network, Madrid
Sweden
http://ftp.sunet.se/pub/lang/CRAN/ Swedish University Computer Network, Uppsala
Switzerland
http://stat.ethz.ch/CRAN/ ETH Zuerich
Taiwan
http://cran.cs.pu.edu.tw/ Providence University, Taichung
http://cran.csie.ntu.edu.tw/ National Taiwan University, Taipei
Thailand
http://mirrors.psu.ac.th/pub/cran/ Prince of Songkla University, Hatyai
UK
http://www.stats.bris.ac.uk/R/ University of Bristol
http://cran.ma.imperial.ac.uk/ Imperial College London
http://star-www.st-andrews.ac.uk/cran/ St Andrews University
USA
http://cran.cnr.Berkeley.edu University of California, Berkeley, CA
http://cran.stat.ucla.edu/ University of California, Los Angeles, CA
http://streaming.stat.iastate.edu/CRAN/ Iowa State University, Ames, IA
http://ftp.ussg.iu.edu/CRAN/ Indiana University
http://rweb.quant.ku.edu/cran/ University of Kansas, Lawrence, KS
http://watson.nci.nih.gov/cran_mirror/ National Cancer Institute, Bethesda, MD
http://cran.mtu.edu/ Michigan Technological University, Houghton, MI
http://cran.wustl.edu/ Washington University, St. Louis, MO
http://cran.case.edu/ Case Western Reserve University, Cleveland, OH
http://ftp.osuosl.org/pub/cran/ Oregon State University
http://lib.stat.cmu.edu/R/CRAN/ Statlib, Carnegie Mellon University, Pittsburgh, PA
http://cran.mirrors.hoobly.com Hoobly Classifieds, Pittsburgh, PA
http://mirrors.nics.utk.edu/cran/ National Institute for Computational Sciences, Oak Ridge, TN
http://cran.revolutionanalytics.com Revolution Analytics, Dallas, TX
http://cran.fhcrc.org/ Fred Hutchinson Cancer Research Center, Seattle, WA
http://cran.cs.wwu.edu/ Western Washington University, Bellingham, WA
Venezuela
http://camoruco.ing.uc.edu.ve/cran/ Universidad de Carabobo Venezuela
Vietnam
http://cran.vinastat.com/ VinaStat.com

Graficas con R y Rstudio


Las funciones graficas en R existen a varios niveles, de los mas simples a los mas complejos. La
variedad –nacida de la necesidad de presentar los datos- hacen que existan varios tipos de
graficación adecuados para cada caso. La importancia de la presentación visual de los datos
mediante una representación visual es definida como:

“En comparación con otras formas de presentación de los datos, los gráficos nos permiten,
de una mirada, comprender el comportamiento de los datos, aun de datos muy complejos,
por lo tanto ahorran tiempo al analista de información. Los gráficos estadísticos nos
permiten usar nuestra habilidad para visualmente procesar información de un grafico. Esto

73 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


nos permite hacer juicios respecto a la variabilidad, escala, patrones y tendencias de los
datos.” 37

Los gráficos que podemos trazar se pueden dividir a priori en la representación de la cantidad de
dimensiones que representan. Suponiendo hasta tres, tendríamos una lista que abarcan las
distintas funciones, a su vez divididas en funciones de graficación de bajo nivel y de alto nivel; esto
son las graficaciones sobre una nueva imagen o sobre una existente. No es un calificador de
calidades como podría suponerse ligeramente.

La forma de trabajo de las funciones graficas es sustancialmente diferente al de las funciones, que
trabajan en base a lo que se llaman objetos (tablas, matrices, vectores, dataframes etc).El
resultado de una función grafica no puede ser asignado a un objeto sino que es enviado a un
dispositivo grafico. Un dispositivo grafico es una ventana grafica o un archivo, y de allí la salida
visual que obtenemos.

a. Índice de algunas funciones graficadoras


Listado de algunas funciones graficadoras y parámetros usuales de configuracion
Gráficos Unidimensionales
• barplot(Estaturas)
• barplot(Estaturas, amplitud, nombres, space=.2, inside=TRUE, beside= FALSE, horiz=FALSE,
legend, angle, density, col, blocks=TRUE)
• boxplot(..., rango, amplitud, varwidth=FALSE, notch=FALSE, names, plot=TRUE)
• hist(x, nclass, breaks, plot=TRUE, angle, density, col, inside)
Gráficos Bidimensionales
• lines(x, y, type=”l”)
• pie (antes piechart)
• points(x, y, type=”p”))
• plot(x, y, type=”p”, lty=1:5, pch=, col=1:4)
• points(x, y, type=”p”, lty=1:5, pch=, col=1:4)
• lines(x, y, type=”l”, lty=1:5, pch=, col=1:4)
• plot(x, y, type=”p”, log=)
• abline(coef)
• abline(a, b)
• abline(reg)
• abline(h=)
• abline(v=)
• qqplot(x, y, plot=TRUE)
• qqnorm(x, datax=FALSE, plot=TRUE)

37
“Gráficos estadísticos con R” Juan Carlos Correa y Nelfi González, Posgrado en Estadística Universidad Nacional-Sede Medellín
(jccorrea@perseus.unalmed.edu.co), 2002

74 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Gráficos Tridimensionales
• contour(x, y, z, v, nint=5, add=FALSE, labels)
• interp(x, y, z, xo, yo, ncp=0, extrap=FALSE)
• persp(z, eye=c(-6,-8,5), ar=1)

Realicemos algún ejemplo para probar los conceptos.


Barplot es un grafico de barras

> datos<-c(rnorm(10,30,10)) # generamos números aleatorios


> datos # examinamos los números
# creados
[1] 48.78488 25.55557 39.02275 26.56289 45.80036
27.04644 35.77342 24.97891 11.06760 24.73588
> barplot(datos) # imprimimos las barras

Otro barplot
> amplitud<-c(1,1,1,1,1,1,1,1,1,1,1)
> nombres<-c("uno","dos","tres","cuatro","cinco","seis",
"siete","ocho","nueve","diez","once")
> estaturas<-c(round(rnorm(10,1,2)),digits=2)
> barplot(estaturas, amplitud, nombres, space=.2)

Estas funciones suelen tener muchos parámetros interesantes, es adecuado leer cuidadosamente
las ayudas del Rstudio, por ejemplo agregando el parámetro de color en forma de un vector:
col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk"),

Pie: gráficos de torta.


> pie(datos)
> pie(datos, labels= round(datos,2),main="Datos sobre Patos")

75 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Un ultimo ejemplo de barplot:
barplot(height = cbind(x = c(465, 91) / 465 * 100,
y = c(840, 200) / 840 * 100,
z = c(37, 17) / 37 * 100),
beside = FALSE,
width = c(465, 840, 37),
col = c(1, 2),
legend.text = c("A", "B"),
args.legend = list(x = "topleft"))

Boxplot: dos ejemplos


> estaturas
digits
-2 0 5 -1 -2
-2 2 -3 4 2 2
> otracosa<-1/estaturas+3
> otracosa

digits
2.50 -Inf 3.20 2.00 2.50 2.50
3.50 2.66 3.25 3.50 3.50
> boxplot(estaturas,3,otracosa)

boxplot(len ~ dose, data = ToothGrowth,


boxwex = 0.25, at = 1:3 - 0.2,
subset = supp == "VC", col =
"yellow",
main = "Guinea Pigs' Tooth
Growth",
xlab = "Vitamin C dose mg",
ylab = "tooth length",
xlim = c(0.5, 3.5), ylim = c(0,
35), yaxs = "i")

Histogramas, dos ejemplos:


> estaturas
digits
-2 0 5 -1 -2
-2 2 -3 4 2 2
> hist(estaturas, col = c("lightblue",
"mistyrose", "lightcyan", "lavender",
"cornsilk"))

hist(estaturas, freq = FALSE, ylim = c(0,


0.2),col = c("lightblue", "mistyrose",
"lightcyan", "lavender", "cornsilk"))
> curve(dchisq(x, df = 4), col = 2, lty = 2,
lwd = 2, add = TRUE)

76 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Lines: utilizando líneas en conjunto con plots

“lines” dibuja líneas sobre una serie de puntos graficados (“plot”), el ejemplo del uso es el
siguiente:
> indice<-c(1:11) # crea el vector x de 1 a 11
> plot(estaturas, main="Estaturas") # situa los puntos “plot” en la grafica
> lines(indice, estaturas) # traza la línea que une a los puntos

plot(estaturas, main="Estaturas", type="o", col=2, pch=16)

En la línea superior le damos al tipo de línea el parámetro “o” (overploted), color rojo y puntos
“peach” el valor 16. El resultado es el de abajo, sin usar la segunda instrucción de “lines”

códigos numéricos de “pch”

77 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Points (puntos) trabaja sobre el eje de coordenadas que provee plot:
> plot(-4:4, -4:4, type = "n") # crea eje de coordenadas -4 a +4
> points(rnorm(200), rnorm(200), col = "red", pch=19) # puntos rojos redondos
> points(rnorm(100)/2, rnorm(100)/2, col = "blue", cex = 1.5, pch=3) # puntos azules cruces

El tipo “n” en plot significa que no escribirá ningún grafico, solo crea el eje de coordenadas. La
función rnorm crea una secuencia aleatoria de una distribución normal, para generar los puntos y
sus dos coordenadas (x,y)

Ablines: agregando líneas a los gráficos


> sale5 <- c(6, 4, 9, 7, 6, 12, 8, 10, 9, 13)
> plot(sale5, pch="x")
> abline(lsfit(1:10,sale5))
> abline(lsfit(1:10,sale5, intercept = FALSE), col= 4)
En la imagen del grafico tenemos
una primera instancia que es la
creación de los puntos (plot) y
una segunda en la que se crean
dos rectas que trazan otras
funciones.

Lsfit() es la estimación de
mínimos cuadrados 38 de los
datos del vector sales5 En la
segunda lsfit() se ha configurado
un termino de intercepción como FALSO, mientras que en la primera es VERDADERA por defecto.
Los datos y el código son el ejemplo de la ayuda de R.

38
Mínimos cuadrados es una técnica de análisis numérico encuadrada dentro de la optimización matemática, en la que, dados un
conjunto de pares ordenados: (variable independiente, variable dependiente) y una familia de funciones, se intenta encontrar la
función, dentro de dicha familia, que mejor se aproxime a los datos (un "mejor ajuste"), de acuerdo con el criterio de mínimo error
cuadrático.

78 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


qqplot y qnorm son dos funciones que plotean la primera los cuartiles de una distribución T de
Studen y la segunda los cuartiles de una distribución normal.

b. Las distribuciones en 3D
Dada la complejidad de la materia, a la que apenas hemos arañado en la superficie aun en los
ejemplos mas sencillos, se puede profundizar en “R graphics" de Paul Murrell , que se encuentra
en http://www.stat.auckland.ac.nz/~paul/RGraphics/rgraphics.html para su descarga gratuita y
que hemos utilizado en parte aquí para demostraciones conceptuales.

c. aspectos generales sobre gráficos


La mayoría de las funciones de graficación poseen en común estos parámetros, que se pueden
probar con plot, pie, barplot etc.

log=’<xjyjxy>’ Ejes Logarítmicos


main=’título’ titulo del grafico
new=<logical> Adiciona sobre el grafico actual
sub=’título de abajo’ titulo inferior
type=’<ljpjbjn>’ Línea, puntos, ambos, ninguno
lty=n Tipo de Línea
pch=’.’ Carácter de dibujo
xlab=’Nombre del eje x’ etiqueta del eje X
ylab=’Nombre del eje y’ etiqueta del eje Y
xlim=c(xminimo; xmaximo) valores de escala x
ylim=c(yminimo; ymaximo) valores de escala y
col=n color, en escala de números o en ingles
lwd=n ancho de línea de trazo en números

d. Ejemplo de uso con plot()

plot(variable, type="b",
ylim=c(13,29),xlab="casos",
ylab="ocurrencias", main="Casos
vs Ocurrencias", col="blue",
lty=2, lwd=1)

79 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


e. Uso de barplot()

barplot(variable,
ylim=c(10,29),xlab="casos",
ylab="ocurrencias", main="Casos
vs Ocurrencias", border=2,
col="gray", density=8)

f. Realizar varias graficas en una sola Mat4<-matrix(1:4,2,2);


Es posible crear varias graficas en una sola dividiendo en una matriz, que en Mat4;
[,1] [,2]
ejemplo hemos llamado mat4, en donde los parámetros son los siguientes: [1,] 1 3
[2,] 2 4
• Numero de pantallas layout(mat4);
layout.show(4);
• Cargamos dichas pantallas al dispositivo de salida (la salida grafica
del pc) con layout()
• Exhibimos con la función layout.show()

Si deseáramos crear una matriz de tres o cinco paneles en la


pantalla podríamos hacer:
Mat3<-matrix(c(1:3,3),2,2)
layout(mat3)
layout.show(3)
mat5<-matrix(c(1:5,5),3,2)
layout(mat5)
layout.show(5

Dependiendo de sus necesidades para exponer los datos


visualmente. El número adicional a la secuencia de la matriz es
el elemento extra (impar) y los dos parámetros siguientes son
columna y fila respectivamente. También es posible que pueda modificar el ancho y largo de las
columnas o filas utilizando widths y heigths como parámetros de layout(), lo cual aconsejamos lea
en la ayuda de R.

80 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


g. Parámetros adicionales a los gráficos
Ademas de lo que hemos visto es posible agregar mas parámetros adicionales a los graficos, como
por ejemplo darle color de fondo (background= bg):

par(bg="yellow")
plot(mat5)

La lista de varios de esos parámetros adicionales es la


siguiente 39:

h. Ejemplo de graficación bidimensional 40


En este ejemplo utilizaremos los datos que contiene una librería de R, “datasets” de uso muy
extendido a la hora de hacer pruebas o de ejemplificar. No solo existe iris, hay una larga lista de
datos disponibles sobre varias disciplinas, escribiendo data() en la consola tendrá la lista completa:
Data sets in package ‘datasets’:

AirPassengers Monthly Airline Passenger Numbers 1949-1960


BJsales Sales Data with Leading Indicator
BJsales.lead (BJsales) Sales Data with Leading Indicator
BOD Biochemical Oxygen Demand

39
“R para principiantes”pag. 36 E. Paradis, traducción de J.A.Ahumeda, op. Cit.
40
Ejercicio adaptado de “Practicas de estadística en R” Manuel Febrero Bande, Pedro Galeano San Miguel, Julio González Díaz y
Beatriz Pateiro López. Universidad de Santiago de Compostela, 2008. Pag. 69 y sgtes

81 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


CO2 Carbon Dioxide Uptake in Grass Plants
ChickWeight Weight versus age of chicks on different diets
DNase Elisa assay of DNase
EuStockMarkets Daily Closing Prices of Major European Stock Indices,
1991-1998
Formaldehyde Determination of Formaldehyde
HairEyeColor Hair and Eye Color of Statistics Students
Harman23.cor Harman Example 2.3
Harman74.cor Harman Example 7.4
Indometh Pharmacokinetics of Indomethacin
InsectSprays Effectiveness of Insect Sprays
JohnsonJohnson Quarterly Earnings per Johnson & Johnson Share
LakeHuron Level of Lake Huron 1875-1972
LifeCycleSavings Intercountry Life-Cycle Savings Data
Loblolly Growth of Loblolly pine trees
Nile Flow of the River Nile
Orange Growth of Orange Trees
OrchardSprays Potency of Orchard Sprays
PlantGrowth Results from an Experiment on Plant Growth
Puromycin Reaction Velocity of an Enzymatic Reaction
Seatbelts Road Casualties in Great Britain 1969-84
Theoph Pharmacokinetics of Theophylline
Titanic Survival of passengers on the Titanic
ToothGrowth The Effect of Vitamin C on Tooth Growth in Guinea Pigs
UCBAdmissions Student Admissions at UC Berkeley
UKDriverDeaths Road Casualties in Great Britain 1969-84
UKgas UK Quarterly Gas Consumption
USAccDeaths Accidental Deaths in the US 1973-1978
USArrests Violent Crime Rates by US State
USJudgeRatings Lawyers' Ratings of State Judges in the US Superior Court
USPersonalExpenditure Personal Expenditure Data
VADeaths Death Rates in Virginia (1940)
WWWusage Internet Usage per Minute
WorldPhones The World's Telephones
ability.cov Ability and Intelligence Tests
airmiles Passenger Miles on Commercial US Airlines, 1937-1960
airquality New York Air Quality Measurements
anscombe Anscombe's Quartet of 'Identical' Simple Linear
Regressions
attenu The Joyner-Boore Attenuation Data
attitude The Chatterjee-Price Attitude Data
austres Quarterly Time Series of the Number of Australian
Residents
beaver1 (beavers) Body Temperature Series of Two Beavers
beaver2 (beavers) Body Temperature Series of Two Beavers
cars Speed and Stopping Distances of Cars
chickwts Chicken Weights by Feed Type
co2 Mauna Loa Atmospheric CO2 Concentration
crimtab Student's 3000 Criminals Data
discoveries Yearly Numbers of Important Discoveries
esoph Smoking, Alcohol and (O)esophageal Cancer
euro Conversion Rates of Euro Currencies
euro.cross (euro) Conversion Rates of Euro Currencies
eurodist Distances Between European Cities
faithful Old Faithful Geyser Data
fdeaths (UKLungDeaths) Monthly Deaths from Lung Diseases in the UK
freeny Freeny's Revenue Data
freeny.x (freeny) Freeny's Revenue Data
freeny.y (freeny) Freeny's Revenue Data
infert Infertility after Spontaneous and Induced Abortion
iris Edgar Anderson's Iris Data
iris3 Edgar Anderson's Iris Data
islands Areas of the World's Major Landmasses
ldeaths (UKLungDeaths) Monthly Deaths from Lung Diseases in the UK
lh Luteinizing Hormone in Blood Samples
longley Longley's Economic Regression Data
lynx Annual Canadian Lynx trappings 1821-1934
mdeaths (UKLungDeaths) Monthly Deaths from Lung Diseases in the UK
morley Michelson Speed of Light Data
mtcars Motor Trend Car Road Tests
nhtemp Average Yearly Temperatures in New Haven

82 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


nottem Average Monthly Temperatures at Nottingham, 1920-1939
occupationalStatus Occupational Status of Fathers and their Sons
precip Annual Precipitation in US Cities
presidents Quarterly Approval Ratings of US Presidents
pressure Vapor Pressure of Mercury as a Function of Temperature
quakes Locations of Earthquakes off Fiji
randu Random Numbers from Congruential Generator RANDU
rivers Lengths of Major North American Rivers
rock Measurements on Petroleum Rock Samples
sleep Student's Sleep Data
stack.loss (stackloss) Brownlee's Stack Loss Plant Data
stack.x (stackloss) Brownlee's Stack Loss Plant Data
stackloss Brownlee's Stack Loss Plant Data
state.abb (state) US State Facts and Figures
state.area (state) US State Facts and Figures
state.center (state) US State Facts and Figures
state.division (state) US State Facts and Figures
state.name (state) US State Facts and Figures
state.region (state) US State Facts and Figures
state.x77 (state) US State Facts and Figures
sunspot.month Monthly Sunspot Data, 1749-1997
sunspot.year Yearly Sunspot Data, 1700-1988
sunspots Monthly Sunspot Numbers, 1749-1983
swiss Swiss Fertility and Socioeconomic Indicators (1888) Data
treering Yearly Treering Data, -6000-1979
trees Girth, Height and Volume for Black Cherry Trees
uspop Populations Recorded by the US Census
volcano Topographic Information on Auckland's Maunga Whau Volcano
warpbreaks The Number of Breaks in Yarn during Weaving
women Average Heights and Weights for American Women

LLamamos al paquete Iris:


> data(iris);
> iris # listamos IRIS
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
…………………………………………………………………………………………………………..

Iris esta compuesto por 150 registros de 5 campos cada uno, referidos a especies vegetales, en
pantalla una muestra de los primeros 9. Con estos datos deseamos realizar un grafico que nos
muestre la relación de longitud y anchura de pétalo (“Petal length”, “Petal Width”). Si contamos
los elementos del vector
tenemos que “FC” 41 es la
manera de indexar los datos;
longitud de pétalos es iris[ ,3]
e iris[ ,4] el ancho de los
mismos. Esto desplegara los

41
FC: fila y columna ¿Ya lo ha olvidado?

83 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


datos de dichos indicadores por columna, es decir 150 datos por cada uno. En la imagen se ven
listados los dos vectores que reflejan los valores de dichas columnas. Ahora vamos a crear un
grafico en el cual los datos correspondan a los dos ejes: ancho de pétalos al eje Y, longitud del
pétalo a X. Sin embargo antes de graficar seria bueno ver que escala de valores tenemos. Con las
funciones min() y max() aplicadas a cada vector de la serie de datos, podemos hacernos una idea:
> min(iris[,3]);
[1] 1
> max(iris[,3]);
[1] 6.9
> min(iris[,4]);
[1] 0.1
> max(iris[,4]);
[1] 2.5

La escala de X estará dentro de 1 a 7 y la de Y entre 0.1 y 2.5; la función plot() se encargara de


graficarlo dentro de estos parámetros, aunque se pueden modificar a gusto si Ud. lo desea. La
función plot() la escribimos así:
> plot(iris[,3],iris[,4], main="Longitud y anchura de Petalos de Iris", xlab="Longitud del
petalo", ylab="Anchura del petalo");

Observe que longitud del pétalo (iris[,3]),


es el eje X; primer argumento de plot. La
anchura, el eje Y, es iris[,4]; el segundo
argumento de la función. Main, xlab e
ylab son las etiquetas del grafico. Como se
advierte, hay algunos valores que están
destacados en la parte inferior. Una forma
de identificarlos es mediante la función
identify(), que funciona pasando los
parámetros X,Y y devuelve los números ID
de los datos marcados.
> identify(iris[,3],iris[,4])
[1] 24 44 45 99
> identify(iris[,3],iris[,4])
[1] 68
La primera línea llama a identify() y activa en el
grafico el “locator active” seleccionando un
punto con el puntero (una cruz), o varios
consecutivam,ente; al salir con “escape” da la
salida de ID del punto. El ID es el numero de
registro. En el caso de algunos de esos valores:
> iris[24,5]
[1] setosa
Levels: setosa versicolor virginica
> iris[45,5]
[1] setosa

84 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Levels: setosa versicolor virginica

Dados los números de componentes (el ID y el campo 5to: especie) los resultados son los que
salen por pantalla. Una rápida visión nos permite definir que el agrupamiento inferior consisten en
“setosa” y el punto 68 (el ultimo, que esta sobre la cuz) cuyo id es 68 es una “versicolor”.

i. Ejemplo de graficación multidimensional


Una manera de transformar el grafico bidimensional en multidimensional es identificando en el
mismo grafico las diferentes especies; por ejemplo adicionándole color distintivo a cada una:
> iris.color<-c("red","green","blue")[iris$Species]
> plot(iris[,3],iris[,4],col=iris.color,main="Longitud y anchura de petalo segun especies de
Iris",xlab="Longitud de petalo", ylab="Anchura de petalo")
> legend(5,1.0,c("Setosa","Versicolor","Virginica"),pch=1,col=c("red","green","blue"))

El resultado:

La primera línea crea un vector de


tres colores que es asociado a la
columna de especies, en el orden
que van surgiendo. La segunda
línea plotea acorde a lo ya visto.

La tercera agrega el cuadro de


leyenda y la explicación del código
de colores, las coordenadas 5, 1.0
son el punto de arranque del
cuadro (esquina superior
izquierda) y las dos cadenas concatenadas (especies y colores) las referencias ordenadas.

Otra manera es además de dar color, es asignarle un símbolo propio. En el siguiente desarrollo
utilizamos las funciones matplot() y matpoints() de manera similar a cuando utilizamos plot y
points en la primera parte de graficación.
> iS <- iris$Species == "setosa"
> iV <- iris$Species == "versicolor"
> iVi<- iris$Species == "virginica"
> matplot(c(1,8),c(0,4.5),type= "n",xlab="Longitud",ylab ="Anchura", main = "Petalos y
Sepalos de Iris")
> matpoints(iris[iS,c(1,3)],iris[iS,c(2,4)],pch =1, col=c(2,4))
> matpoints(iris[iV,c(1,3)],iris[iV,c(2,4)],pch =4, col=c(2,4))
> matpoints(iris[iVi,c(1,3)],iris[iVi,c(2,4)],pch=20, col=c(2,4))
> legend(1,5,c("Sepalos Setosa","Petalos Setosa","Sepalos Versicolor", "Petalos
Versicolor","Sepalos Virginica","Petalos Virginica"), pch =c(1,1,4,4,20,20),col=rep(c(2,4),
2))

En las primeras líneas asignamos (==) a iS, iV, iVi valores lógicos según la pertenencia a la especie
en cuestión, los tres vectores de datos son:

85 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[19] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[37] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
[55] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[91] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[127] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[145] FALSE FALSE FALSE FALSE FALSE FALSE
> iV
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
[55] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[73] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[127] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[145] FALSE FALSE FALSE FALSE FALSE FALSE
> iVi
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[55] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[91] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[109] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[127] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[145] TRUE TRUE TRUE TRUE TRUE TRUE

A riesgo de ser penosamente detallistas es importante constatar como funciona esto. En el vector
iS el primer valor es TRUE, FALSE en los demás, en iV el valor 55 es TRUE, no en los demás
vectores, en iVi el valor 150 es TRUE y FALSE en los demas… Estas tres pequeñas líneas y la
utilización de una condición lógica establecen un poderoso filtro de datos. Cada dato, al ser
ploteado por la función matpoints() imprime o no según la condición, la separación de Sépalos y
Pétalos esta determinada por las variables que concatenan el punto

matpoints(iris[iS,c(1,3)],iris[iS,c(2,4)],pch =1, col=c(2,4))

La primera expresión por sépalos y la segunda por pétalos, si son TRUE, sino no imprimen. El
resultado:
Al asignar un símbolo y un
color característico por
cada clasificación y por la
condición T/F van
imprimiendo los puntos.
No se preocupe si aun no
lo comprende, es cosa de
practica.
Copie el código y
pruébelo, es la mejor
manera de entender su
funcionamiento.

86 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


Finalmente la función pairs() crea un despliegue multidimensional

j. Concluyendo
Existen numerosas y muy
sofisticadas funciones
graficadoras, aquí solo
hemos expuesto algunas de
las más sencillas. Los
paquetes grid y lattice, por
ejemplo, poseen graficas
muy superiores y más
elaboradas. Para explorarlas
en la consola use demo() y
en el cuadro de demos que
aparezca, vea las funciones
graficas (varias) existentes.
Aqui algunas imágenes de
muestra:

87 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


88 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)
Bibliografia
La bibliografía sobre R y sus librerías y funciones es amplia, variada y libre. Es muy común
encontrar documentación academica universitaria en casi todas las disciplinas, por lo que no seria
extraño que en lo que Ud haga, ya estén escritos algunos ensayos, guias o manuales. De todos hay
algo para aprender y tomar.

Nosotros somos deudores de muchos otros que han dejado sus experiencias en la web y nuestra
aspiración es que este pequeño trabajo sea de utilidad para que ud se inicie en este mundo que
posee las características de ser libre, gratuito, abierto y colaborativo además de profundamente
creativo.

A continuación algunos textos de interés (que hemos citado o utilizado) de los muchos que
encontrara en la web:

1. “Analisis de series temporales” Juan Antonio Breña Moral, s/d, 88 paginas


2. “Curso basico de R” Francesc Carmona (fcarmona@ub.edu), 2007, 98 pags.
3. “Preprocesamiento de Datos” Dr. Edgar Acuna, Departmento de Matematicas Universidad de Puerto Rico-
Mayaguez website: academic.uprm.edu/eacuna, 50 pags.
4. “Introduccion a R, Ejercicios y ejemplos” Alex Sanchez y Francesc Carmona, Departament d’Estadıstica. U.B.
2008, 4 pags.
5. “Funciones estadísticas en R y S-plus” Estadística Aplicada con S-PLUS, M. Dolores Ugarte y Ana F. Militino
Universidad Pública de Navarra, 4 pags.
6. “Graficos Estadısticos con R” Juan Carlos Correa y Nelfi Gonzalez, Posgrado en Estadıstica, Universidad
Nacional-Sede Medellın (jccorrea@perseus.unalmed.edu.co), 2002, 299 pags.
7. “Notas sobre R” (graficos en R) Francesc Carmona, Jordi Ocaña i Alex Sanchez, Department d'Estadistica,
Universitat de Barcelona, 2008, 35 pags.
8. “Curso introducción a R”, (5 cursos), David V. Conesa Guillén, Grup d'Estadística Espacial i Temporal en
Epidemiologia i Medi Ambient, Dept. d'Estadística i Investigació Operativa, Universitat de València. 42 pags.
9. “Introducción al Entorno r” Paula Elosua, 2011, 102 pags.
10. “Lectura, manipulacion y analisis de datos en R” F. Tusell, http://www.et.bs.ehu.es/~etptupaf, 2005, 23pags.
11. “Como mantener tus datos de investigación ordenadas”, Duncan Golicher, 2008, 16 pags.
12. “Estadıstica Basica con R y R–Commander” (Version Febrero 2008), A. J. Arriaza Gomez, F. Fernandez Palacın,
M. A. Lopez Sanchez, M. Muñoz Marquez, S. Perez Plaza, A. Sanchez Navas; U. de Cadiz,2008, 20 pags
13. “Introducción a Series de Tiempo” John Villavicencio, 33 pags.
14. “Métodos Estadísticos con R y R Commander” Prof. Dr. Antonio José Sáez Castillo, Departamento de
Estadística e Investigación Operativa, Universidad de Jaén, 2010, 157 pags.
15. “NOTAS DE CLASE Series de Tiempo con R” Norman Giraldo Gomez, Profesor Asociado, Escuela de Estadıstica,
Universidad Nacional de Colombia, Medellın, 2006, 176 pags.
16. “Practicas de Estadıstica en R Ingenierıa Tecnica en Informatica de Sistemas” Manuel Febrero Bande, Pedro
Galeano San Miguel, Julio Gonzalez Dıaz, Beatriz Pateiro Lopez; 2008, U. Santiago de Compostela, 114 pags.
17. “R Data Import/Export” R Development Core Team, 2010, 34 pags.
18. “R para Principiantes” Emmanuel Paradis, Institut des Sciences de l’Evolution Universit Montpellier II
(paradis@isem.univ-montp2.fr) traducido por Jorge A. Ahumada, RCUH/ University of Hawaii & USGS/
National Wildlife Health Center (jahumada@usgs.gov), 2003, 61 pags.
19. “Introduccion a R Notas sobre R: Un entorno de programacion para Analisis de Datos y Graficos” Version 1.0.1
(2000), R Development Core Team, 106 pags.
20. “Cartas sobre Estadística de la Revista Argentina de Bioingeniería” Dr. Ing. Marcelo R. Risk, Facultad Regional
Buenos Aires, Universidad Tecnológica Nacional, Argentina, 2003, 57 pags.

89 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)


21. “Introducción a R -Sesión 3- Estructuras de Datos y Gráficos” Joaquín Ortega Sánchez, Centro de Investigación
en Matemáticas, CIMAT, Guanajuato, Gto., Mexico, (jortega@cimat.mx) , http://www.cimat.mx, 2009, 111
pags.
22. “Tutorial de R” Javier Ramírez Pérez de Inestrosa, Departamento de Teoría de la Señal, Telemática y
Comunicaciones, Universidad de Granada, 2009, 33 pags.

90 Introducción a R utilizando Rstudio server Edwin Aguiar (aguiar.edwin@inta.gob.ar)

También podría gustarte