Introducción a R básico

R R Basic Data Science

Es una introducción al manejo y uso básico a la plataforma de R. Este software es muy popular e increíblemente útil para las personas que trabajan como científicos de datos o en empresas.

Author

Affiliation

Franklin Santos ORCID ID

Agritech Bolivia

Published

Oct. 4, 2021

Citation

Santos, 2021

R básico

R es muy popular e increíblemente útil para las personas que trabajan como científicos de datos o en empresas. Pero también puede usar R para cosas más simples, como crear un gráfico agradable o hacer un cálculo rápido. Comenzar a utilizar R es bastante sencillo.

Introducción a R

El lenguaje informático estadístico más potente del planeta. – Norman Nie, fundador de SPSS

R es un lenguaje de programación y un ambiente para trabajar con datos. Es muy utilizado por estadísticos y científicos de datos por su sintaxis de código expresivo, abundantes paquetes y herramientas externas y funciona en todos los sistemas operativos principales.

Es la navaja suiza para el análisis de datos y la computación estadística (¡y también puedes hacer algunos gráficos bonitos!). El lenguaje R se puede ampliar fácilmente con paquetes escritos por una gran y creciente comunidad de desarrolladores de todo el mundo. Puede encontrarlo prácticamente en cualquier lugar: lo utilizan instituciones académicas, empresas emergentes, corporaciones internacionales y muchos más.

¿Por qué usar R?

R es un lenguaje popular para resolver problemas de análisis de datos y también lo usan personas que tradicionalmente no se consideran programadores. Al crear gráficos y visualizaciones con R, descubrirá que tiene muchas más posibilidades creativas que las aplicaciones gráficas, como Excel.

Estas son algunas de las características por las que R es más famoso:

Visualización: Crear gráficos y visualizaciones hermosos, es una de sus mayores fortalezas. El lenguaje central ya proporciona un amplio conjunto de herramientas utilizadas para trazar gráficos y para todo tipo de gráficos. El cielo es el límite.

Reproducibilidad: a diferencia del software de hoja de cálculo, el código R no está acoplado a conjuntos de datos específicos y puede reutilizarse fácilmente en diferentes proyectos, incluso cuando excede más de 1 millón de filas. Cree fácilmente informes reutilizables y genere automáticamente nuevas versiones a medida que cambien los datos.

Modelamiento avanzado: R proporciona la base de código más grande y poderosa para el análisis de datos en el mundo. La riqueza y profundidad de los modelos estadísticos disponibles no tiene paralelo y crece día a día, gracias a la gran comunidad de desarrolladores y colaboradores de paquetes de código abierto.

Automatización: el código R también se puede utilizar para automatizar informes o para realizar transformación de datos y cálculos de modelos. También se puede integrar en flujos de trabajo de producción automatizados, ambientes informáticos en la nube y sistemas de bases de datos modernos.

R en buena compañía

R es el estándar de facto para la computación estadística en instituciones académicas y empresas de todo el mundo. Su gran soporte para la programación alfabetizada (código que se puede combinar con texto legible por humanos) permite a los investigadores y científicos de datos crear informes listos para publicación que son fáciles de reproducir para los revisores.

El lenguaje ha tenido una amplia adopción en varias industrias; vea algunos ejemplos a continuación:

Tecnologías de la información

Farmacias: Merck, Genentech (Roche), Novartis, Pfizer Periódicos: The Economist, The New York Times, Financial Times

Finanzas

Bloques de construcción

El lenguaje R consta de tres bloques fundamentales de construcción necesarios para realizar sus primeros pasos en el ambiente R:

Los objetos más importantes en R son vectores. Forman la base de (casi) todas las estructuras de datos de R. La mayor parte del poder y la expresividad de R se deriva del hecho de que es un lenguaje orientado a vectores. Las funciones y los operadores pueden definirse fácilmente y trabajar directamente en vectores para calcular resultados.

La mayor fortaleza de R es su flexibilidad para integrar fácilmente nuevos algoritmos y construir interfaces a su alrededor. El sistema de paquetes R permite a los colaboradores integrar muchos modelos y bibliotecas externas de código abierto. Su repositorio principal de paquetes llamado “CRAN” aloja estos paquetes y permite a los usuarios instalarlos y cargarlos fácilmente en sus ambientes.

