TUTORIAL EXPLICATIVO PARA EL INICIO EN R

SDRB, Fri Mar 4 08:15:49 2016

Accceso al R

Existen diversas combinaciones entre Interfaces a R, IDEs (Interactive Development Environment) y Sistema Operativo, incluso también existe la posibilidad de usar una IDE que está sirviéndose en una máquina distinta a la que se está utilizando (RStudio brinda esa posibilidad).
Cuanquiera sea el caso siempre tendremos acceso a una consola de R, y dentro de ella no importa qué combinación estemos utilizando (aunque existen pequeñas consideraciones respecto al sistema de codificación de caracteres, y caracteres que indican jerarquía de directorios), los comandos son los mismos.

En ambientes Windows

  1. Si después de instalar R, aún no tienes un acceso directo en el escritorio, créalo apuntando a donde tenga el ejecutable 'RGui.exe'. Recordemos que 'RGui' es una IDE -aunque rudimentaria-, por lo que tiene un aspecto distinto al que veremos al iniciar R desde una terminal, donde sólo veremos la consola.
  2. Modifica la propiedad del acceso directo de modo tal que el directorio de trabajo por defecto sea el que prefieras. Opcionalmente, este paso puedes obviarlo y configurar el directorio de trabajo después.
  3. Inicia el 'RGui.exe'

    En MacOS

    Entiendo que también tiene como IDE por defecto al RGui, por lo que es similar a Windows.

    En Linux

    Existe una diversidad de interfaces e IDEs pero ninguna viene por defecto. Rcmdr, vendría a ser el RGui del Windows y RKWard es notablemente más avanzada y versátil, etc

  4. abre un terminal e ingresa:

    usuario_X$R  
    

    El RStudio

    Es un IDE multiplataforma muy versátil que tiene herramientas para la generación de reportes automáticos (Sweave y knitr) como interactivos (Shiny) muy bien integrados, también tiene una integración muy buena con sistemas de control de versiones como GitHub y svn. Después de practicar algunos comandos fundamentales en la consola, veremos las utilidades que nos brinda esta IDE.

La consola o panel interactivo

Es la pantalla (o ventana) que responde interactivamente el ingreso de comandos y se identifica fácilmente porque al ingreso presenta el siguiente mensaje:

