Práctica 1

DESCRIPCIÓN DE RSTUDIO

Objetivos

  • Instalar R y RStudio
  • Familiarizarse con el entorno de RStudio
  • Introducir, almacenar e importar datos
  • Funciones en RStudio.

Descripción e instalación de R

RStudio es una interfaz que permite acceder de manera sencilla a toda la potencia de R, para utilizar RStudio se requiere haber instalado R previamente.

R es un lenguaje orientado a objetos, es un lenguaje para el cálculo estadístico y la generación de gráficos, que ofrece una gran variedad de técnicas estadísticas y gráficas. Es un entorno de análisis y programación estadísticos que, en su aspecto externo, es similar a S. Es un lenguaje de programación completo con el que se añaden nuevas técnicas mediante la definición de funciones.

Aunque comenzar a trabajar con R es más complejo que hacerlo con programas como SPSS, Statgraphics,…, sin embargo tiene muchas ventajas sobre ellos una de la más importante es que es un software libre en el que colaboran muchos usuarios para ampliar sus funciones.

A lo largo del texto veremos cómo utilizar R para realizar análisis convencionales, como los que se encuentran en BMDP, SAS, SPSS o Statgraphics, y dejaremos patente en algunos momentos sus posibilidades de análisis más complejos, como GLIM o GENSTAT, así como el desarrollo de nuevos análisis. R se distribuye de acuerdo a GNU GENERAL PUBLIC LICENSE.

 R se puede conseguir gratuitamente en varias direcciones de internet, una de ellas, es http://www.r-project.org

webR

En el sitio web: http://cran.es.project.org  se encuentra todo el proyecto R. Este proyecto incluye las fuentes para construir R, lo que permite saber cómo está construido el programa, así como las direcciones donde se pueden conseguir las herramientas necesarias para hacerlo.

DescargarR

Para instalar R, en el sistema operativo Windows, elegir Dowload R for Windows. La instalación se encuentra en un ejecutable. Descargar el archivo de instalación y se muestra la siguiente pantalla

InstalacionR

La instalación sólo realiza cambios mínimos en windows y copia los archivos necesarios en un directorio. Su desinstalación es sencilla y completa.

El directorio habitual donde realiza la instalación es C:/Archivos de programa. El programa crea en él un subdirectorio, R, y por cada versión un subdirectorio de este último donde copia todos los archivos, por ejemplo R-3.0.2. para la versión 3.0.2. En la instalación es conveniente seleccionar todas las opciones que se ofrecen, de tal modo que siempre se disponga de todas las ayudas posibles.

Instalacion_2R

El programa de instalación puede crear en el directorio un acceso directo al programa, que se encuentra en el directorio de instalación, en bin/Rgui.s. También se encuentra allí otro programa, bin/Rterm.s, utilizado para ejecución asíncrona del programa.

Resumen: En el sitio web: http://www.r-project.org: Ir a “Download”, elegir país de descarga (España) y seleccionar la versión correspondiente a nuestro sistema operativo (Linus, Windows o Mac) y seguir las instrucciones de instalación.

Descripción e instalación de RStudio

RStudio es una interfaz que permite acceder de manera sencilla a toda la potencia de R. Para utilizar RStudio se requiere haber instalado R previamente. Al igual que R-project, RStudio es software libre.

El objetivo de los creadores de RStudio es desarrollar una herramienta potente que soporte los procedimientos y las técnicas requeridas para realizar análisis de calidad y dignos de confianza. Al mismo tiempo, pretenden que RStudio sea tan sencillo e intuitivo como sea posible para proporcionar un entorno amigable, tanto para los ya experimentados como para los nuevos usuarios

 La instalación de  RStudio  se puede realizar  desde la página oficial del programa http://www.rstudio.org

webRstudio

Pinchar en  Download now  y se muestra la siguiente pantalla

RStudio1

Seleccionar Download RStudio Desktop

RStudio2

Elegir la versión  correspondiente a nuestro sistema operativo (Linux, Windows o Mac)

 RStudio3

y seguir las instrucciones de instalación.

 Resumen: En el sitio web: http:// www.rstudio.org, seleccionar Download now y a continuación seleccionar Download RStudio Desktop, elegir la versión correspondiente a nuestro sistema operativo (Linus, Windows o Mac) y seguir las instrucciones de instalación.

Introducción a RStudio

Una vez instalados R y RStudio procedemos a ejecutar el programa RStudio desde cualquiera de los iconos que genera y se mostrará la siguiente pantalla

 Rstudio

Esta pantalla está dividida en tres partes:

  • La ventana de la izquierda donde está el prompt “>” , llamada Consola, es el espacio de trabajo
  • La ventana de la derecha se divide en dos:
    • En la ventana superior derecha se encuentra el historial de objetos almacenados en memoria. Desde esta ventana también podemos:
      • Limpiar nuestro historial clear
      • Importar datos ImportarDatos
      • Muestra los comandos y funciones implementadas de los informes con los que se han trabajadohistory
  • En la ventana inferior de la derecha RStudio muestra el directorio de trabajo, los gráficos que se van generando, paquetes para cargarlos e instalarlos directamente, ayuda y un visor HTML. Estas pestañas se irán describiendo a lo largo del documento.

Barra del menú principal: Opciones

Desde la barra del Menú principal se puede acceder a todos los menús de RStudioLos primeros menús: Archivo, Edición, Ver y Ayuda son habituales en los programas bajo Windows. El resto de menús son específicos de RStudio estos permiten realizar cambios en los datos, obtener resultados estadísticos, numéricos, gráficos……A continuación se muestran los distintos menús desplegables, así como la finalidad de alguna de las opciones.

menu

Cada uno de estos menús contiene distintas opciones que se muestran pulsando en cada una de ellos.

El menú FILE

file1

Este menú contiene las opciones más generales que suelen tener todos los programas como abrir un archivo, guardar, cerrar…

Unas de las principales características de RStudio es la flexibilidad para trabajar con diferentes archivos que podemos generar desde New file.

  • New File->R Script: Permite abrir una nueva ventana en la interfaz de RStudio, la ventana de Edición. Aunque se puede desarrollar todo el trabajo en el espacio de trabajo, en la consola, esta no es la forma más eficiente de trabajar en RStudio. Es muy útil tener un entorno donde manipular (corregir, repetir, guardar, …) las entradas de código que solicitemos a R. Este entorno de trabajo es el Editor de R.  file2

En la ventana de edición se escriben las instrucciones y para ejecutar estas instrucciones  se pulsa (Ctrl+Intro); (Ctrl+r) o pinchando en el icono Run (en la parte superior derecha de la ventana de edición).

    • New File->Text File: Permite abrir la ventana de texto, en los archivos tipo texto no se pueden ejecutar ninguna función a menos que se copien y se peguen en el espacio de trabajo.
    • New File->C++ File: Permite compilar funciones de C++ en R.
    • New File->R Sweave: Crea un archivo  que permite trabajar con LaTeX.
    • New File->R Markdown y New File->R HTML: Herramientas de RStudio para la creación de informes web. Markdown es un lenguaje simple de marcas diseñado para hacer que el contenido web sea fácil. En lugar de escribir el código HTML y CSS, Markdown permite el uso de una sintaxis mucho más cómoda (leer más).
    • New File->R Presentation. Herramientas de RStudio para hacer presentaciones sencillas. El objetivo de las presentaciones es hacer diapositivas que hacen uso del código R y ecuaciones LaTeX lo más sencillo posible.
    • New File->Rd File. Uno de los requisitos básicos para los paquetes de R es que todas las funciones exportadas, objetos y conjuntos de datos tienen la documentación completa. RStudio también incluye un amplio soporte para la edición de documentación de R, (Los archivos Rd utilizan un formato simple de marcas que se asemeja sintácticamente LaTeX).
    • New Project: Permite crear proyectos que hacen que sea más fácil dividir el trabajo en múltiples contextos, cada uno con su propio directorio de trabajo, espacio de trabajo, historial y los documentos de origen. Los proyectos de RStudio están asociados a los directorios de trabajo.

Al crear un proyecto RStudio:

      • Se crea un archivo de proyecto (con una extensión Rproj.) dentro del directorio del proyecto. Este archivo contiene diversas opciones de proyecto.
      • Se crea un directorio oculto (nombrado Rproj.user) donde se almacenan los archivos específicos de un proyecto de carácter temporal (por ejemplo, los documentos originales guardados automáticamente, estado de la ventana, etc.). Este directorio también se agrega automáticamente a Rbuildignore, Gitignore, etc, si es necesario.
      • Se carga el proyecto en RStudio y se muestra su nombre en la barra de herramientas de Proyectos.

Seleccionando File/New Project se muestra la siguiente ventana con las siguientes opciones:

NewProject

  • Open Proyect…: Permite buscar y seleccionar un archivo de un proyecto existente.
  • Open Project in New Window…: Permite trabajar con varios proyectos RStudio simultaneamente. También se puede hacer abriendo varios archivos de proyecto a través de la shell del sistema (es decir, doble clic en el archivo de proyecto).
  • Recent Project: Permire seleccionar un proyecto de la lista de proyectos abiertos recientemente.
El menú EDIT

Edit

  • Undo/Redo: Deshace/Rehace la última acción realizada/rechazada en la ventana del editor.
  • Cut/Copy/Paste: Corta/ copia/pega cualquiere conjunto de texto de la ventana del editor.
  • Folding: Permite mostrar y ocultar fácilmente los bloques de código para que sea más fácil navegar por el archivo del código fuente.
  • Folding/Collapse: Permite duplicar una selección arbitraria de códigoLas regiones plegadas se conservan durante la edición de un documento, sin embargo cuando un archivo se cierra y se vuelve a abrir todas las regiones plegables son por defecto regiones no plegables.
  • Go to line…: Permite ir rápidamente a una línea concreta del texto que se esté utilizando en la ventana del editor.
  • Find…: Permie buscar alguna palabra o conjunto de palabras del texto que se esté utilizando en la ventana del editor.
  • Find Next/Find Previous: Encuentra el siguiente/anterior conjunto de letras idéntico al buscado anteriormente en la misma ventana del editor.
  • Replace and Find: Busca alguna palabra o conjunto de palabras del texto que se esté utilizando en la ventana del editor, y además reemplaza el conjunto de texto buscado por otro que elijamos.
  • Find in Files…: Permite buscar de forma recursiva todos los archivos para cada ocurrencia de una cadena dada en un directorio específico.

