Variables, objetos atómicos y operadores

Variables

En programación, se alude a la variable como el nombre simbólico o identificador que se asocia a un dato que se almacena en la memoria principal del ordenador. A diferencia de una constante, cuyo valor no puede cambiar, el dato que almacena la variable puede, como el término indica, variar durante la ejecución del programa. El nombre puede incluir letras, números, puntos y guiones bajos, aunque debe empezar siempre con una letra o un punto. En este último caso, tras el punto no se permite seguir con un número. No puede contener ñ, tildes o símbolos que no sean del alfabeto.

Hay que tener en cuenta que el nombre no debe de ser ambiguo, sino lo más claro y descriptivo posible, de forma que no conduzca a confusión y sea más fácil de comprender tanto por nosotros mismos como por otras personas.

Generar una variable

El procedimiento general para crear una variable sería el siguiente: escribes el nombre de tu variable, incluyes el operador de asignación <-, y continúas con el dato que quieras incluir, el cual determina el tipo de operaciones a las que puede someterse la variable. De este modo, quedaría tal que así: nombre_variable <- dato .

Si bien, es cierto que sería posible asignar variables de otras formas como las siguientes: dato -> nombre_variable , assign("nombres_variable", dato) , nombre_variable = dato .

Objetos atómicos

Todo lo que conforma R se considera un objeto. Partiendo de los más simples, los mínimos elementos de las variables se conocen como atómicos y pueden componer estructuras de datos (vectores, factores, matrices y listas), que serían objetos recursivos y también pueden componer una variable. A continuación, se muestran los distintos tipos de objetos atómicos en los que se basa R, los cuales pueden comprobarse aplicando las funciones mode(), class(nombre_variable) o is..

  • Lógico: también conocido como booleano, representa valores de lógica binaria, es decir, valores 0 y 1 como falso y verdadero, respectivamente, que se pueden indicar como FALSE, F, TRUE o T.

Ejemplos

1
2
logico <- TRUE     
booleano <- F

  • Numérico: representa valores numerales tanto enteros como reales. Existe otros tipos de datos como el denominado integer, el cual es más estricto ya que se refiere únicamente a los valores enteros, y el tipo de dato complex, que se relaciona con los números complejos cuya forma es b+2i . Generalmente se emplean datos numeric y pueden proceder de operaciones.

Ejemplos

1
2
3
4
num_entero = 5-15
assign("num_real", 5.43)
num_integer <- 2L
num_complejo <- 4+3i

  • Carácter: dígito individual que puede ser representado por un símbolo del lenguaje natural, lo que incluye letras, números, espacios en blanco o signos, y que tienen que indicarse entre comillas. Estos pueden presentarse como una secuencia ordenada de forma que compongan una cadena de caracteres. Para crear una cadena se utilizan comillas simples o dobles sin diferencias en su comportamiento. Si bien, las comillas dobles es la opción más extendida aunque, si la cadena contiene comillas como elementos, se emplean las comillas simples.

Ejemplos

1
2
caracter <- '¡'
cadena <- "1. #ADN1#ATGCGACCAGTT"

  • Nulo: se da con valores indefinidos que suelen importarse o proceden de una operación. También podría entenderse como una variable vacía. Se definen con la palabra reservada NULL.

Ejemplo

1
nulo <- NULL

¿Qué valor contienen los siguientes ejemplos de variable?

1
2
3
4
5
6
7
variable1 <- 1/0
variable2 <- 0/0
variable3 <- NA 
variable4 <- as.integer(variable1)  
variable5 <- "3 + 2"
variable6 <- 3 + 2
variable7 <- T

Respuesta
  • La variable variable1 contiene un valor infinito, el cual se muestra como Inf. Este valor es resultado de cálculos donde se divide entre cero o se obtiene un número muy grande.

  • variable2 no representa un valor numérico, lo que se indica como NaN (Not a Number). Esto resulta de operaciones con indeterminaciones. Tanto Inf como NaN son variables de tipo numérico.

  • En el caso de variable3, la variable contiene un valor no disponible, mostrado como NA. Este tipo de objeto se considera como lógico por defecto, a menos que se coercionen a otro tipo mediante funciones como la que se emplea en la variable4 o semejantes, como as.character() o as.numeric().

  • Las variables variable5, variable6 y variable7 contienen elementos de tipo carácter, numérico y lógico, respectivamente.

Operadores

Lógicos

Los operadores lógicos |y & describen relaciones lógicas que se pueden entender como "uno u otro es TRUE" y "ambos son TRUE", respectivamente. Por tanto, la relación | devuelve TRUE si alguno de los datos es TRUE, y la relación & solo da la salida TRUE si ambos datos son TRUE.

Ejemplos

1
2
3
relacion1 <- F | F
relacion2 <- T & F
relacion3 <- !5 | 1

Aritméticos

Los operadores aritméticos, como su nombre indica, se emplean para operaciones aritméticas, es decir, cálculos matemáticos, por lo que son permitidos para datos de tipo entero, numérico y complejo.

Operador Comparación
+ Suma
- Resta
* Multiplicación
/ División
^ Potencia
%% División entera

R funciona como una calculadora, donde se emplean los operadores aritméticos mencionados y una gran cantidad de funciones matemáticas como la raíz cuadrada, sqrt(), el logaritmo, log(), el exponente, exp() o el seno, sin(), entre otras.

Relacionales

Los operadores relacionales realizan comparaciones y siempre devuelven como resultado TRUE o FALSE. A diferencia de los operadores aritméticos, se puede emplear en cadenas de caracteres, pero toma en cuenta el primer carácter de cada dato y compara por orden alfabético.

Operador Comparación
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
== Exactamente igual que
!= No es igual que

Jerarquía de operadores

Tanto los operadores aritméticos como los relacionales y los lógicos están jerarquizados, de modo que se efectúen preferentemente ciertas operaciones, dejando en último lugar el operador de asignación de varible.

Orden Operador
1 ^
2 * /
3 + -
4 Relacionales
5 &
6 |
7 <-

Ejemplos

1
2
3
relacion4 <- num_entero != num_complejo
relacion5 <- cadena > caracter
relacion6 <- num_entero * -2 <= num_real & cadena == caracter

Ejercicios complementarios

Cree un script llamado Kelvin_a_Celsius.R que transforme grados Kelvin en grados Celsius (centígrados).

Respuesta
1
2
3
4
print("Indique grados Kelvin:")
kelvin <- scan(n=1)
celsius <- kelvin - 273.15
cat(kelvin, "K son", celsius, "ºC.\n" )    **MJ: NO OLVIDES USAR EL \n CON CAT**

Cree un script llamado pesetas_a_euros.R que calcule la equivalencia de pesetas en euros.

Respuesta
1
2
3
4
print("Indique cantidad pesetas:")
pesetas <- scan(n=1)
euros <- pesetas * 0.006
cat(pesetas, "pesetas son", euros, "euros.\n")

Cree un script llamado segundos.R que desglose una cantidad de segundos en días, horas y minutos equivalentes.

Respuesta
1
2
3
4
5
6
print("Indique segundos:")
segundos <- scan(n=1)
minutos <- segundos/60
horas <- minutos/60
dias <- horas/24
cat(segundos, "segundos son", minutos, "minutos,", horas, "horas y", dias, "días.\n")