Combinar valores en un vector

R siempre crea listas de valores, incluso cuando solo hay un valor en una lista. Estas listas se denominan vectores y facilitan mucho el trabajo con datos.

1:100
c(1, 2, 3, 4)
c("abc", "def", "ghi")
c(TRUE, FALSE, TRUE)

Introducción a los vectores

Un vector es una colección de elementos del mismo tipo y la estructura de datos más básica en R. Por ejemplo, un vector podría contener los cuatro números 1, 3, 2 y 5. Otro vector podría formarse con las tres cadenas de texto "Bienvenido","Hi" y "Hola". Estos diferentes tipos de valores (números, texto) se denominan tipos de datos.

Un valor único también se trata como un vector, un vector con un solo elemento. Como veremos a lo largo del curso, este concepto hace que R sea muy especial. Podemos manipular los vectores y sus valores a través de muchas operaciones proporcionadas por R.

Una ventaja clave de los vectores es que podemos aplicar una operación (por ejemplo, una multiplicación) a todos sus valores a la vez en lugar de pasar por cada elemento individualmente. Esto se llama vectorización.

Tipos de vectores

Los vectores solo pueden contener elementos del mismo tipo de datos. En este libro trabajaremos con los siguientes tres tipos de datos principales:

Los valores numéricos son números. Aunque pueden dividirse aún más en números enteros (enteros) y números con decimales (dobles), R convierte automáticamente entre estos subtipos si es necesario. Por lo tanto, colectivamente nos referiremos a ellos como valores numéricos.

Los valores de caracteres contienen contenido textual. Estos pueden ser letras, símbolos, espacios y números también. Deben estar entre comillas: comillas simples '___' o comillas dobles "___".

Los valores lógicos pueden ser TRUE o FALSE. A menudo también se les conoce como valores booleanos o binarios. Debido a que un valor lógico solo puede ser TRUE o FALSE, se usan con mayor frecuencia para responder preguntas simples como “¿Es 1 mayor que 2?” o “¿Son más de las 3 en punto?”. Este tipo de preguntas solo necesitan respuestas como “Sí” (TRUE) o “No” (FALSE). Es importante destacar que en R los valores lógicos distinguen entre mayúsculas y minúsculas, lo que significa que deben escribirse con mayúsculas.

Creando una secuencia de números

En R, incluso un solo valor se considera un vector. Crear un vector de un elemento es tan simple como escribir su valor:

Código de entrada:
4
Resultado:
[1] 4

Para crear una secuencia de valores numéricos, podemos usar el operador : que toma dos números y genera un vector de todos los números enteros en ese rango:

Código de entrada:
2:11
Resultado:
 [1]  2  3  4  5  6  7  8  9 10 11

El operador : crea un vector desde el número en el lado izquierdo hasta el número en el lado derecho. Por lo tanto, el orden de los números es importante. Si definimos el ejemplo anterior al revés, obtenemos un vector de números descendentes, en lugar de ascendentes:

Código de entrada:
11:2
Resultado:
 [1] 11 10  9  8  7  6  5  4  3  2

El operador : es útil cuando necesitamos un vector de cada número entero en un rango dado. Sin embargo, si necesitamos un vector donde los números no sean lineales, necesitamos algo diferente.

Concatenando valores numéricos a un vector

Podemos combinar múltiples números en un solo vector usando la función concatenar c() que une elementos entre las llaves redondas en una cadena o mas conocido como paréntesis. Múltiples elementos deben estar separados por comas.

Para crear nuestro primer vector con siete números diferentes, podemos usar la función de concatenación c() de esta manera:

Código de entrada:
c(7, 4, 2, 5, 5, 22, 1)  
Resultado:
[1]  7  4  2  5  5 22  1

Tenga en cuenta que el signo “[1]” antes de la salida anterior es agregado por R, y siempre se agrega automáticamente al imprimir vectores. Si sus vectores se hacen más grandes, verá más de estos prefijos. Solo sepa que R solo los agrega con fines informativos, y que están allí para ayudarlo mientras codifica. No son parte del vector en sí.