find

Se puede personalizar aún más la búsqueda con expresiones regulares y filtros para tipos de archivos específicos. El resultado de la búsqueda se mostrará en el panel junto a la consola (por defecto).

  • Clear Console: Limpia por completo la consola, pero no borra los objetos que se hayan almacenado anteriormente en la memoria.
El menú CODE

BarraCode

En este menú están las opciones más directas con el espacio de trabajo.

  • Back/Fordward: Rehacer/Deshacer una acción hecha en el script de trabajo.
  • Insert Section…: Escribe un comentario en el script con el título de la sección (útil para ir directamente a una parte del trabajo).
  • Jump To...: Permite ir directamente a una función creada anteriormente en el script de trabajo o ir a una sección.
  • Go To File Function: Permite acceder rápidamente a cualquier archivo o función creada con RStudio.
  • Go To Help: Muestra la ayuda del objeto donde esté situado el cursor.
  • Go To Function Definition: Muestra la definición interna de la función que utiliza el programa para la ejecución de ésta.
  • Extract Function: Permite crear funciones, para ello se tiene que seleccionar el texto que se quiere incluir en ésta.
  • Reident Lines: Lleva el cursor al principio de la línea siguiente.
  • Coment/Uncoment Lines: Permite transformar líneas de código en comentarios.
  • Run Line(s): Ejecuta la línea donde está situado el cursor o un trozo de código que se seleccione.
  • Re-Run Previous: Ejecuta de nuevo todo el código ejecutado por última vez.
  • Run Region: Permite ejecutar una sección de código.
  • Source: Almacena en la memoria los objetos definidos en la ventana de edición.
  • Source with Echo: Ejecuta en la consola los objetos definidos en la ventana de edición.
  • Source File: Almacena en la memoria los objetos definidos de cualquier archivo creado con RStudio aunque no estén abiertos.
 El menú VIEW

View

  • Hide/Show Toolbar: Muestra/Oculta la barra de herramientas.
  • Zoom In/Zoom Out: Realiza un zoom sobre cada una de las ventanas aumentando/disminuyendo el tamaño de su contenido.
  • Switch To Tab: Permite cambiar de pestaña para visualizar cualquier hoja de edición.
  • Next Tab/Previous Tab: Permite cambiar a la pestaña siguiente/anterior para visualizar la hoja de edición siguiente/anterior.
  • First Tab/Last Tab: Permite cambiar a la primera/última pestaña para visualizar la primera/última hoja de edición.
  • Move Focus To Source/Move Focus To Console: Mueve el cursor a la ventana de edición/consola de trabajo desde cualquier otra ventana.
  • Move Focus To Help: Mueve el cursor a la pestaña de ayuda que por defecto se muestra en la ventana auxiliar número 2.
  • Show History: Muestra todo el código que se ha ejecutado en la consola desde la última vez que se eliminó el historial. Por defecto el historial se muestra en la ventana auxiliar número 1.
  • Show Files/Show Plots/ Show Packages: Muestra el conjunto de ficheros existentes en el directorio de trabajo/conjunto de gráficos que se han generado/conjunto de paquetes que el programa tiene instalados hasta el momento. Por defecto se muestra en la ventana auxiliar número 2.
  • Show Environment: Muestra el conjunto de objetos que se han guardado en la memoria del programa. Por defecto se muestra en la ventana auxiliar número 1.
 El menú PLOTS

Plots

  • Next Plot/ Previous Plot: Muestra el gráfico siguiente/anterior.
  • Zoom Plot…: Abre una nueva ventana en la que se muestra el gráfico seleccionado.
  • Save Plot as Image…/Save Plot as PDF…: Guarda el gráfico seleccionado como una imagen (.png, .jpg, .tiff, .bmp, .metafile, .svg, .eps)/en pdf
  • Copy Plot to Clipboard: Copia el gráfico en un portapapeles.
  • Remove Plo…t: Elimina el gráfico seleccionado
  • Clear All…: Elimina todos los gráficos creados.
 El menú SESSION

Session

  • Interrupt R: Permite interrumpir algún proceso interno que no queremos que finalice.
  • Restart R: Permite actualizar la sesión en la que estemos trabajando.
  • Terminate R: Permite eliminar toda la información creada en una sesión, pero sin eliminar lo escrito en la ventana de edición.
  • Set Working Directory: Permite configurar el directorio de trabajo.
  • Load Workspace/Save Workspace As/Clear Workspace: Permite cargar/guardar/eliminar un determinado espacio de trabajo. Por defecto los objetos contenidos en un espacio de trabajo se visualizan en la ventana auxiliar número 1.
El menú BUILD Build
  • Configure Build Tools: Permite construir paquetes y herramientas dentro de un proyecto creado por el usuario.
El menú DEBUG

Debug

  • Toggle Breakpoint: Permite introducir un punto de interrupción en el texto de la ventana de edición con la finalidad de averiguar si, hasta la línea donde se coloca dicho punto, la ejecución del texto es correcta.
  • Clear All Breakpoints: Permite eliminar todos los puntos de interrupción que se hayan utilizado hasta el momento.
  • Execute Next Line: Permite ejecutar texto colocado después de la línea donde se ha introducido un punto de interrupción.
  • Continue: Permite continuar con la ejecución una vez que se ha detenido dicha ejecución en el punto de interrupción.
  • Stop Debugging: Detiene la depuración.
  • On Error: En caso de error, permite elegir entre que sólo salga un mensaje de aviso, que se inspeccione el error o que no ejecute más código a partir del error.
  • Debugging Help: Muestra la página web del programa con la ayuda sobre la depuración de errores.
 El menú TOOLS

Tools

  • Import Dataset: Importa un conjunto de datos desde un archivo .txt guardado en nuestro directorio (From Text File…) o desde cualquier página web (From Web URL…).
  • Install Packages…: Permite instalar paquetes. Es importante que dentro de esta opción esté marcada la opción de Install dependencies.

tools-1

  • Check for Packages Updates…: Permite actualizar los paquetes seleccionados.
  • Version Control: Permite controlar varios proyectos a la vez, hacer copias de seguridad de los proyectos…

tools-2

  • Shell…: Es una interfaz para las operaciones  más comunes de control de versiones.

Shell-1

  • Global Options…: Muestra las opciones generales de RStudio

Nota: Una vez instalado el paquete hay que cargar dicho paquete, para ello desde el panel de paquetes simplemente se selecciona dicho paquete

im9

  El menú HELP

Help

  • R Help: Muestra la ayuda del programa. Por defecto se puede visualizar en la ventana auxiliar número 2.
  • About RStudio: Muestra información sobre RStudio.
  • Check For Updates: Permite realizar una búsqueda en la última versión con la finalidad de obtener la última actualización de dicho programa.
  • RStudio Docs: Muestra la página web del programa en la que se explica la documentación con la que se puede trabajar en RStudio.
  • RStudio Support: Muestra la página web del programa en la que hay un soporte de ayuda para cualquier duda sobre RStudio.
  • Keyboard Shortcuts: Muestra la página web del programa, en la que se puede consultar todas los posibles métodos abreviados de teclado (combinaciones de teclas) para ejecutar los comandos  en RStudio.
  • Diagnostics: Permite realizar algunas opciones sobre diagnósticos del programa.
  Conceptos de interés
  • demo(): Abre una ventana con funciones de R para que se observe cómo se ejecutan y el resultado que devuelve
  • help():Para una información más detallada utilizamos la función help() (ayuda). RStudio no necesita conectarse a la web para mostrar la ayuda, mientras que R sí.
  • apropos(” “): Si no nos acordamos del nombre exacto de una función podemos usar la función apropos(” “) y entre paréntesis algunas letras de la función entre comillas.
  • example(): Muestra un ejemplo práctico de una función.

> demo()

1

> help()

2

> apropos(“med”)
[1] “.__C__namedList” “.rs.emptyNamedList”
[3] “.rs.namedVectorAsList” “elNamed”
[5] “elNamed<-” “median”
[7] “median.default” “medpolish”
[9] “runmed”
> example(median)

> example(median)
median> median(1:4)                                         # = 2.5 [even number]
[1] 2.5

median> median(c(1:3, 100, 1000))                    # = 3 [odd, robust]
[1] 3

Estructura de datos fundamentales

  • Variables

La siguiente instrucción asigna el valor 25 a la variable años
> años=25
También se puede utilizar el símbolo “<-”
> años <- 25

Si el valor asignado es alfanumérico, se especifica entre comillas
> ciudad = “Granada”
> ciudad
[1] “Granada”

  • Vectores

El primer tipo de objeto que vamos a introducir  es el vector.

* Se puede crear un vector utilizando la función c(), que concatena todos los elementos que recibe como argumentos.

>c(2,7,1,6)
[1] 2 7 1 6

>c(1:10)
[1]  1  2  3  4  5  6  7  8  9 10

>c(1:10,2,7,1,6,2:-5)
[1]  1  2  3  4  5  6  7  8  9 10  2  7  1  6  2  1  0 -1 -2 -3 -4 -5

>c()
NULL
En el último caso, el resultado es el objeto NULL.

En el caso de vectores alfanuméricos, los elementos van entrecomillados

 >nombre.mes=c(“Enero”,”Febrero”,”Marzo”,”Abril”,”Mayo”,”Junio”,”Julio”,”Agosto”,”Septiembre”,”Octubre”,”Noviembre”,”Diciembre”)
>nombre.mes
[1] “Enero” “Febrero” “Marzo” “Abril”
[5] “Mayo” “Junio” “Julio” “Agosto”
[9] “Septiembre” “Octubre” “Noviembre” “Diciembre”

>c(“Hola”, “Uno”, “Dos”)
[1] “Hola” “Uno”  “Dos”

Un vector está formado por elementos del mismo tipo. Si se mezclan números y cadenas de caracteres, se obtendrá un vector alfanumérico. Si se mezclan números reales y complejos, se obtendrá un vector de números complejos.

 * Para acceder a los elementos de unvector se utilizan los corchetes