R version 3.0.2 (2013-09-25) -- "Frisbee Sailing"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (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.
Escriba 'q()' para salir de R.

[Previously saved workspace restored]

> 

Note que:

  1. el símbolo > al final del mensaje de bienvenida, tiene la función de lo que se conoce como prompt, que es la señal de que el sistema está listo para recibir comandos, y no se debe confundir con -> ó <- que tienen otro rol.
  2. Si anteponemos # a cualquier comando, este se desactiva sin generar errores, ése carácter se llama comment character. Su utilización es muy frecuente en los scripts, no sólo para desactivar líneas temporariamente sin tener que borrarlas y volver a escribirlas, sino que -más recomendable aún- es para comentar lo que se va programando línea a línea.

Cierre de R

En consola:

 q()

Cada IDE tiene opciones de menús para hacerlo.

El ambiente de trabajo

Controlar el directorio de trabajo es importante porque facilita la gestión de archivos que se necesiten importar y/o exportar en los diversos modos de ejecución de R.

# El comando getwd() devuelve el camino al directorio de trabajo activo. 
getwd()
## [1] "/home/sergio/TallerR2016"
# Usando setwd('/home/sergio/TallerR2016/') establezco el directorio de trabajo deseado
# Es muy útil explicitar este comando en los inicios de un script que requiera de lectura de archivos
setwd('/home/sergio/TallerR2016/')

Note que el carácter que identifica cambio de directorio que se está usando '/', eso se debe a que así lo hace Linux, si está corriendo otro Sistema Operativo, debiera fijarse en cómo se codifican las rutas a los archivos. En el caso que esté usando algo que pretende ser un Sistema Operativo (como Windows), ese carácter es '\' y una ruta tipica puede verse como 'c:\Archivos\de\Usuario\pepe\practicas_R\', mediante el uso del comando normalizePath en scripts se soluciona las inconsistencias provocadas por esta ambigüedad.

Acceso a las Ayudas

Las ayudas en R, son indispensables y un gran ejemplo de cómo se trabaja en un ambiente colaborativo. Como todo sistema de código abierto, R tiene un sistema de ayuda muy versátil y bien estructurado. Aprender a utilizar y comprender los manuales de R, son la clave misma de la facilidad con la cual pueda adaptar esta herramientas a sus necesidades.
1. La principal fuente de información externa a su sistema son los manuales en línea: https://cran.r-project.org/manuals.html (si no tienen la documentación en su disco recurra a este enlace)
2. En su propio sistema, a través de los comandos asociados:
+ help.start() # Abre una pestaña en su navegador por defecto, con la página de ayuda general
+ help(comando) # responde en la consola con la ayuda del comando 'comando'
+ help.search('palabra clave')
+ example(comando)
+ demo() # lista los demos disponibles(es frecuente que tengan el mismo nombre al de la librería que pertenecen) + demo(nombre)

#Pidiendo información de cómo citar al R, siguiendo lo expresado en el mensaje de bienvenida.
citation()
## 
## To cite R in publications use:
## 
##   R Core Team (2013). R: A language and environment for
##   statistical computing. R Foundation for Statistical Computing,
##   Vienna, Austria. URL http://www.R-project.org/.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {R: A Language and Environment for Statistical Computing},
##     author = {{R Core Team}},
##     organization = {R Foundation for Statistical Computing},
##     address = {Vienna, Austria},
##     year = {2013},
##     url = {http://www.R-project.org/},
##   }
## 
## We have invested a lot of time and effort in creating R, please
## cite it when using it for data analysis. See also
## 'citation("pkgname")' for citing R packages.
# Solicitando ayuda de el comando `setwd`
help(setwd)
# Solicitando ejemplos de uso del mismo comando
example(setwd)
## 
## setwd> (WD <- getwd())
## [1] "/home/sergio/TallerR2016"
## 
## setwd> if (!is.null(WD)) setwd(WD)

Revise el manual de Introducción a R

https://cran.r-project.org/doc/manuals/r-release/R-intro.html#An-introductory-session

Importando datos de planillas

##Primeros tips para calmar la ansiedad …
Debe querer empezar a interactuar con sus propios datos…, sus propios archivos, etc. Sin embargo, primero veamos algunos ejemplos que tenemos más a mano para que nos ayude a ejemplificar el proceso.
NOTA: Existen muchos conjuntos de datos preparados que se utilizan en los ejemplos. Comenzaremos utilizando el conjunto de datos 'iris' y le preguntaremos en qué consisten.

data(iris) # carga el conjunto de datos provisto por defecto
help(iris) # abrirá una pestaña de su navegador por defecto con metadatos del set
head(iris) # muestra los primeros registros de una estructura de datos .
##   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

Como ve, la información está organizada una secuencia de filas que representan casos, y las columnas representando variables de respuestas y/o clasificatorias.

iris es un objeto de clase data.frame, lo vemos en el resultado del comando str(iris) o class(iris)

class(iris)
## [1] "data.frame"
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
plot(iris)

plot of chunk unnamed-chunk-4


A los fines de obtener un ejemplo desde el cual leer datos desde una archivo de texto, aprovecharemos el comando para exportar objetos de la clase data.frame a ese formato. EN lugar de escribir línea a línea

write.csv(iris,file="datosiris.csv") # escribiendo a un archivo el objeto "iris", con todas las opciones por defecto de la variante *write.csv*.   

Como write.csv es una variante simplificada de write.table, se genera un segundo archivo para mostrar el uso de todas los argumentos, de modo tal que se pueda mostrar la versatilidad del par write.table/read.table para adaptarse a distintos formatos requeridos y/u ofrecidos
La lectura y escritura de información a archivos específicos, suele denominarse como serialización.

write.table(
  iris, file = "datosiris.txt", 
  append = FALSE, # de ser verdadero, intentará adjuntar la salida al final de un archivo de texto existente definido en file
  quote = TRUE, #rodea con " los valores pertenecientes a columnas de texto ó marcadas como factor
  sep = ";", # las columnas se separarán con ";"
  eol = "\n", # Carácter especial de fin de línea \n\r: Windows \r: mac 2004; \n POSix
  na = "nd", # identificador de dato faltante
  dec = ",", # decimal codificado por ',' 
  row.names = FALSE, # agrega fila donde nombra los casos           
  col.names = TRUE, # agrega columna donde nombra los campos
  fileEncoding = "UTF-8"

  )

Si sus datos están en un archivo de texto plano, como del tipo *.csv (Comma Separated Value), reemplace el nombre de archivo en el argumento file a continuación.

dat<-read.csv(file="datosiris.csv")
summary(dat)
##        X           Sepal.Length    Sepal.Width     Petal.Length  
##  Min.   :  1.00   Min.   :4.300   Min.   :2.000   Min.   :1.000  
##  1st Qu.: 38.25   1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600  
##  Median : 75.50   Median :5.800   Median :3.000   Median :4.350  
##  Mean   : 75.50   Mean   :5.843   Mean   :3.057   Mean   :3.758  
##  3rd Qu.:112.75   3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100  
##  Max.   :150.00   Max.   :7.900   Max.   :4.400   Max.   :6.900  
##   Petal.Width          Species  
##  Min.   :0.100   setosa    :50  
##  1st Qu.:0.300   versicolor:50  
##  Median :1.300   virginica :50  
##  Mean   :1.199                  
##  3rd Qu.:1.800                  
##  Max.   :2.500
class(dat)
## [1] "data.frame"
str(dat)
## 'data.frame':    150 obs. of  6 variables:
##  $ X           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Revise la ayuda para averiguar la fuente de los posibles errores de procesamiento read.table“

dat2<-read.table(
    file = "datosiris.txt", 
    quote =" \"", #rodea con " los valores pertenecientes a columnas de texto ó marcadas como factor
    sep = ";", # las columnas se separarán con ";"
    na = "nd", # identificador de dato faltante
    dec = ",", # decimal codificado por ',' 
    #row.names = FALSE, # agrega fila donde nombra los casos           
    #col.names = FALSE, # agrega columna donde nombra los campos
    header= TRUE, # pone a la primer fila leída como nombre de las variables
    fileEncoding = "UTF-8"
    )
str(dat2)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Respecto a dat y dat2:

  1. ¿Cuál/es es/son la/s diferencia/s?
  2. ¿ A qué se deben?
  3. ¿Debieran ser idénticas?

Ahora se anima a leer sus propios datos?

source('1_ScriptIris.R')
## Loading required package: tcltk
## 'data.frame':    150 obs. of  6 variables:
##  $ X           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

plot of chunk unnamed-chunk-8