Puede ver esto más claramente, cuando la salida se extiende sobre varias líneas:

Código de entrada:
1:60
Resultado:
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22
[23] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
[45] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Creando vectores de caracteres

Para crear un vector de caracteres de un elemento, todo lo que tenemos que hacer es escribir el texto. Recuerde que debemos usar comillas (" ") alrededor de los valores de los caracteres:

Código de entrada:
"golden retriever"
Resultado:
[1] "golden retriever"

Para crear un vector de caracteres de múltiples elementos, podemos usar nuevamente la función concatenar c(). Esta vez lo usaremos con caracteres en lugar de números:

Código de entrada:
c("golden retriever", "labrador is a family dog", "beagle")
Resultado:
[1] "golden retriever"         "labrador is a family dog"
[3] "beagle"                  

Creando vectores lógicos

Los vectores lógicos solo pueden contener los valores TRUE y FALSE. Para crear un vector lógico con un solo valor, escriba uno de los valores válidos TRUE o FALSE. Recuerde que deben escribirse con letras mayúsculas:

Código de entrada:
TRUE
Resultado:
[1] TRUE

De manera similar a otros tipos de vectores, podemos usar la función concatenar c() para crear un vector lógico de múltiples elementos:

Código de entrada:
c(TRUE, FALSE, TRUE, FALSE, TRUE)  
Resultado:
[1]  TRUE FALSE  TRUE FALSE  TRUE

Crea variables a través de asignaciones

Por lo general, desea almacenar vectores y otros objetos en variables para poder trabajar con ellos más fácilmente. Las variables son como un cuadro con un nombre. A continuación, puede consultar el nombre para ver qué se almacena en el interior.

Asignando variables

Por lo general, queremos usar objetos como vectores más de una vez. Para evitar la molestia de volver a escribirlos y recrearlos todo el tiempo, nos gustaría guardarlos en algún lugar y reutilizarlos más tarde.

Para hacer esto, podemos asignarlos a un nombre de variable. R usa el operador de flecha especial <- para asignar valores a una variable. La flecha es simplemente la combinación de un carácter menor que (<) y un signo menos (-).

Veamos un ejemplo, en el que asignamos un vector numérico a una variable llamada numbers:

Código de entrada:
numbers <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)  

Ahora podemos usar el nombre de la variable a continuación para ver su contenido:

numbers
Resultado:
[1] 1 2 3 4 5 6 7 8 9

Tenga en cuenta que cuando asignamos algo a una variable que ya existe, se sobrescribe. Todos los contenidos anteriores se eliminan automáticamente:

Código de entrada:
numbers <- c(10, 11, 12, 13)
numbers
Resultado:
[1] 10 11 12 13

Una vez que haya definido una variable, puede usarla tal como usaría el vector subyacente. En el siguiente ejemplo creamos dos vectores numéricos y los asignamos a las variables low y high. Luego, usamos estas variables y concatenamos los dos vectores en uno solo y los asignamos una variable denominada sequence. Finalmente llamamos a la variable sequence e inspeccionamos su contenido:

Código de entrada:
low <- c(1, 2, 3)
high <- c(4, 5, 6)
sequence <- c(low, high)
sequence
Resultado:
[1] 1 2 3 4 5 6

Como puede ver, los vectores 1, 2, 3 y 4, 5, 6 almacenados en las variables low y high, se combinaron en un solo vector que ahora es el contenido de la variable sequence.

Reglas de nomenclatura

Hay algunas reglas que debemos tener en cuenta al crear variables.

Reglas en la asignación de variables

Utilice operadores básicos

R no solo es bueno para analizar y visualizar datos, sino también para resolver problemas matemáticos o comparar datos entre sí. Además, puede usarlo como una calculadora de bolsillo.

Usando R como calculadora de bolsillo

___ + ___
___ - ___
___ / ___
___ * ___

R es un lenguaje de programación desarrollado principalmente para estadísticas y análisis de datos. Dentro de R puede usar operadores matemáticos tal como lo haría en una calculadora. Por ejemplo, puede sumar + y restar - números entre sí:

Código de entrada:
5 + 5
Resultado:
[1] 10
7 - 3.5
[1] 3.5