> nombre.mes[3]
[1] “Marzo”

> nombre.mes[6]
[1] “Junio”

> nombre.mes[2:6]
[1] “Febrero” “Marzo” “Abril” “Mayo” “Junio”

> nombre.mes[c(1, 4, 6, 8)]
[1] “Enero” “Abril” “Junio” “Agosto”

* El símbolo de dos puntos, situado entre dos números, construye un vector de modo sencillo, tanto en orden ascendente como descendente.

>1:10
[1]  1  2  3  4  5  6  7  8  9 10

>1:3.5
[1] 1 2 3

>1.9:3.5
[1] 1.9 2.9
El vector comienza en el primer número suministrado y finaliza en el segundo o en un número anterior sin sobrepasarlo, tanto en orden ascendente como descendente.

♦ Algunas funciones de utilidad sobre los vectores
 * Names()

Mediante la función names() podemos asignar nombre a los elementos de un vector. De hecho, esta función permite dar nombre a los elementos de cualquier objeto. Aplicada a un vector se hace de la siguiente forma:
> x<-1:5
>x
[1] 1 2 3 4 5
>names(x)<-c(“I”,”II”,”III”,”IV”,”V”)
>x
I  II III  IV   V

Seq()

La función seq() permite construir vectores que son sucesiones equiespaciadas, esta función posee los siguientes argumentos:

  • from Valor inicial de la sucesión
  • to Valor final de la sucesión
  • by Espaciado entre los elementos
  • length Longitud del valor resultante
  • along Un objeto cuya longitud se usará para el objeto a construir.

Si no se indica algún argumento, por defecto vale 1

> seq(1, 100, length = 5)
[1] 1.00 25.75 50.50 75.25 100.00

> x <- c (1: 7)
> x [seq (1, 7, by = 2)]
[1] 1 3 5 7

* Mode()

La función mode() devuelve o modifica el tipo de un objeto.
> x = 1:5
>mode(x)
[1] “numeric”

♦ Operaciones básicas con vectores

Las operaciones básicas que podemos realizar con vectores las podemos resumir en la siguiente tabla.

3Esta tabla se puede visualizar ejecutando la función demo(plotmath)

> demo(plotmath)

  • Factor

La función “factor” crea un vector de variables cualitativas, donde el atributo levels indica los valores numéricos posibles.Un factor corresponde a una variable nominal u ordinal, dividida en categorías, y que se utiliza, por ejemplo, para dividir una población en grupos. Esta función será de vital importancia en las próximas prácticas.

 factor (x, levels =, labels =, exclude = , ordered = )

Siendo sus argumentos los siguientes:

  •  x son los datos a partir de los cuales se genera el factor
  • levels es un vector de niveles opcional. Los valores de x que no correspondan a uno de los indicados se sustituyen por NA. El valor predeterminado de este parámetro es la lista ordenada de valores distintos de x
  • labels es un vector de valores que se utiliza como etiqueta de los niveles. El valor predeterminadoes as.character(levels)
  • exclude es un vector de valores que deben excluirse de la formación de niveles y sustituirse por NA
  • ordered es un valor lógico que indica si lo es el factor.

> sexo <- c (“Hombre”, “Mujer”, “Mujer”,”Hombre”, “Hombre” ,”Mujer”, “Hombre”)
> nombre <-c (“Pedro”, “Alicia”, “Ana”, “Manolo”, “Germán”, “María”, “Juan”)
> sexo <- factor (sexo)
> sexo
[1] Hombre Mujer  Mujer  Hombre Hombre Mujer  Hombre
Levels: Hombre Mujer

  • Matrices

En R hay varias formas de crear una matriz:

♦ Mediante la función matrix(), cuyos parámetros son:

data Vector que contiene los valores que formarán la matriz. Debe tener en cuenta que si no es suficientemente grande, se repetirá las veces que sea necesario

♦ nrow Número de filas.Si no especifica, se toma nrow =1

♦ ncol Número de columnas

 ♦ byrow Variable lógica que indica si la matriz debe construirse por filas o por columnas. El valor predeterminado es F

 ♦ dimnames Lista de longitud 2 con los nombres de las filas y las columnas.

♦ Mediante los operadores rbind() (para pegar vectores por filas) y cbind() (para pegar vectores por columnas)

matriz = rbind (x1, x2,…)
matriz = cbind (x1, x2…)

donde en la función rbind(), x1 y x2, son las filas de la matriz, y en la función cbind() las columnas.

> M = matrix( 1: 9, nrow = 3, byrow = TRUE) # la matriz se rrellena por filas
> M
[,1]  [,2]  [,3]
[1,]  1  2   3
[2,] 4  5    6
[3,]  7  8   9

> N = matrix( 1: 9, nrow = 3, byrow = FALSE) # la matriz se rrellena por columnas
> N
[,1]   [,2]   [,3]
[1,]    1       4       7
[2,]     2       5      8
[3,]     3       6      9

> matrix(1:10,  5,  2, dimnames = list (c (“fila1”, “fila2”, “fila3”, “fila4”, “fila5”),  c(“columna1”, “columna2”)))
columna1 columna2
fila1        1        6
fila2        2        7
fila3        3        8
fila4        4        9
fila5        5       10

> matrix(1:15, 3, 5)
[,1]  [,2]  [,3]  [,4]  [,5]
[1,]    1     4      7     10   13
[2,]     2    5      8     11   14
[3,]     3    6      9     12   15

Nota: Cuando la longitud del vector no coincide con el número de filas y columnas, los elementos de la matriz se repiten, por lo que R te da un warning advirtiendo que las salidas pueden no ser las deseadas.
> matrix( 1:15, 4, 6)
[,1]  [,2]  [,3]  [,4]  [,5]  [,6]
[1,]    1     5      9    13      2    6
[2,]    2     6     10   14      3    7
[3,]    3     7     11   15      4    8
[4,]    4     8     12    1      5    9
Warning message
In matrix(1:15, 4, 6) :
data length [15] is not a sub-multiple or multiple of the number of rows [4]

También podemos utilizar las funciones cbind y rbind para construir matrices:

> v1 = c(1,2,3,4)
> v2 = c(5,6,7,8)
> v3= c(9,10,11,12)
> FA = rbind(v1,v2,v3)
> FA
[,1] [,2] [,3] [,4]
v1    1     2    3     4
v2    5     6    7     8
v3    9    10   11  12

>QA = cbind (v1, v2, v3)
> QA
v1  v2  v3
[1,]   1   5    9
[2,]   2   6   10
[3,]   3   7    11
[4,]   4   8    12

> matriz= rbind (c(1,2,3), c(4,5,6), c(7,8,9))
> matriz
[,1]  [,2]  [,3]
[1,]    1    2      3
[2,]    4    5      6
[3,]    7    8      9

> matriz = cbind (c(1,2,3), c(4,5,6), c(7,8,9))
>matriz
[,1]  [,2]  [,3]
[1,]    1     4     7
[2,]    2     5     8
[3,]    3     6     9

◊ Seleccionar los ementos de una matriz
    • Seleccionar el término que ocupa la posición primera fila, segunda columna, [1, 2] de la matriz N:

La matriz N es la siguiente
> N
[,1]   [,2]   [,3]
[1,]    1       4       7
[2,]     2       5      8
[3,]     3       6      9

> N[1, 2]
[1] 4

  • Para seleccionar sólo una fila (columna), dejamos en blanco la posición de la columna (fila)

Por ejemplo: Seleccionar

La segunda fila de la matriz N
> N[2, ]
[1] 2 5 8

La tercera columna de la matriz N
> N[ , 3 ]
[1] 7 8 9

  • Seleccionar la segunda y tercera fila

> N[2:3, ]
[,1] [,2] [,3]
[1,]    2   5    8
[2,]    3   6     9

  • Seleccionar la segunda y tercera fila de las dos primeras columnas

> N[2:3, 1:2]
[,1] [,2]
[1,]   2    5
[2,]   3     6

Ejemplos
Construir una matriz de 14×3 donde los nombres de las columnas son las variables peso, altura y edad

> datos= c (77, 58, 89, 55,47,60,54,58,75,65,82,85,75,65,1.63,1.63,1.85,1.62,1.60,1.63,1.70,1.65,1.78,1.70,1.77,1.83,1.74,1.65,23,23,26,23,26,26,22,23,26,24,28,42,25,26)
> matriz = matrix(datos, 14, 3, dimnames = list(c(), c(“Peso”,”Altura”,”Edad”)))
>matriz
Peso Altura Edad
[1,]   77   1.63   23
[2,]   58   1.63   23
[3,]   89   1.85   26
[4,]   55   1.62   23
[5,]   47   1.60   26
[6,]   60   1.63   26
[7,]   54   1.70   22
[8,]   58   1.65   23
[9,]   75   1.78   26
[10,]   65   1.70   24
[11,]   82   1.77   28
[12,]   85   1.83   42
[13,]   75   1.74   25
[14,]   65   1.65   26

  • Seleccionar la primera columna

> matriz[ ,1]
[1] 77 58 89 55 47 60 54 58 75 65 82 85 75  65

También
> matriz [ ,”Peso”]
[1] 77 58 89 55 47 60 54 58 75 65 82 85 75 65

  • Seleccionar un elemento

> matriz[4 , 2]
Altura
1.62

  • Seleccionar una fila

> matriz[9, ]
Peso Altura   Edad
75.00   1.78  26.00

  • Añadir a la matriz la variable sexo.

>sexo<-factor(c(“H”,”M”,”H”,”H”,”M”,”M”,”H”,”M”,”M”,”H”,”H”,”H”,”M”,”M”))
>sexo
[1] H M H H M M H M M H H H M M
Levels: H M

>matriz<-c(matriz,sexo)
>matriz
[1] 77.00 58.00 89.00 55.00 47.00 60.00 54.00 58.00 75.00 65.00 82.00 85.00 75.00 65.00 1.63 1.63 1.85 1.62 1.60
[20] 1.63 1.70 1.65 1.78 1.70 1.77 1.83 1.74 1.65 23.00 23.00 26.00 23.00 26.00 26.00 22.00 23.00 26.00 24.00
[39] 28.00 42.00 25.00 26.00 1.00 2.00 1.00 1.00 2.00 2.00 1.00 2.00 2.00 1.00 1.00 1.00 2.00 2.00

