Conceptos básicos
Empezaremos con conceptos elementales que es necesario conocer para poder programar.
Un programa es una secuencia de operaciones que deben aplicarse a un conjunto de datos en un orden determinado para realizar una tarea específica en un computador. En este tema veremos los componentes más elementales del lenguaje R que serán necesarios para crear un programa.
En concreto hablaremos de:
Los tipos de datos que podemos tratar.
Qué operaciones se pueden utilizar con los datos.
Mecanismos que permitirán controlar el orden de ejecución de las operaciones.
Tipos de datos
Los lenguajes de programación, entre ellos R, són capaces de realizar operaciones con diferentes tipos de datos y almacenarlos en estructuras más complejas. En R tendremos la posibilidad de usar los siguientes tipos elementales:
Tipo |
Description |
Ejemplo |
---|---|---|
Numeric |
Números decimales |
numero <- 1.0 |
Integer |
Números enteros |
int <- 1 |
Character |
Cadenas de texto |
str <- “un texto” |
Complex |
Números complejos |
comp <- 3+2i |
Boolean |
Valores lógicos |
|
Date |
Fecha |
27/09/2022 |
Más adelante descubriremos que podemos construir colecciones de datos usando como base estos tipos elementales, estas colecciones se conocen con el nombre de tipos compuestos.
Variables
Una variable en el contexto de la informática hace referencia a un nombre que representa un valor. Las variables se utilizan de forma habitual en los programas para guardar distintos datos con los que realizar operaciones durante la ejecución de un programa. Son útiles para guardar valores intermedios en nuestros cálculos.
Para identificar a una variable (su nombre) podemos usar cualquier palabra que combine letras mayúsculas y minúsculas, preferiblemente sin usar acentos, dígitos (0, … , 9), puntos ‘.’ y el símbolo ‘_’ , siempre que empiece con una letra o un punto. Aunque no esté prohibido, es muy mala idea redefinir nombres que ya sepamos que tienen significado para R, como por ejemplo la constante pi o la función para obtener la raíz cuadrada de un número: sqrt (square root).
Veamos algunos ejemplos para entender el proceso de creación y uso de una variable de tipo entero:
> x = 33 # La variable con nombre x ahora contiene el valor 33
> x # Mostramos el valor de la variable x
[1] 33
En general, se puede crear una variable y asignarle un valor, o asignar un nuevo valor a una variable definida anteriormente, mediante la construcción nombre_de_la_variable = valor
. También se puede conectar el nombre de la variable con el valor por medio de una flecha -> o <-, compuesta de un guion y un signo de desigualdad, de manera que el sentido de la flecha vaya del valor a la variable; por ejemplo, las tres primeras instrucciones siguientes son equivalentes, y asignan el valor 2 a
la variable x, mientras que las dos últimas son incorrectas:
> x = 2 # Correcto
> x <- 2 # Correcto
> 2 -> x # Correcto
> x -> 2 # Incorrecto
> 2 <- x # Incorrecto
Operadores y Operandos
Los operadores son símbolos especiales que indican que es necesario realizar algún tipo de computación. Los valores con los que actúa un operador se llaman operandos.
Lo entenderemos con un pequeño ejemplo:
> x = 10.0
> y = 5
> resultado = x + y
> resultado
[1] 15
En este caso, el operador +
permite sumar los operandos x
e y
juntos y guardar el resultado en la variable del mismo nombre. Debemos destacar que en este código hemos necesitado definir tres variables distintas.
Un operando puede ser una variable o un literal. Definimos los literales en un programa como la expresión de un valor que no cambia en el código fuente, estos siempre serán de uno de los distintos tipos de datos básicos que hemos descrito anteriormente.
A continuación tenemos otro fragmento de código en el que combinamos diferentes operadores, variables y literales de tipo entero:
> a = 10
> b = 20
> x = 45
> r = (a + b - 5) + (x + 10 + 20)
Una secuencia de operandos y operadores, como a + b - 5
, se llama expresión. Los lenguajes de programación en general y R en particular admiten diferentes operadores para combinar diferentes operandos, esto nos permitirá crear expresiones adaptadas a las soluciones necesarias para los diferentes problemas que se nos presenten.
A continuación veremos un conjunto de tablas-resumen con los operadores más importantes en R. La mayoría de lenguajes de programación comparten los mismos operadores aunque el símbolo que los representa puede variar de un lenguaje a otro.
Operadores aritméticos
Son operadores que se pueden usar con los siguientes tipos básicos: enteros y decimales, pero también con tipos compuestos con los que trabajaremos más adelante: vectores y matrices.
Operador |
Operación |
Ejemplo |
Resultado |
---|---|---|---|
|
Suma |
5 + 3 |
8 |
|
Resta |
5 - 3 |
2 |
|
Multiplicación |
5 * 3 |
18 |
|
División |
5 /3 |
1.666667 |
|
Potencia |
5 ^ 3 |
125 |
|
División entera |
5 %/% 2 |
2 |
|
Módulo |
5 %% 2 |
1 |
Operadores lógicos
Los operadores booleanos o lógicos en se utilizan para especificar múltiples condiciones entre objetos. Estas comparaciones devuelven valores TRUE o FALSE.
Operador |
Comparación |
Ejemplo |
Resultado |
---|---|---|---|
x | y |
x Ó y es verdadero |
|
|
x |
x Y y son verdaderos |
|
|
|
x no es verdadero (negación) |
! |
|
isTRUE(x) |
x es verdadero (afirmación) |
isTRUE( |
|
Los operadores | y & siguen estas reglas:
|
devuelveTRUE
si alguno de los datos esTRUE
&
solo devuelveTRUE
si ambos datos esTRUE
|
solo devuelveFALSE
si ambos datos sonFALSE
&
devuelveFALSE
si alguno de los datos esFALSE
Estos operadores pueden ser usados con estos con datos de tipo numérico, lógico y complejo. Al igual que con los operadores relacionales, los operadores lógicos siempre devuelven TRUE
o FALSE
.
Operadores relacionales
Los operadores relacionales son usados para hacer comparaciones y siempre devuelven como resultado un valor booleano (TRUE
o FALSE
). Esta categoría de operadores sirve para comparar cualquier tipo de dato sin que resulte en un error.
Operador |
Comparación |
Ejemplo |
Resultado |
---|---|---|---|
|
Menor que |
5 < 3 |
|
|
Menor o igual que |
5 <= 3 |
|
|
Mayor que |
5 > 3 |
|
|
Mayor o igual que |
5 >= 3 |
|
|
Exactamente igual que |
5 == 3 |
|
|
No es igual que |
5 != 3 |
|
Orden de las operaciones
En R, al igual que en matemáticas, las operaciones tienen un orden de evaluación definido. Cuanto tenemos varias operaciones oen la misma expresión, algunas de ellas son realizadas antes que otras y el resultado de ellas dependerá de este orden. El orden de operaciones incluye a las aritméticas, relacionales, lógicas y las asignaciones.
En la tabla siguiente se presenta el orden en que ocurren las operaciones que hemos revisado en este capítulo:
Orden |
Operadores |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Funciones matemáticas
El lenguaje R nos proporciona un gran conjunto de funciones definidas para realizar todo tipo de tareas: manejo de datos, análisis estadístico y modelado de datos, dibujo… Durante este curso iremos descubriendo algunas de ellas. Para empezar a familiarizarnos con ellas vamos a ver algunas de las funciones numéricas más comunes. Las funciones de R se aplican a sus argumentos introduciéndolos siempre entre paréntesis. Si la función se tiene que aplicar a más de un argumento, estos se tienen que especificar en el orden que toque y separándolos mediante comas; R no tiene en cuenta los espacios en blanco alrededor de las comas.
Operación |
\(\sqrt{x}\) |
\(e^x\) |
\(ln(x)\) |
\(ln_{10}(x)\) |
\(ln_{a}(x)\) |
\(n!\) |
\(N \choose k\) |
\(sin(x)\) |
\(cos(x)\) |
\(tan(x)\) |
\(arcsin(x)\) |
\(arccos(x)\) |
\(arctan(x)\) |
\(\|x\|\) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Función |
sqrt |
exp |
log |
log10 |
log( ,a) |
factorial |
choose |
sin |
cos |
tan |
asin |
acos |
atan |
abs |
R entiende que los argumentos de las funciones sin, cos y tan están en radianes. Si queremos aplicar una de estas funciones a un número de grados, podemos pasar los grados a radianes multiplicándolos por π/18.
> sqrt(25)
[1] 5
> log(10)
[1] 2.302585
> cos(60) # Coseno de 60 radianes
[1] -0.952413
> cos(60 * pi / 180) # Coseno de 60 grados
[1] 0.5
> acos(0.5) # Arcocoseno de 0.5 en radianes
[1] 1.047198
> acos(0.5) * 180 / pi # Arcocoseno de 0.5 en grados
[1] 60
Ejercicios de operaciones elementales
Puedes realizar estos ejercicios directamente en la consola. La idea es que con ellos consolides los conceptos trabajados hasta este momento: creación de variables y uso de operadores.
Realizar un conjunto de expresiones en R que nos calcule el índice de masa corporal (IMC) de una persona que mide 2 m i pesa 60 Kg. Este se calcula dividiendo el peso entre la altura al cuadrado (en cm).
Realizar un programa que nos calcule la cantidad de propina a dejar en un restaurante. Se debe declarar una variable con el total de la factura y otra con el porcentaje de propina que desea dejar. Luego, muestra la cantidad de propina a pagar.
Crea un programa que solicite que defina una variable con el radio de un círculo y calcule el área de ese círculo utilizando la fórmula Área = π radio^2*. A continuación, muestra el resultado en la pantalla
Si hubiéramos empezado a contar segundos a partir de las 12 campanadas que marcan el inicio de 2024, ¿a qué hora de qué día de qué año llegaríamos a los 250 millones de segundos? En este problema no debes contar los años bisiestos.
Realiza el mismo ejercicio que antes contando los años bisiestos.
Copia las operaciones que has realizado en un script, guárdalo con el nombre mi_primer_script. Vuelve a ejecutar las operaciones una a una seleccionándolas en el propio fichero y apretando el botón Run.
Realizar un programa que dados los parámetros: a, b y c. resuelve una ecuación de segundo grado. Ejemplo, la ecuación: \(2x^2 + 20x + 3 = 0\) debe dar -0.1523201 ; -9.8476799. Para calcular la raíz cuadrada podéis usar la función sqrt.
Ejemplo de uso de la función:
> sqrt(4)
[1] 2
Definición de funciones
Aunque normalmente usaremos funciones ya definidas en el propio lenguaje, en algunas ocasiones nos será necesario crear nuestras propias funciones. Para ello usaremos la función function
Aquí tenemos la sintaxis básica para definir una función en R:
nombre_de_la_funcion <- function(argumentos) {
# Código que realiza la operación deseada
# Podemos incluir múltiples sentencias
resultado = ...
return(resultado)
}
A continuación explicamos los componentes clave:
nombre_de_la_funcion: Esto es el nombre que le damos a nuestra función. Debe ser un nombre válido de variable en R y debe comenzar con una letra (no un número ni un carácter especial). El nombre de la función es cómo la llamaremos más adelante para ejecutarla.
argumentos: Son los parámetros que nuestra función acepta como entrada. Podemos especificar cero o más argumentos separados por comas. Los argumentos son variables que toman valores cuando llamamos a la función y se utilizan dentro de la función para realizar operaciones.
{}: El código de la función se coloca entre llaves {}. Este es el cuerpo de la función donde realizamos las operaciones que deseamos que la función realice.
resultado: Dentro del cuerpo de la función, podemos calcular un resultado o realizar cualquier tarea deseada. Podemos usar la palabra clave return para devolver un valor específico como resultado de la función. El valor que se devuelve se almacena en la variable resultado.
Un ejemplo muy simple de función:
suma <- function(a, b) {
resultado <- a + b
return(resultado)
}
Condicionales
Las estructuras de control condicionales permiten que un programa decida de manera automática entre varias opciones en función de si se cumplen o no determinadas condiciones. Estas estructuras tienen en R la misma estructura que en casi todos los otros lenguajes de programación. Tenemos la estructura:
if(condición){
acción1
} else {
acción2
}
Mis primeras funciones
Convertir grados Celsius a Fahrenheit: Crea una función que recibe un parámetro (temperatura en grados Celsius) y devuelve el equivalente en grados Fahrenheit.
Calculadora de descuentos: Definir una función llamada calcular_descuento que recibe el precio original de un producto y la edad del cliente como argumentos. La función debe calcular el precio con descuento según las siguientes reglas:
Si el cliente tiene menos de 18 años, el descuento es del 20%.
Si el cliente tiene entre 18 y 60 años (inclusive), no hay descuento.
Si el cliente tiene más de 60 años, el descuento es del 25%.
Calculadora de impuestos sobre la renta: Definir una función llamada calcular_impuesto que tome el ingreso anual de una persona como argumento y devuelva la cantidad de impuestos a pagar según las siguientes reglas:
Si el ingreso anual es menor o igual a 10.000 €, el impuesto es del 10%.
Si el ingreso anual está entre 10.001 € y 50.000 €, el impuesto es del 20% para la cantidad que excede 10.000 € y del 10% para la parte hasta 10.000 €.
Si el ingreso anual es mayor a 50.000 €, el impuesto es del 30% para la cantidad que excede $50,000, del 20% para la cantidad entre 10.001 € y 50.000 €, y del 10% para la parte hasta 10.000 €.