Del mismo modo, puede multiplicar * o dividir / números:

5 * 7  
[1] 35
8 / 4  
[1] 2

Puedes tomar el poder de un número usando el signo ^ para potenciar o elevar:

2^3
[1] 8

De acuerdo con las reglas de las matemáticas, puede usar corchetes para especificar el orden de evaluación en tareas más complejas:

5 * (2 + 4 / 2)
[1] 20

Aplicación de operadoras aritméticas en vectores

___ + ___
___ - ___
___ / ___
___ * ___

Las operaciones, como la suma, la resta, la multiplicación y la división se denominan operaciones aritméticas. No solo pueden operar con valores únicos sino también con vectores. Si usa operaciones aritméticas en vectores, la operación se realiza en cada número individual del primer vector y el número individual en la misma posición del segundo vector.

En el siguiente ejemplo creamos dos vectores numéricos y los asignamos a las variables a y b. Luego los agregamos juntos:

a <- c(1, 3, 6, 9, 12, 15)
b <- c(2, 4, 6, 8, 10, 12)
a + b
[1]  3  7 12 17 22 27

Como muestra la salida, los primeros elementos de los dos vectores se agregaron juntos y dieron como resultado 1 + 2 = 3. Los segundos elementos 3 + 4 = 7, los terceros elementos 6 + 6 = 12 y así sucesivamente.

Podemos aplicar cualquier otra operación aritmética de manera similar:

a <- c(22, 10, 7, 3, 14, 4)
b <- c(4, 5, 2, 6, 14, 8)
a / b
[1] 5.5 2.0 3.5 0.5 1.0 0.5

Usando el mismo principio, el primer elemento del resultado es 22 / 4 = 5.5, el segundo es 10 / 5 = 2 y así sucesivamente.

Usar operadores relacionales

___ == ___
___ != ___
___ < ___
___ > ___
___ <= ___
___ >= ___

Los operadores relacionales se utilizan para comparar dos valores. La salida de estas operaciones siempre es un valor lógico TRUE o FALSE. Distinguimos seis tipos diferentes de operadores relacionales, como veremos a continuación.

Los operadores igual == y no igual != comprueban si dos valores son iguales (o no):

2 == 1 + 1
[1] TRUE
2 != 3
[1] TRUE

Los operadores menor que < y mayor que > verifican si un valor es menor o mayor que otro:

2 > 4
[1] FALSE
2 < 4
[1] TRUE

Los operadores menor que o igual a <= y mayor que o igual a >= combinan la verificación de igualdad con la comparación menor o mayor que:

2 >= 2
[1] TRUE
2 <= 3
[1] TRUE

Todos estos operadores pueden usarse en vectores con uno o más elementos también. En ese caso, cada elemento de un vector se compara con el elemento en la misma posición en el otro vector, al igual que con los operadores matemáticos:

vector1 <- c(3, 5, 2, 7, 4, 2)
vector2 <- c(2, 6, 3, 3, 4, 1)
vector1 > vector2
[1]  TRUE FALSE FALSE  TRUE FALSE  TRUE

Por lo tanto, el resultado de este ejemplo se basa en las comparaciones 3 > 2, 5 > 6, 2 > 3 y así sucesivamente.

Usando operadores lógicos

___ & ___
___ | ___

El operador AND & se usa para verificar si varias declaraciones son TRUE al mismo tiempo. Usando un ejemplo simple, podríamos verificar si 3 es mayor que 1 y al mismo tiempo si 4 es menor que 2:

3 > 1 & 4 < 2
[1] FALSE

De hecho, 3 es mayor que 1, pero 4 no es menor que 2. Dado que una de las declaraciones es FALSE, el resultado de esta evaluación conjunta también es FALSE.

El operador OR | solo verifica si alguna de las declaraciones es TRUE.

3 > 1 | 4 < 2
[1] TRUE

En una declaración OR, no todos los elementos tienen que ser TRUE. Como 3 es mayor que 1, el resultado de esta evaluación también es TRUE.