>matriz<-matrix(matriz,14,4,dimnames=list(c(),c(“Peso”,”Altura”,”Edad”,”Sexo”)))
>matriz
Peso Altura Edad Sexo
[1,]   77   1.63   23    1
[2,]   58   1.63   23    2
[3,]   89   1.85   26    1
[4,]   55   1.62   23    1
[5,]   47   1.60   26    2
[6,]   60   1.63   26    2
[7,]   54   1.70   22    1
[8,]   58   1.65   23    2
[9,]   75   1.78   26    2
[10,]   65   1.70   24    1
[11,]   82   1.77   28    1
[12,]   85   1.83   42    1
[13,]   75   1.74   25    2
[14,]   65   1.65   26    2

  • Hoja de datos

La adaptación de la matriz de datos al uso habitual en Estadística es el objeto data.frame().

  • La diferencia fundamental con la matrix() de datos es que data.frame() no tiene por qué estar compuesto de elementos del mismo tipo. Los objetos pueden ser vectores, factores, matrices, listas e incluso hojas de datos.
  • Las matrices, listas y hojas de datos, contribuyen con tantas variables como columnas tengan.
  • Los vectores numéricos y los factores se incluyen directamente y los vectores no numéricos se fuerzan como factores.
  • Para referirnos a cualquier elemento de la hoja de datos utilizaremos dos índices, de modo similar a una matriz.

En el ejemplo anterior, al añadirle a la matrix() la variable sexo, la transforma en tipo numérico asignándole el valor 1 para hombre 2 para mujeres.

>mode(matriz)
[1] “numeric”

Vamos a transformar la matriz en un data.frame().

>dataframe<-data.frame(matriz)
>dataframe
Peso Altura Edad Sexo
1    77   1.63   23    1
2    58   1.63   23    2
3    89   1.85   26    1
4    55   1.62   23    1
5    47   1.60   26    2
6    60   1.63   26    2
7    54   1.70   22    1
8    58   1.65   23    2
9    75   1.78   26    2
10   65   1.70   24    1
11   82   1.77   28    1
12   85   1.83   42    1
13   75   1.74   25    2
14   65   1.65   26    2
De esta forma, hemos convertido la matriz de tipo numérico en un conjunto de datos con 4 variables y cada una con 14 observaciones.

Para añadir una variable de tipo carácter, como por ejemplo los nombres de los individuos, en el data.frame, se puede hacer de la siguiente forma:

> Nombres = c (“Pepe”,”Ana”,”Manolo”,”Rafa”,”María”,”Auxi”,”Germán”,”Celia”,”Carmen”,”Juan”,”Dani”,”Antonio”,”Belinda”,”Sara”)
>Nombres
[1] “Pepe”    “Ana”     “Manolo”  “Rafa”    “María”   “Auxi”    “Germán”  “Celia”   “Carmen”
[10] “Juan”    “Dani”    “Antonio” “Belinda” “Sara”

> dataframe1 <- data.frame(dataframe, Nombres)
> dataframe1
Peso Altura Edad Sexo Nombres
1 77 1.63 23 1 Pepe
2 58 1.63 23 2 Ana
3 89 1.85 26 1 Manolo
4 55 1.62 23 1 Rafa
5 47 1.60 26 2 María
6 60 1.63 26 2 Auxi
7 54 1.70 22 1 Germán
8 58 1.65 23 2 Celia
9 75 1.78 26 2 Carmen
10 65 1.70 24 1 Juan
11 82 1.77 28 1 Dani
12 85 1.83 42 1 Antonio
13 75 1.74 25 2 Belinda
14 65 1.65 26 2 Sara

  • Listas

Una lista es un objeto formado por objetos de varias clases. Una colección de elementos que pueden ser de distintos tipos y que generalmente están identificados por un nombre. Para crear una lista se utiliza la función list()

 > milista = list(números = 1:5, A = matrix(1:6, nrow =3), B = matrix(1:8, ncol = 2), ciudades = c(“Sevilla”, “Granada”, “Málaga”))
> milista
$números
[1] 1 2 3 4 5

$A
[,1]   [,2]
[1,]   1      4
[2,]   2      5
[3,]   3      6

$B
[,1]   [,2]
[1,]    1      5
[2,]    2      6
[3,]    3      7
[4,]    4      8

$ciudades
[1] “Sevilla” “Granada” “Málaga”

◊ Seleccionar elementos de una lista

Se puede acceder a los elementos de una lista de varias formas:

> milista$números
[1] 1 2 3 4 5

> milista[[“números”]]
[1] 1 2 3 4 5

> milista[[1]]
[1] 1 2 3 4 5

> milista[c(1,3,4)]   # Acceder a una sublista NombreDeLaLista[c(Posicion1, Posicion2, …)]
$números
[1] 1 2 3 4 5

$B
[,1]   [,2]
[1,]   1      5
[2,]   2      6
[3,]   3      7
[4,]   4      8

$ciudades
[1] “Sevilla” “Granada” “Málaga”

> milista[c(-1,-3,-4)]   # Índices negativos que indican los elementos que no se obtienen. NombreDeLaLista[c(-Posicion1, -Posicion2,…)]
$A
[,1] [,2]
[1,]     1     4
[2,]     2     5
[3,]     3     6

Ejemplo

Dada la siguiente lista

> ejem.lista = list(nom.alumno1=”Manolo”, nom.alumno2=”German”, nom.profesora=”Ana”, ProyectoInnovacionDocente=TRUE, NumeroDeAlumnos = 2, EdadAlumnos = c(21, 23))
>ejem.lista
$nom.alumno1
[1] “Manolo”

$nom.alumno2
[1] “German”

$nom.profesora
[1] “Ana”

$ProyectoInnovacionDocente
[1] TRUE

$NumeroDeAlumnos
[1] 2

$EdadAlumnos
[1] 21 23

Obtener elementos de la lista utilizando diferentes procedimientos

a) Utilizando el operador $ de la siguiente forma

> ejem.lista$nom.alumno1
[1] “Manolo”

> ejem.lista$nom.alumno2
[1] “German”

>ejem.lista$nom.profesora
[1] “Ana”

>ejem.lista$EdadAlumnos
[1] 21 23

b) Indicando entre dobles corchetes la posición del elemento. NombreDeLaLista[[PosiciónDelElemento]]

> ejem.lista[[2]]
[1] “German”

>ejem.lista[[4]]
[1] TRUE

c) Indicando entre dobles corchetes y comillas el nombre del elemento. NombreDeLaLista[[“Nombre”]]
> ejem.lista[[“nom.profesora”]]
[1] “Ana”

>ejem.lista[c(1,2,4,5)]  # Acceder a una sublista NombreDeLaLista[c(Posicion1, Posicion2, …)]
$nom.alumno1
[1] “Manolo”

$nom.alumno2
[1] “German”

$ProyectoInnovacionDocente
[1] TRUE

$NumeroDeAlumnos
[1] 2

Por último podemos poner índices negativos para no obtener elementos no deseados. NombreDeLaLista[c(-Posicion1, -Posicion2,…)]

>ejem.lista[c(-4,-5)] # Índices negativos que indican los elementos que no se obtienen. NombreDeLaLista[c(-Posicion1, -Posicion2,…)]
$nom.alumno1
[1] “Manolo”

$nom.alumno2
[1] “German”

$nom.profesora
[1] “Ana”

$EdadAlumnos
[1] 21 23

Para describir un conjunto de datos la estructura que se debe utilizar es la lista, mientras que para devolver datos desde una función se debe utilizar la hoja de datos. Ya que esta última permite devolver datos de varios tipos y, además, de modo estructurado, lo que facilita utilizar el resultado de una función como entrada de otra.

◊ Seleccionar variables según un condicional, de forma aleatoria, según un rango o según una variable filtro

Mediante la fucnción  subset() se selecciona subconjunto en vectores y en una hoja de datos

La sintaxis en vectores es:  subset(x, subset, …)

La sintaxis en hojas de datos es:  subset(x, subset,select, drop = FALSE, …)

donde los argumentos son:

  •  x El objeto al que se aplica la selección
  • subset La condición que se aplica para seleccionar un subconjunto
  • select Columnas que se desea conservar en una hoja de datos
  • drop Este argumento se pasa al método de indexación de hojas de datos.

Recordemos los datos del ejemplo

> datos= c (77, 58, 89, 55,47,60,54,58,75,65,82,85,75,65,1.63,1.63,1.85,1.62,1.60,1.63,1.70,1.65,1.78,1.70,1.77,1.83,1.74,1.65,23,23,26,23,26,26,22,23,26,24,28,42,25,26)
> matriz = matrix(datos, 14, 3, dimnames = list(c(), c(“Peso”,”Altura”,”Edad”)))
>Sexo<-factor(c(“H”,”M”,”H”,”H”,”M”,”M”,”H”,”M”,”M”,”H”,”H”,”H”,”M”,”M”))
> matriz<-c(matriz,Sexo)
> matriz <- matrix(matriz,14,4,dimnames=list(c(),c(“Peso”,”Altura”,”Edad”,”Sexo”)))
> dataframe<-data.frame(matriz)
> Nombres = c (“Pepe”,”Ana”,”Manolo”,”Rafa”,”María”,”Auxi”,”Germán”,”Celia”,”Carmen”,”Juan”,”Dani”,”Antonio”,”Belinda”,”Sara”)
> dataframe1 <- data.frame(dataframe, Nombres)

♦ Seleccionar variables

> subset(dataframe1,select=c(Sexo,Nombres))
Sexo   Nombres
1        1        Pepe
2        2        Ana
3        1        Manolo
4        1        Rafa
5        2        María
6        2        Auxi
7        1      Germán
8        2      Celia
9        2      Carmen
10      1      Juan
11      1      Dani
12      1      Antonio
13      2      Belinda
14      2      Sara

> subset(dataframe1, select = c(Peso,Altura))
Peso      Altura
[1,]        77        1.63
[2,]       58         1.63
[3,]       89         1.85
[4,]       55         1.62
[5,]      47          1.60
[6,]      60          1.63
[7,]      54          1.70
[8,]      58          1.65
[9,]      75          1.78
[10,]    65          1.70
[11,]    82          1.77
[12,]    85          1.83
[13,]    75          1.74
[14,]    65          1.65

♦ Seleccionar un subconjunto de variable

> subset(dataframe1, Altura > 1.70)
Peso   Altura   Edad   Sexo
3    89   1.85   26    1  Manolo
9    75   1.78   26    2  Carmen
11   82   1.77   28    1    Dani
12   85   1.83   42    1 Antonio
13   75   1.74   25    2 Belinda

>subset(dataframe1, Altura > 1.71 & Peso > 60)
Peso Altura Edad Sexo Nombres
3    89   1.85   26    1  Manolo
9    75   1.78   26    2  Carmen
11   82   1.77   28    1    Dani
12   85   1.83   42    1 Antonio
13   75   1.74   25    2 Belinda

>subset(dataframe1, Altura > 1.71 & Peso> 60 & Sexo==”1″)
Peso Altura Edad Sexo Nombres
3    89   1.85   26    1  Manolo
11   82   1.77   28    1    Dani
12   85   1.83   42    1 Antonio

>subset(dataframe1, Altura>1.71 & Peso>60 & Sexo==”1″,select=Nombres)
Nombres
3   Manolo
11    Dani
12 Antonio

>subset(dataframe1, Altura>1.71 & Peso >60 & Sexo==”1″, select=c(Edad,Nombres))
Edad Nombres
3    26  Manolo
11   28    Dani
12   42 Antonio

♦ Seleccionar variables usando una variable auxiliar filtro.

> filtro = dataframe1[,”Altura”] < 1.80
> filtro
[1]  TRUE  TRUE FALSE  TRUE  TRUETRUETRUETRUETRUETRUETRUE FALSE  TRUE  TRUE

>dataframe1[filtro,”Altura”] = NA
>dataframe1

Peso Altura Edad Sexo Nombres
1    77     NA   23    1    Pepe
2    58     NA   23    2     Ana
3    89   1.85   26    1  Manolo
4    55     NA   23    1    Rafa
5    47     NA   26    2   María
6    60     NA   26    2    Auxi
7    54     NA   22    1  Germán
8    58     NA   23    2   Celia
9    75     NA   26    2  Carmen
10   65     NA   24    1    Juan
11   82     NA   28    1    Dani
12   85   1.83   42    1 Antonio
13   75     NA   25    2 Belinda
14   65     NA   26    2    Sara

Comparamos con el comando anterior (subset) para ver que los resultados coinciden.

>subset(dataframe1, Altura>1.80)
Peso Altura Edad Sexo Nombres
3    89   1.85   26    1  Manolo
12   85   1.83   42    1 Antonio

Creción de variables a partir de otras existentes

>transform(dataframe1,logPeso=log(Peso))
Peso Altura Edad Sexo Nombres  logPeso
1    77   1.63   23    1    Pepe 4.343805
2    58   1.63   23    2     Ana 4.060443
3    89   1.85   26    1  Manolo 4.488636
4    55   1.62   23    1    Rafa 4.007333
5    47   1.60   26    2   María 3.850148
6    60   1.63   26    2    Auxi 4.094345
7    54   1.70   22    1  Germán 3.988984
8    58   1.65   23    2   Celia 4.060443
9    75   1.78   26    2  Carmen 4.317488
10   65   1.70   24    1    Juan 4.174387
11   82   1.77   28    1    Dani 4.406719
12   85   1.83   42    1 Antonio 4.442651
13   75   1.74   25    2 Belinda 4.317488
14   65   1.65   26    2    Sara 4.174387

Nota: Ver también Estructura de datos con R en la Práctica 1 de la Guía R

Lectura de datos desde ficheros externos

♦ readtable()

Para leer un fichero .txt en R se emplea la función read.table

read.table (file,  header, sep,  quote,  dec ,  row.names,  col.names, as.is,  na.strings, skip)

  • file: Nombre del archivo a leer, que debe tener una línea por individuo
  • header: Es un valor lógico. Si es TRUE, la primera línea del archivo contiene los nombres de las variables. Es conveniente especificar este campo explícitamente
  • sep: Separador entre campos. El valor predeterminado es uno o varios espacios en blanco
  • dec: Separador decimal
  • quote: Conjunto de caracteres que delimitan cadenas de caracteres
  • row.names: Especifica los nombres para las filas. Se puede especificar de dos formas: Con un vector de cadenas de caracteres de la misma longitud que el número de filas o mediante un nombre o número que indica un campo del archivo que contiene los nombres.Si se deja en blanco, los nombres dependen de la existencia o no de un campo de caracteres con valores distintos. Si lo hay, los utiliza como nombres, en caso contrario utiliza como nombres los números de orden de cada fila. Esta última opción puede forzarse dando a este parámetro el valor NULL.
  • col.names: Especifica los nombres para las columnas o variables. Si no los indica aquí, ni están incluidos en la primera fila del archivo, se construyen con la letra V y el número de columna.
  • as.is:Vector de valores lógicos que indica cómo tratar los campos no numéricos. El valor predeterminado es FALSE con el cual dichos campos se transforman en factores, salvo que se utilicen como nombres de filas. Si este vector es de longitud inferior al número de campos no numéricos se repetirá las veces necesarias. También puede ser un vector numérico que indica que columnas deben conservarse como caracteres.
  • na.strings: Vector de caracteres y controla con qué valor se indica un valor NA. Así, podrá utilizar * para leer este tipo de datos procedentes de BMDP.
  • colClasses: Vector de caracteres que indica la clase de cada columna.
  • nrows:Número máximo de filas que se leerán.
  • skip:Indica el número de líneas del principio del archivo que deben saltarse sin leer.
  • check.names: De tipo lógico, si es TRUE se comprueba que los nombres de variables son correctos y que no hay duplicados.
  • fill: De tipo lógico, si es TRUE se completan las filas con blancos si es necesario.
  • strip.white: De tipo lógico, si es TRUE y se ha definido un separador, se eliminan los espacios.
  • blank.lines.skip: De tipo lógico, si es TRUE se ignoran las líneas en blanco.
  • comment.char:Indica un carácter a partir del cual no se lee la línea, interpretándose comoun comentario.
♦ write()

La función write permite escribir un vector o una matriz en un archivo. La matriz debe ser traspuesta para que coincida con la representación internade R.

write(x, file, ncolumns, append)

  • x:  Objeto (vector o matriz)
  • file: Nombre del archivo
  • ncolumns:Número de columnas
  • append:Valor lógico que indica si los datos deben añadirse a los existentes en el archivo.
 Paquete “foreign”

Este paquete permite leer y escribir archivos existentes de otros formatosde EpiInfo, Minitab, S, SAS, SPSS, Stata, Systat y Weka.  Algunas funciones que permite hacer con esta librería son:

◊ read.spss

Exporta una hoja de datos en formato .sav para poder abrirlo y trabajar con él en SPSS. Sus argumentos son:

read.spss(file, use.value.labels = TRUE, to.data.frame = FALSE,  max.value.labels = Inf, trim.factor.names = FALSE,  trim_values = TRUE, reencode = NA, use.missings = to.data.frame)

  • file: Cadena de caracteres, el nombre del archivo o la dirección donde está guardado
  • use.value.labels: Convierte variables con etiquetas de valor a factores con esos niveles
  • to.data.frame: Devuelve una hoja de datos
  • max.value.label: Si value.labels = TRUE, entonces convierte en factores las variables con etiquetas de valor, utilizando
  • trim.factor.names: Valor lógico, recorta los espacios finales de los niveles de factor
  • reencode: valor lógico, cadenas de caracteres se vuelven a codificar a la localización actual.

Otras funciones de este paquete son read.dbf, read.dta, read.octave, write.dbf, write.dta, ect. Para más información de este paquete consultar http://cran.r-project.org/web/packages/foreign/foreign.pdf

Nota: Ver también Lectura de datos desde ficheros externos con R en la Práctica 1 de la Guía R

Funciones en RStudio

Las funciones permiten realizar las diferentes acciones. Existen muchas funciones ya definidas, algunas incluso pueden ser modificadas, pero una de las capacidades más interesante es la posibilidad de crear nuevas funciones que realicen tareas que no estaban definidas en el momento de instalar el programa.Estas nuevas funciones se incorporan al lenguaje y, desde ese momento, se utilizan como las previamente existentes.

Una función se define asignando a un objeto la palabra function seguida de los argumentos, escritos entre paréntesis y separados por comas y seguida de la orden, entre llaves si son varias órdenes, que se quiera asignar.

Elementos de una función

NombreFuncion = funtion (argumentos función) {órdenes de la función  return(Valor que ha de devolver la función) }

  • NombreFuncion: Nombre que le daremos a la función
  • Argumentos función: Parámetros que debe de tener la función
  • órdenes de la función: Las líneas de órdenes que van a llevar a cabo que la función dé el resultado deseado. Pueden ser condicionales, operadores lógicos, bucles, ect.
  • return( ): Es el valor que devuelve la función. Normalmente suele ser una lista.
 Operadores de relación
  •  ! : Indica la negación
  •  &: Indica la conjunción
  •  | : Indica la disyunción
  • <,>, <= , >= , == son respectivamente los símbolos de menor, mayor, menor o igual, mayor o igual, e igual.
 Condicionales

if (condición) acción1 [else acción2]

Esta estructura es escalar, ya que si la condición está formada por más de un elemento, sólo considera el primero.  En R y RStudio la función para los condicionales es

  ifelse(parámetro1, parámetro2, parámetro3)

  • parámetro1 es la condición que se quiere avaluar
  • parámetro2 es la acción que se quiere hacer en el caso de que se cumpla la condición
  • parámetro3 es la acción se que realiza en el caso en que no se cumpla la condición.

> ejemplo = function(x){
+ suma = sum(x)
+ resultado = ifelse(suma < 100, TRUE, FALSE)
+ return(resultado)
+ }