El operador ! se utiliza para la negación de valores lógicos, lo que significa que convierte los valores TRUE en FALSE y los valores FALSE en TRUE. Si tenemos una declaración que resulta en un valor lógico TRUE o FALSE, podemos negar el resultado aplicando el operador ! en él. En el siguiente ejemplo verificamos si 3 es mayor que 2 y luego negamos el resultado de esta comparación:

!3 > 2
[1] FALSE

Los operadores lógicos, al igual que los operadores aritméticos y relacionales, también se pueden usar en vectores más largos. En el siguiente ejemplo usamos tres vectores diferentes a, b y c e intentamos evaluar múltiples relaciones en combinación.

a <- c(1, 21, 3, 4)
b <- c(4, 2, 5, 3)
c <- c(3, 23, 5, 3)

a>b & b<c
[1] FALSE  TRUE FALSE FALSE

Primero, ambas comparaciones relacionales a > b y b < c se evalúan y dan como resultado dos vectores lógicos. Por lo tanto, esencialmente comparamos los siguientes dos vectores:

c(FALSE, TRUE, FALSE, TRUE) & c(FALSE, TRUE, FALSE, FALSE)
[1] FALSE  TRUE FALSE FALSE

El operador & comprueba si ambos valores en la misma posición en los vectores son TRUE. Si algún valor de los pares es FALSE, la combinación también es FALSE.

El operador | comprueba si alguno de los valores en la misma posición en los vectores es TRUE.

c(FALSE, TRUE, FALSE, TRUE) | c(FALSE, TRUE, FALSE, FALSE)
[1] FALSE  TRUE FALSE  TRUE

Usando el operador %in%

___ %in% ___

Un operador especial adicional, de uso frecuente, es el operador %in%. Comprueba si el contenido de un vector también está presente en otro.

En el siguiente ejemplo utilizamos la variable UE que contiene la abreviatura de todos los países de la Unión Europea. Luego, verificamos si el carácter "AU" está presente o no en la variable UE.

EU <- c("AU","BE","BG","CY","CZ","DE","DK","EE","ES","FI","FR","GR","HR","HU",
        "IE","IT","LT","LU","LV","MT","NL","PO","PT","RO","SE","SI","SK")

"AU" %in% EU
[1] TRUE

El siguiente ejemplo amplía la búsqueda y compara múltiples elementos con el contenido de la variable EU. Produce un vector lógico como resultado que contiene un valor lógico para cada elemento:

c("AU","HU","UK") %in% EU
[1]  TRUE  TRUE FALSE

Como muestra el resultado, los dos primeros elementos de caracteres "AU" y "HU" están presentes en la variable EU, sin embargo, el tercer elemento "UK" no lo está.

Llamar al código R existente a través de funciones

Cuando escribe código, las funciones son sus mejores amigas. Pueden hacer las cosas difíciles muy fáciles o proporcionar nuevas funciones de una manera agradable. A través de las funciones, obtiene acceso a todas las potentes funciones que R tiene para ofrecer.

Introducción a las funciones.

Las funciones en cualquier lenguaje de programación se pueden describir como código predefinido y reutilizable destinado a realizar una tarea específica. Las funciones en R se pueden usar usando su nombre y corchetes justo después de eso. Dentro de los corchetes, podemos especificar parámetros para la función. Una función que ya hemos usado ampliamente es la función concatenada c().

Una función simple, por ejemplo, es abs() que se usa para obtener el valor absoluto de un número. En el siguiente ejemplo, la función recibe -3 como entrada y devuelve el resultado 3:

abs(-3)
[1] 3

Personalización de funciones a través de parámetros

Las funciones toman parámetros que los personalizan para la tarea dada. Por ejemplo, la función runif() genera valores distribuidos uniformemente, lo que significa que todos los resultados tienen la misma probabilidad. Por defecto, toma los siguientes parámetros:

runif(n, min = 0, max = 1)

El primer parámetro n es el número de valores que queremos generar. Este es un parámetro obligatorio que debemos definir para que la función funcione.

Por otro lado, podemos ver que algunos de los parámetros tienen valores predeterminados definidos por el signo igual =. Esto significa que si no especificamos explícitamente estos parámetros entre paréntesis, la función tomará los predeterminados. Veamos un ejemplo:

runif(n = 5)
[1] 0.4026613 0.4435938 0.9164693 0.5391659 0.2894120

La salida es un vector numérico de 5 números. Cada uno de ellos está entre 0 y 1, ya que no cambiamos la configuración predeterminada. Si también cambiamos los parámetros min y max, podríamos personalizar aún más la salida:

runif(n = 5, min = 8, max = 9)
[1] 8.354714 8.564323 8.008718 8.166375 8.993084

También es posible omitir el nombre de los parámetros y simplemente escribir los valores de entrada de esta manera:

runif(5, 8, 9)
[1] 8.317294 8.967572 8.149336 8.565711 8.737451

Sin embargo, en este caso debemos tener cuidado con el orden de las entradas, ya que cada función tiene un orden predeterminado para los parámetros. Si no nombramos explícitamente los parámetros que estamos configurando, R asumirá que los establecemos en el orden predefinido.

Usar la función sample()

La función sample() toma un vector y devuelve una muestra aleatoria de él. Los dos primeros de sus parámetros son:

Utilice la función sample() y muestree 5 valores aleatorios de la variable full.

full <- c(7, 32, 4, 27, 48, 2, 1, 9, 27, 7)
sample(x = full, size = 5)
[1]  7  2  1 27  9

Utilice la función seq()

La función seq() crea una secuencia de números enteros. Los primeros tres de sus parámetros son: from, to y by.

Utilice la función seq() y cree una secuencia de números del 2 al 10, pero solo incluya cada segundo valor. Por lo tanto, la salida debe ser: 2, 4, 6, 8, 10.

seq(from = 2, to = 10, by = 2)
[1]  2  4  6  8 10

Utilice funciones y datos existentes a través de paquetes

Los paquetes le dan acceso a un gran conjunto de funciones y conjuntos de datos, la mayoría de los cuales son proporcionados por la generosa comunidad R. Son la salsa secreta que hace posible usar R para casi cualquier cosa que puedas imaginar. Además, muchos paquetes son de código abierto, lo que puede ser un gran recurso de aprendizaje.

library(___) 
data(___)

Introducción a paquetes

Los paquetes son una de las mejores cosas de R. Los paquetes son compatibles con una gran comunidad de desarrolladores y permiten que R se conecte a muchos algoritmos y bibliotecas externos diferentes, muchos de ellos incluso escritos en diferentes lenguajes de programación.

Colaboradores de todo el mundo, incluidos desarrolladores o expertos en el dominio de la física, las finanzas, las estadísticas, etc., crean una gran cantidad de contenido adicional, como funciones personalizadas para casos de uso específicos. Estas funciones, junto con la documentación, los archivos de ayuda y los conjuntos de datos se pueden recopilar en paquetes. Los paquetes pueden hacerse públicos a través de repositorios de paquetes para que cualquiera pueda instalarlos y utilizarlos. El repositorio de paquetes más popular es CRAN, que aloja más de 15.000 paquetes.

Llamar un paquete

Como demostración, utilizaremos la función generate_primes() del paquete primes. Esta función toma dos números como parámetros y genera todos los números primos dentro de su rango.

Para usar un paquete, primero tenemos que cargarlo. Esto se puede hacer aplicando la función library() e insertando el nombre del paquete como primer argumento de la función. Después de eso, tenemos acceso a todo el contenido del paquete y podemos usar funciones de él como de costumbre.

library(primes)
generate_primes(min = 500, max = 550)
[1] 503 509 521 523 541 547

Compruebe si hay año bisiesto

library(lubridate)
leap_year(2020)
[1] TRUE

El contenido de este capítulo se encuentra en la página oficial de Quantargo en idioma ingles. También, existe mas material en la página oficial y es muy recomendable para introducirse en R.

Footnotes

    Citation

    For attribution, please cite this work as

    Santos (2021, Oct. 4). Franklin Santos: Introducción a R básico. Retrieved from https://franklinsantos.com/posts/2021-10-24-r-intro/

    BibTeX citation

    @misc{santos2021introducción,
      author = {Santos, Franklin},
      title = {Franklin Santos: Introducción a R básico},
      url = {https://franklinsantos.com/posts/2021-10-24-r-intro/},
      year = {2021}
    }