> x = c(1:50)
> y = c(1:10)

> ejemplo(x)
[1] FALSE

> ejemplo(y)
[1] TRUE

Esta función devuelve el valor lógico TRUE si la suma de los elementos del vector es menor que 100 y FALSE en caso contrario.

 Bucles
  •  for: Contador (recorre cada elemento del vector o matriz y efectúa una operación con dicho elemento)
  • while: Condición (evalúa la condición y mientras esta es cierta se evalúa la acción)
  • repeat: Repetición (evalúa la acción indefinidamente)

> x  <-  c(1:5)
>  for (i in 1: length (x) ) {
+ cat ( ‘El cuadrado de ‘, i, ‘ es: ‘,  i^2,  ‘\n’ )
+ }

El cuadrado de 1 es: 1
El cuadrado de 2 es: 4
El cuadrado de 3 es: 9
El cuadrado de 4 es: 16
El cuadrado de 5 es: 25

Este ejemplo imprime los cuadrados del vector x formado por los elementos del 1 al 5.

> x = 1
> while (x  <= 10 ){
+ cat (‘El cuadrado de ‘, x, ‘ es: ‘,  x^2,  ‘\n’)
+ x = x + 1
+ }
El cuadrado de 1 es: 1
El cuadrado de 2 es: 4
El cuadrado de 3 es: 9
El cuadrado de 4 es: 16
El cuadrado de 5 es: 25
El cuadrado de 6 es: 36
El cuadrado de 7 es: 49
El cuadrado de 8 es: 64
El cuadrado de 9 es: 81
El cuadrado de 10 es: 100

 

¿POR QUÉ UTILIZAR RStudio?

  • Respeta la filosofía tradicional de la consola de R.
  • Muestra los objetos del workspace.
  • Muestra el historial de comandos.
  • Tiene un visor de gráficos que unifica entornos.
  • Integra un visor de paquetes instalados y/o cargados (library).
  • Permite ejecutar trozos de código con sólo marcarlo en los scripts.
  • Dispone de autocompletado de código.
  • Presentaciones en HTML5
  • Presentaciones con Sweave.
  • Facilidad para trabajar con varios proyectos a la vez.

Autores: Manuel Hidalgo Arjona y Ana María Lara Porras. Universidad de Granada. (2016)

139 comments for “Práctica 1

  1. 13 marzo, 2018 at 03:47

    Buenos dias, nos gusta tu blog , me gustaria colaborar contigo intercambiando de los servicios por hacer una recomendacion promocionando mis servicios, porfavor visite nuestra pagina web https://www.buyfollowers.pro {|un cordial saludo

  2. 5 abril, 2018 at 05:12

    I have been reviewin online more than 5 hours today for 1/2 Price Pro Calgary Painting & Práctica 1 | Estadística, yet I never found any interesting article like yours.
    It’s pretty worth enough for me. In my view, if all webmasters and bloggers made good content as you did,
    the net will be much more useful than ever before.

  3. 19 abril, 2018 at 00:21

    Great, thanks for sharing this blog.Really thank you! Cool.

  4. ildefonso Pineda
    31 mayo, 2018 at 00:09

    Excelente explicación con buenos ejemplos de como utilizar los fundamentos del lenguaje de programación R.

    • administrador
      8 julio, 2019 at 20:28

      gracias

  5. 8 diciembre, 2019 at 22:01

    ¡Genial! A pesar de haber muchas palabras lo he leído de un tirón y he bajado a la zona
    de comentarios directamente para agradecerte esta entrada, impresionante !

    Saludos

    • administrador
      16 enero, 2020 at 20:52

      gracias

  6. 7 enero, 2020 at 18:49

    Esta vez te has superado, de verdad genial artículo!!!
    Felicidades

    • administrador
      16 enero, 2020 at 20:31

      Gracias

  7. 30 enero, 2020 at 22:55

    Hey there I am so excited I found your blog page, I really found you by accident, while I was researching on Yahoo for something else, Anyhow I am here now and would just like to say cheers for a marvelous post and a all round interesting blog (I also love the theme/design), I don’t have time to browse it all at the moment but I have bookmarked it and also added your RSS feeds, so when I have time I will be back to read a lot more, Please do keep up the superb work.

  8. 8 febrero, 2020 at 12:12

    Un excelente texto y muy recomendable. Enhorabuena

    • administrador
      9 febrero, 2020 at 10:44

      Gracias

  9. 27 mayo, 2020 at 04:38

    Nice blog here! Also your website loads up very fast!
    What web host are you using? Can I get your affiliate link to your host?
    I wish my site loaded up as fast as yours lol

  10. 27 mayo, 2020 at 04:44

    Hellօ my l᧐ved one! I wish to say that this
    article is awesⲟme, nice written and come with
    almost all signifіcant infos. I’d like to look extra posts like this.

    Here is my site; college management system (http://www.binto.in)

  11. 27 mayo, 2020 at 04:50

    I was recommended this website by my cousin. I am not sure whether this post is written by him as no
    one else know such detailed about my problem. You are amazing!

    Thanks!

  12. 27 mayo, 2020 at 05:17

    What’s up, yup this paragraph is truly good and I have learned lot of things from it concerning blogging.
    thanks.

  13. 27 mayo, 2020 at 05:52

    Appreciate the recommendation. Let me try it out.

  14. 27 mayo, 2020 at 06:17

    It is appropriate time to make a few plans for the future and it’s time to be happy.
    I’ve read this post and if I may I want to recommend you few attention-grabbing things or
    tips. Maybe you can write next articles regarding this
    article. I wish to read more things approximately it!

  15. 27 mayo, 2020 at 06:35

    Heya i am for the primary time here. I found this board and
    I in finding It truly useful & it helped me out much.
    I hope to provide one thing again and help others such as
    you helped me.

  16. 27 mayo, 2020 at 06:53

    Pretty nice post. I just stumbled upon your blog and wished to
    say that I’ve really enjoyed browsing your blog posts.
    In any case I’ll be subscribing to your rss feed and I hope you write again soon!

  17. 27 mayo, 2020 at 07:01

    Excellent site you have here.. It’s hard to find excellent writing like yours nowadays.
    I really appreciate individuals like you! Take care!!

  18. 27 mayo, 2020 at 07:04

    Howdy, i read your blog occasionally and i own a
    similar one and i was just curious if you get a lot of spam
    remarks? If so how do you prevent it, any plugin or anything you can suggest?
    I get so much lately it’s driving me crazy so
    any help is very much appreciated.

  19. 27 mayo, 2020 at 07:14

    Amazing! Its genuinely amazing paragraph, I have
    got much clear idea concerning from this post.

  20. 27 mayo, 2020 at 07:37

    I do not even understand how I finished up here, but I thought this submit was once great.
    I don’t realize who you’re but definitely you’re going to a famous blogger should you aren’t
    already. Cheers!

  21. 27 mayo, 2020 at 07:59

    Everyone loves it when people get together and
    share opinions. Great website, stick with it!

  22. 27 mayo, 2020 at 08:15

    Hi, i think that i saw you visited my website so i came to “return the favor”.I’m trying
    to find things to enhance my website!I suppose its ok to use some of your ideas!!

  23. 27 mayo, 2020 at 08:19

    Thanks for your personal marvelous posting! I definitely enjoyed
    reading it, you may be a great author.I will remember to bookmark your blog and may come back in the
    future. I want to encourage you to continue your
    great writing, have a nice afternoon!

  24. 27 mayo, 2020 at 08:25

    Great goods from you, man. I have be aware your stuff prior to and you are just too magnificent.
    I really like what you’ve acquired right here, really like
    what you’re saying and the way by which you assert it.
    You make it entertaining and you continue to take
    care of to stay it sensible. I can not wait to read much more
    from you. This is really a great site.

  25. 27 mayo, 2020 at 08:44

    Hey there! Would you mind if I share your blog with my myspace group?
    There’s a lot of people that I think would really enjoy your content.
    Please let me know. Thanks

  26. 27 mayo, 2020 at 09:04

    Good answers in return of this matter with real arguments and describing the whole thing regarding that.

  27. 27 mayo, 2020 at 09:09

    Thanks for finally writing about > Práctica 1 | Estadística < Loved it!

  28. 27 mayo, 2020 at 09:43

    Usually I do not learn article on blogs, however I would like to say that
    this write-up very pressured me to check out and do it!
    Your writing taste has been amazed me. Thank you, quite nice article.

  29. 27 mayo, 2020 at 10:20

    We are a group of volunteers and starting a new scheme in our community.

    Your web site offered us with valuable info to work on. You’ve done
    an impressive job and our entire community will be thankful to you.

  30. 27 mayo, 2020 at 10:32

    Hello! This is kind of off topic but I need some advice from an established blog.
    Is it very difficult to set up your own blog? I’m not very techincal but I can figure things out pretty fast.
    I’m thinking about making my own but I’m not sure where to start.
    Do you have any ideas or suggestions? Many
    thanks

  31. 27 mayo, 2020 at 11:12

    There’s certainly a lot to know about this topic. I like all
    of the points you have made.

  32. 27 mayo, 2020 at 11:15

    My family members always say that I am wasting my time here at net, but I know I am getting experience
    everyday by reading such good articles. Used
    Semi Trucks – http://TrailerTodd.com

  33. 27 mayo, 2020 at 11:50

    I just like the valuable information you provide on your articles.
    I will bookmark your blog and take a look at again right here frequently.

    I am slightly certain I’ll learn lots of new stuff proper
    right here! Best of luck for the next!

  34. 27 mayo, 2020 at 12:11

    This is really interesting, You’re a very skilled
    blogger. I have joined your feed and look forward to seeking more of your wonderful
    post. Also, I’ve shared your web site in my social networks!

  35. 27 mayo, 2020 at 12:27

    It’s going to be finish of mine day, however before
    end I am reading this enormous post to increase my know-how.

  36. 27 mayo, 2020 at 13:33

    Thiis arricle iss genuiunely ɑ fastidiouhs oone іt assists
    neww nett visitors, whoo aare wishing foor blogging.

    Ηere iis mmy wrbpage Ready-Made WordPress websites

  37. 27 mayo, 2020 at 13:51

    Useful info. Lucky me I found your site by chance, and I am shocked why this coincidence
    did not took place earlier! I bookmarked it.

  38. IL
    27 mayo, 2020 at 14:30

    It’s very straightforward to find out any matter on web
    as compared too books, as I found this post at this web page.

    Feel free to visit my website –

  39. 27 mayo, 2020 at 14:56

    Hey there! I know this is kinda off topic however , I’d figured I’d ask.
    Would you be interested in exchanging links or maybe guest authoring a blog
    article or vice-versa? My site goes over a lot of the same topics as yours
    and I think we could greatly benefit from each other.
    If you happen to be interested feel free to shoot me an e-mail.

    I look forward to hearing from you! Awesome blog by the way!

  40. 27 mayo, 2020 at 15:25

    Hello, i think that i saw you visited my blog thus i came to “return the favor”.I’m attempting to find things to improve my web site!I suppose
    its ok to use a few of your ideas!!

  41. 27 mayo, 2020 at 15:37

    I am sure this piece of writing has touched all the internet visitors, its really really good paragraph on building up new website.

  42. 27 mayo, 2020 at 16:01

    Greaat weblog here! Alsoo your site so much up very fast!
    What web host are you the uxage of? Can I get your affiliate link for your host?
    I want my website loaded up as quickly as yours lol

  43. 27 mayo, 2020 at 16:21

    Magnificent goods from you, man. I’ve understand your stuff previous to and you are just extremely magnificent.
    I actually like what you’ve acquired here, certainly like what you’re stating and the way in which you say it.
    You make it enjoyable and you still care for to keep it smart.
    I cant wait to read much more from you. This is actually a terrific website.

  44. 27 mayo, 2020 at 16:39

    Your style is so unique in comparison to other folks I have read stuff from.
    Thanks for posting when you have the opportunity, Guess I will just book mark this web site.

  45. 27 mayo, 2020 at 16:57

    My spouse and I absolutely love your blog and find almost all of your
    post’s to be just what I’m looking for. Do you offer guest
    writers to write content in your case? I wouldn’t mind composing a post or elaborating on some of the subjects you write related to here.
    Again, awesome weblog!

  46. 27 mayo, 2020 at 17:11

    I’m extremely impressed along with your writing talents and also
    with the format on your weblog. Is that this a paid
    theme or did you customize it yourself? Anyway
    stay up the nice high quality writing, it’s rare
    to peer a nice weblog like this one nowadays..

  47. 27 mayo, 2020 at 17:39

    I blog often and I really thank you for your content.
    This great article has really peaked my interest. I am going to bookmark your website and keep
    checking for new details about once a week. I opted
    in for your Feed too.

  48. 27 mayo, 2020 at 17:42

    I am really happy to glance at this weblog
    posts which consists of lots of useful information, thanks
    for providing these information.

  49. 27 mayo, 2020 at 17:52

    Hey there would you mind stating which blog platform you’re using?
    I’m looking to start my own blog soon but I’m having a tough time
    making a decision between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your layout seems different then most blogs and I’m looking for something completely unique.
    P.S Apologies for getting off-topic but I had to ask!

  50. 27 mayo, 2020 at 18:25

    Thanks for another wonderful post. Where else may just
    anyone get that kind of info in such an ideal method of writing?
    I’ve a presentation next week, and I’m on the look for such information.

  51. 27 mayo, 2020 at 19:12

    Genial post, info super precisa y de gran entendimiento,
    andaba buscando más información sobre desarrollo de paginas web y di con este blog,
    gracias por la ayuda.desarrollo de paginas web

  52. 27 mayo, 2020 at 19:28

    My spouse and I absolutely love your blog and find
    nearly all of your post’s to be just what I’m looking for.

    Would you offer guest writers to write content for
    you personally? I wouldn’t mind creating a post or elaborating on a few of the subjects you write with regards
    to here. Again, awesome web site!

  53. 27 mayo, 2020 at 19:49

    Have you ever thought about adding a little bit more
    than just your articles? I mean, what you
    say is fundamental and all. But think about if
    you added some great graphics or video clips to give your posts more,
    “pop”! Your content is excellent but with pics and clips, this site could certainly be one of the best in its field.

    Awesome blog!

  54. 27 mayo, 2020 at 20:31

    It’s going to be finish of mine day, but before
    ending I am reading this wonderful post to increase my experience.

  55. 27 mayo, 2020 at 20:31

    Excellent, what a webpage it is! This weblog provides useful facts to us, keep it up.

  56. 27 mayo, 2020 at 21:04

    I absolutely love your blog and find almost all of your
    post’s to be exactly what I’m looking for. Does one offer guest writers
    to write content for you? I wouldn’t mind writing
    a post or elaborating on most of the subjects you write with
    regards to here. Again, awesome blog!

  57. 27 mayo, 2020 at 21:21

    Hello Dear, are you really visiting this website daily, if so
    afterward you will without doubt obtain good
    experience.

  58. 27 mayo, 2020 at 21:48

    Great article! We are linking to this great post on our
    website. Keep up the good writing.

  59. 29 mayo, 2020 at 17:14

    Hello there, just became alert to your blog through Google,
    and found that it is truly informative. I’m going to watch
    out for brussels. I’ll be grateful if you continue this in future.
    A lot of people will be benefited from your writing.
    Cheers!

  60. 29 mayo, 2020 at 17:21

    Admiring the time and effort you put into your blog and in depth information you offer.

    It’s nice to come across a blog every once in a while
    that isn’t the same out of date rehashed material. Great read!
    I’ve saved your site and I’m adding your RSS feeds to my Google account.

  61. 29 mayo, 2020 at 18:26

    I every time used to study paragraph in news papers but now as I am a user of internet therefore from now I am using net for posts, thanks to web.

  62. 29 mayo, 2020 at 18:43

    I do trust all of the ideas you’ve presented to your post.
    They are very convincing and can certainly work. Still, the posts
    are very short for beginners. May you please extend them
    a bit from subsequent time? Thank you for the post.

  63. 29 mayo, 2020 at 18:43

    I was recommended this blog by my cousin. I’m not sure whether this post is written by him as nobody else know such detailed
    about my trouble. You are wonderful! Thanks!

  64. 29 mayo, 2020 at 18:51

    It’s a shame you don’t have a donate button! I’d certainly donate
    to this outstanding blog! I guess for now i’ll settle
    for book-marking and adding your RSS feed to my Google account.
    I look forward to fresh updates and will share this blog with my Facebook group.
    Chat soon!

  65. 29 mayo, 2020 at 19:09

    Greetings from Los angeles! I’m bored to tears at work so I decided to browse your site on my iphone during lunch break.
    I love the information you present here and can’t wait to take a look when I get home.
    I’m amazed at how quick your blog loaded on my cell phone
    .. I’m not even using WIFI, just 3G .. Anyhow, good blog!

  66. 29 mayo, 2020 at 19:12

    Woah! I’m really loving the template/theme of this site.

    It’s simple, yet effective. A lot of times it’s challenging to
    get that “perfect balance” between user friendliness and appearance.
    I must say you have done a amazing job with this.
    In addition, the blog loads super quick for me on Safari.

    Superb Blog!

  67. 29 mayo, 2020 at 19:13

    Hi there very nice site!! Man .. Beautiful .. Wonderful ..
    I’ll bookmark your web site and take the feeds also?
    I’m satisfied to search out a lot of useful information right here within the put up,
    we’d like work out more techniques on this regard, thanks for sharing.
    . . . . .

  68. 29 mayo, 2020 at 19:25

    Ԍood post. Ι absolutеly love tһis website. Stick wіth іt!

    Cheeck ouut my hⲟmepage … Order a prebuilt Shopify store

  69. 29 mayo, 2020 at 20:26

    Way cool! Some very valid points! I appreciate you writing this write-up
    plus the rest of the site is very good.

  70. 29 mayo, 2020 at 20:28

    Your means of describing the whole thing in this post is genuinely nice, every one be capable
    of simply know it, Thanks a lot.

  71. 29 mayo, 2020 at 20:44

    What’s up, this weekend is nice designed for me, because this occasion i am reading this fantastic informative post here at
    my residence.

  72. 29 mayo, 2020 at 21:03

    I must thank you for the efforts you’ve put in penning this blog.
    I really hope to see the same high-grade blog posts by you in the future as well.

    In truth, your creative writing abilities has encouraged me to
    get my very own website now 😉

  73. 29 mayo, 2020 at 21:30

    Excellent blog here! Also your website loads up fast!
    What host are you using? Can I get your affiliate link to your host?
    I wish my web site loaded up as quickly as yours lol

  74. 29 mayo, 2020 at 22:05

    I blog quite often and I really appreciate your content.
    This article has really peaked my interest. I will take a note of your site and keep checking for new
    information about once per week. I subscribed to your RSS feed as well.

  75. 29 mayo, 2020 at 22:25

    Hello, this weekend is good designed for me,
    as this point in time i am reading this great educational paragraph here at my house.

  76. 29 mayo, 2020 at 22:38

    Excellent post however , I was wondering if you could
    write a litte more on this subject? I’d be very grateful if you could elaborate a little bit further.

    Thank you!

  77. 29 mayo, 2020 at 23:03

    This post is in fact a good one it helps new the web visitors,
    who are wishing in favor of blogging.
    Growth hormone letrozole (http://bbs.neteasegamer.jp/home.php?mod=space&uid=554557&do=profile&from=space)
    oxymetholone price

  78. 3 junio, 2020 at 16:39

    Wow that was odd. I just wrote an extremely long comment but
    after I clicked submit my comment didn’t appear. Grrrr…

    well I’m not writing all that over again. Regardless, just wanted to say fantastic blog!

  79. 3 junio, 2020 at 16:50

    I will right away grasp your rss as I can’t find your email subscription hyperlink or e-newsletter service.
    Do you’ve any? Kindly allow me realize so
    that I may subscribe. Thanks.

  80. 3 junio, 2020 at 16:51

    I like the helpful info you provide in your articles.
    I will bookmark your weblog and check again here frequently.
    I am quite certain I will learn lots of new stuff right here!

    Good luck for the next!

  81. 3 junio, 2020 at 17:08

    Peculiar article, exactly what I needed.

  82. 3 junio, 2020 at 17:37

    Attractive element of content. I simply stumbled upon your blog and in accession capital to assert that
    I acquire in fact loved account your weblog posts.
    Any way I will be subscribing on your augment or even I achievement you access persistently quickly.

  83. 3 junio, 2020 at 17:38

    I do believe all of the ideas you have offered on your
    post. They are really convincing and can certainly work.
    Still, the posts are too short for beginners. Could you please extend them a little from subsequent time?
    Thank you for the post.

  84. 3 junio, 2020 at 19:45

    I am impressed with this internet site, real I am a big fan.

  85. 3 junio, 2020 at 20:07

    Thank you, I’ve recently been looking for information approximately this subject for a long
    time and yours is the greatest I have discovered till now.
    But, what in regards to the bottom line? Are
    you certain about the source?

  86. 3 junio, 2020 at 20:37

    You need to be a part of a contest for one of the highest
    quality websites online. I am going to recommend this site!

  87. 3 junio, 2020 at 21:03

    What’s up colleagues, its enormous article concerning teachingand entirely defined,
    keep it up all the time.

  88. 3 junio, 2020 at 21:26

    I’m gone to inform my little brother, that he should also go
    to see this blog on regular basis to obtain updated from most
    up-to-date gossip.

  89. 3 junio, 2020 at 21:59

    Hey very nice blog!

  90. 3 junio, 2020 at 22:07

    You need to be a part of a contest for one of the best blogs on the web.

    I most certainly will highly recommend this site!

  91. 3 junio, 2020 at 22:12

    I will right away clutch your rss feed as I can not find your e-mail subscription hyperlink or e-newsletter service.
    Do you’ve any? Kindly permit me recognise in order that I could subscribe.
    Thanks.

  92. 3 junio, 2020 at 23:04

    Good info. Lucky me I ran across your website by chance (stumbleupon).
    I’ve saved as a favorite for later!

  93. 3 junio, 2020 at 23:41

    I’m gone to tell my little brother, that he should also pay a visit this webpage on regular basis to get updated from most
    up-to-date news.

  94. 3 junio, 2020 at 23:53

    Aw, this was an incredibly nice post. Taking a few minutes and actual effort to make a really
    good article… but what can I say… I hesitate a
    whole lot and don’t seem to get anything done.

  95. 4 junio, 2020 at 01:14

    Hey there are using WordPress for your blog platform?
    I’m new to the blog world but I’m trying to get started and set up my own.
    Do you need any coding knowledge to make your own blog?
    Any help would be greatly appreciated!

  96. 4 junio, 2020 at 01:36

    These are truly impressive ideas in about blogging.
    You have touched some pleasant things here. Any way keep
    up wrinting.

  97. 4 junio, 2020 at 01:50

    It’s remarkable to go to see this site and reading the views of all mates on the topic of this
    paragraph, while I am also eager of getting familiarity.

  98. 4 junio, 2020 at 03:06

    I want looking through and I conceive this website got some genuinely useful stuff on it!

  99. 4 junio, 2020 at 04:12

    I think this is one of the most significant information for me.
    And i am glad reading your article. But should remark on some
    general things, The site style is wonderful, the articles is really excellent
    : D. Good job, cheers

  100. 4 junio, 2020 at 04:52

    Hello! Someone in my Facebook group shared this site with us so I came to give
    it a look. I’m definitely loving the information.
    I’m book-marking and will be tweeting this to my followers!
    Fantastic blog and terrific style and design.

  101. 4 junio, 2020 at 05:20

    I am sure this post has touched all the internet viewers, its really really good paragraph
    on building up new blog.

  102. 4 junio, 2020 at 05:40

    Hi there to every body, it’s my first go to see of this website; this blog includes awesome
    and genuinely good stuff designed for visitors.

  103. 4 junio, 2020 at 05:58

    I must thank you for the efforts you have put in penning this website.
    I am hoping to view the same high-grade content by you
    in the future as well. In fact, your creative writing abilities has motivated me to get
    my own, personal blog now 😉

  104. 4 junio, 2020 at 06:11

    It’s a pity you don’t have a donate button! I’d without a doubt donate
    to this fantastic blog! I suppose for now i’ll settle for bookmarking and adding your RSS
    feed to my Google account. I look forward to fresh updates and will share this website with my Facebook group.
    Chat soon!

  105. 4 junio, 2020 at 06:56

    It’s hard to find experienced people for this topic, however,
    you sound like you know what you’re talking about! Thanks

  106. 4 junio, 2020 at 07:07

    You actually make it seem really easy along with
    your presentation however I in finding this matter
    to be really one thing that I think I’d by no
    means understand. It sort of feels too complex and extremely large for me.
    I am looking ahead for your next put up, I will try to get the hang of it!

  107. 4 junio, 2020 at 07:07

    Its like you learn my thoughts! You seem to understand so much about this, such as you wrote the guide
    in it or something. I feel that you simply could
    do with some p.c. to power the message house a bit, however other than that,
    that is fantastic blog. An excellent read. I will certainly
    be back.

  108. 4 junio, 2020 at 07:36

    Way cool! Some extremely valid points! I appreciate you penning this write-up plus
    the rest of the website is extremely good.

  109. 4 junio, 2020 at 08:50

    These are genuinely fantastic ideas in on the topic of blogging.
    You have touched some fastidious factors here.
    Any way keep up wrinting.

  110. 4 junio, 2020 at 09:26

    Greate article. Keep writing such kind of info on your page.
    Im really impressed by your blog.
    Hey there, You have performed an incredible job. I’ll definitely digg it
    and in my view suggest to my friends. I am confident they will be
    benefited from this site.

  111. 4 junio, 2020 at 09:42

    Good day! This is my first visit to your blog! We
    are a group of volunteers and starting a new initiative in a community in the same niche.
    Your blog provided us valuable information to work on. You have done a
    outstanding job!

  112. 4 junio, 2020 at 11:03

    Hello! I could have sworn I’ve been to this blog before
    but after browsing through some of the post I realized
    it’s new to me. Anyhow, I’m definitely delighted I found it and I’ll be bookmarking and checking back frequently!

  113. 4 junio, 2020 at 11:06

    Hi, I do believe this is a great site. I stumbledupon it 😉 I
    will come back yet again since I book-marked it. Money and
    freedom is the greatest way to change, may you be rich and continue to help others.

  114. 4 junio, 2020 at 11:16

    This blog was… how do I say it? Relevant!! Finally I’ve found something which helped me.
    Kudos!

  115. 4 junio, 2020 at 11:18

    great issues altogether, you just won a new reader.
    What could you suggest in regards to your submit that you made some days ago?
    Any positive?

  116. 4 junio, 2020 at 11:29

    Excellent blog here! Also your website loads up fast!
    What web host are you using? Can I get your affiliate link to your host?
    I wish my website loaded up as quickly as yours lol

  117. 4 junio, 2020 at 11:34

    Can you tell us more about this? I’d want to find out some additional information.

  118. 4 junio, 2020 at 11:44

    Asking questions are actually nice thing if you are not understanding something
    entirely, except this post gives nice understanding yet.

  119. 4 junio, 2020 at 11:52

    Way cool! Some extremely valid points! I appreciate you writing this article and also the rest of the site is extremely good.

  120. 4 junio, 2020 at 11:59

    Hi, i feel that i noticed you visited my website thus i got here to return the favor?.I
    am attempting to to find issues to enhance my web site!I assume its adequate
    to make use of a few of your ideas!!

  121. 4 junio, 2020 at 12:23

    It’s hard to find well-informed people in this particular subject,
    however, you sound like you know what you’re talking about!
    Thanks

  122. 4 junio, 2020 at 12:43

    I used to be able to find good info from your blog articles.

  123. 4 junio, 2020 at 12:52

    I always emailed this web site post page to all my
    contacts, as if like to read it after that my friends will too.

  124. 4 junio, 2020 at 13:42

    Pretty great post. I simply stumbled upon your weblog and wanted to say that I have really enjoyed browsing your weblog posts.

    In any case I will be subscribing in your rss feed and I am
    hoping you write once more very soon!

  125. 4 junio, 2020 at 14:48

    You can definitely see your enthusiasm within the
    work you write. The sector hopes for even more passionate writers
    like you who aren’t afraid to mention how they believe.
    Always follow your heart.

  126. 4 junio, 2020 at 14:50

    You need to be a part of a contest for one of the best sites online.
    I’m going to recommend this blog!

  127. 4 junio, 2020 at 16:33

    Faѕtidious response in rеturn of this query with genuine arguments and explaining all оncerning thаt.

  128. 4 junio, 2020 at 16:40

    Іt’s remarkable for mee to have a web site, which is usefᥙl designed for my knoᴡ-how.
    thanks admin

  129. 4 junio, 2020 at 16:55

    After looking into a number of the blog posts on your
    site, I seriously appreciate your technique of writing a blog.
    I saved as a favorite it to my bookmark webpage list and will be checking back soon. Take a
    look at my web site too and tell me what you think.

  130. 4 junio, 2020 at 17:41

    I am actually happy to read this web site posts which contains
    tons of helpful facts, thanks for providing these kinds of information.

  131. 4 junio, 2020 at 17:55

    I all the time used to read post in news papers but now as I am a user of
    web therefore from now I am using net for articles or reviews,
    thanks to web.

  132. 4 junio, 2020 at 18:05

    Greetings! I know this is kinda off topic but I’d
    figured I’d ask. Would you be interested in trading links or maybe
    guest writing a blog post or vice-versa? My blog goes
    over a lot of the same topics as yours and I think we could
    greatly benefit from each other. If you are interested feel free to send me an email.
    I look forward to hearing from you! Awesome blog by the way!

  133. 4 junio, 2020 at 18:56

    Hello to all, how is all, I think every one
    is getting more from this web site, and your views are pleasant in favor of
    new visitors.

  134. 4 junio, 2020 at 19:15

    Every weekend i used to pay a quick visit this web page, for the reason that i want
    enjoyment, as this this site conations really good funny material too.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *