2  Tipos de datos simples

En R existen distintos tipos de datos simples predefinidos:

Para averiguar el tipo de un dato se puede utilizar la siguiente función:

Ejemplo 2.1 A continuación se muestran los tipos de algunos datos.

class(3.1415)
[1] "numeric"
class(-1)
[1] "numeric"
class("Hola")
[1] "character"
class(TRUE)
[1] "logical"
class(NA)
[1] "logical"
class(NULL)
[1] "NULL"

También pueden utilizarse las siguientes funciones que devuelven un booleano:

Ejemplo 2.2  

is.double(3.1415)
[1] TRUE
is.character(TRUE)
[1] FALSE

2.1 Conversión de tipos

En muchas ocasiones es posible convertir un dato de un tipo a otro distinto. Para ello se usan las siguientes funciones:

  • as.numeric(x): Convierte el dato de x al tipo numeric siempre que sea posible o tenga sentido la conversión. Para convertir una cadena en un número, la cadena tiene que representar un número. El valor lógico TRUE se convierte en 1 y el FALSE en 0.
  • as.integer(x): Convierte el dato de x al tipo integer siempre que sea posible o tenga sentido la conversión. Para convertir una cadena en un número entero, la cadena tiene que representar un número entero. El valor lógico TRUE se convierte en 1 y el FALSE en 0.
  • as.character(x): Convierte el tipo de dato de x al tipo character simplemente añadiendo comillas.
  • as.logical(x): Convierte el tipo de dato de x al tipo lógico. Para datos numéricos, el 0 se convierte en FALSE y cualquier otro número en TRUE. Para cadenas se obtiene NA excepto para las cadenas "TRUE" y "true" que se convierten a TRUE y las cadenas "FALSE" y "false" que se convierten a FALSE.

El tipo NA no se puede convertir a ningún otro tipo pues representa la ausencia del dato. Lo mismo ocurre con NULL.

2.2 Operaciones con números

2.2.1 Operadores aritméticos

Los siguientes operadores permiten realizar las clásicas operaciones aritméticas entre datos numéricos:

  • x + y: Devuelve la suma de x e y.
  • x - y: Devuelve la resta de x e y.
  • x * y: Devuelve el producto de x e y.
  • x / y: Devuelve el cociente de x e y.
  • x %% y: Devuelve el resto de la división entera de x e y.
  • x ^ y: Devuelve la potencia x elevado a y.

Ejemplo 2.3  

2 + 3
[1] 5
5 * -2
[1] -10
5 / 2
[1] 2.5
1 / 0
[1] Inf
5 %% 2
[1] 1
2 ^ 3
[1] 8

2.2.2 Operadores relacionales

Comparan dos números y devuelven un valor lógico.

  • x == y: Devuelve TRUE si el número x es igual que el número y, y FALSE en caso contrario.
  • x > y: Devuelve TRUE si el número x es mayor que el número y, y FALSE en caso contrario.
  • x < y: Devuelve TRUE si el número x es menor que el número y, y FALSE en caso contrario.
  • x >= y: Devuelve TRUE si el número x es mayor o igual que el número y, y FALSE en caso contrario.
  • x <= y: Devuelve TRUE si el número x es menor o igual a que el número y, y FALSE en caso contrario.
  • x != y: Devuelve TRUE si el número x es distinto del número y, y FALSE en caso contrario.

Ejemplo 2.4  

3 == 3
[1] TRUE
3.1 <= 3
[1] FALSE
4 > 3
[1] TRUE
-1 != 1
[1] TRUE
5 %% 2
[1] 1
2 ^ 3
[1] 8
(2 + 3) ^ 2
[1] 25

2.2.3 Funciones y constantes numéricas

Las siguientes constantes y funciones matemáticas también están ya predefinidas.

  • pi: Devuelve el número \(\pi\).
  • sqrt(x): Devuelve la raíz cuadrada de x.
  • abs(x): Devuelve el valor absoluto de x.
  • round(x, n): Devuelve el redondeo de x a n decimales.
  • exp(x): Devuelve la exponencial de x (\(e^x\)).
  • log(x): Devuelve el logaritmo neperiano de x.
  • sin(x): Devuelve el seno del ángulo x en radianes.
  • cos(x): Devuelve el coseno del ángulo x en radianes.
  • tan(x): Devuelve la tangente del ángulo x en radianes.
  • asin(x): Devuelve el arcoseno de x.
  • acos(x): Devuelve el arcocoseno de x.
  • atan(x): Devuelve el arcotangente de x.

Ejemplo 2.5  

sqrt(9)
[1] 3
abs(-1)
[1] 1
round(1.7)
[1] 2
exp(1)
[1] 2.718282
log(exp(1))
[1] 1
cos(pi)
[1] -1
asin(1)
[1] 1.570796

2.3 Operaciones con cadenas

2.3.1 Funciones de cadenas

Existen muchas funciones para cadenas de texto pero las más comunes son:

  • nchar(c): Devuelve el número de caracteres de la cadena.
  • paste(x, y, ..., sep=s): Concatena las cadenas x, y, etc. separándolas por la cadena s. Por defecto la cadena de separación es un espacio en blanco.
  • substr(c, start=i, stop=j): Devuelve la subcadena de la cadena c desde la posición i hasta la posición j. El primer carácter de una cadena ocupa la posición 1.
  • tolower(c): Devuelve la cadena que resulta de convertir la cadena c a minúsculas.
  • toupper(c): Devuelve la cadena que resulta de convertir la cadena c a mayúsculas.

Ejemplo 2.6  

nchar("Me gusta R")
[1] 10
paste("Me", "gusta", "R")
[1] "Me gusta R"
paste("Me", "gusta", "R", sep = "-")
[1] "Me-gusta-R"
paste("Me", "gusta", "R", sep = "")
[1] "MegustaR"
substr("Me gusta R", 4, 8)
[1] "gusta"
tolower("Me gusta R")
[1] "me gusta r"
toupper("Me gusta R")
[1] "ME GUSTA R"

2.3.2 Operaciones de comparación de cadenas

  • x == y : Devuelve TRUE si la cadena x es igual que la cadena y, y FALSE en caso contrario.
  • x > y : Devuelve TRUE si la cadena x sucede a la cadena y, y FALSE en caso contrario.
  • x < y : Devuelve TRUE si la cadena x antecede a la cadena y, y FALSE en caso contrario.
  • x >= y : Devuelve TRUE si la cadena x sucede o es igual a la cadena y, y FALSE en caso contrario.
  • x <= y : Devuelve TRUE si la cadena x antecede o es igual a la cadena y, y FALSE en caso contrario.
  • x != y : Devuelve TRUE si la cadena x es distinta de la cadena y, y FALSE en caso contrario.

Utilizan el orden alfabético, las minúsculas van antes que las mayúsculas, y los números antes que las letras.

Ejemplo 2.7  

"R" == "R"
[1] TRUE
"R" == "r"
[1] FALSE
"uno" < "dos"
[1] FALSE
"A" > "a"
[1] TRUE
"" < "R"
[1] TRUE

2.4 Operaciones con datos lógicos o booleanos

2.4.1 Operadores lógicos

A la hora de comparar valores lógicos R asocia a TRUE el valor 1 y a FALSE el valor 0.

  • x == y: Devuelve TRUE si los booleanos x y y son iguales, y FALSE en caso contrario.
  • x < y: Devuelve TRUE si el booleano x es menor que el booleano y, y FALSE en caso contrario.
  • x <= y: Devuelve TRUE si el booleano x es menor o igual que el booleano y, y FALSE en caso contrario.
  • x > y: Devuelve TRUE si el booleano x es mayor que el booleano y, y FALSE en caso contrario.
  • x >= y: Devuelve TRUE si el booleano x es mayor o igual que el booleano y, y FALSE en caso contrario.
  • x != y: Devuelve TRUE si el booleano x es distinto que el booleano y, y FALSE en caso contrario.
  • Negación !b: Devuelve TRUE si el booleano b es FALSE, y FALSE si es TRUE.
  • Conjunción x & y: Devuelve TRUE si los booleanos x, y y son TRUE y FALSE en caso contrario.
  • Disyunción x | y: Devuelve TRUE si alguno de los booleanos x o y son TRUE, y FALSE en caso contrario.

Tabla de verdad

x y !x x & y x | y
FALSE FALSE TRUE FALSE FALSE
FALSE TRUE TRUE FALSE TRUE
TRUE FALSE FALSE FALSE TRUE
TRUE TRUE FALSE TRUE TRUE

Ejemplo 2.8  

!TRUE
[1] FALSE
FALSE | TRUE
[1] TRUE
FALSE | FALSE
[1] FALSE
TRUE & FALSE
[1] FALSE
TRUE & TRUE
[1] TRUE

2.5 Variables

Una variable es un identificador ligado a un valor.

Reglas para nombrar variables
  • Comienzan siempre por una letra o punto, seguida de otras letras, números, puntos o guiones bajos. Si empieza por punto no puede seguirle un número.
  • No se pueden utilizarse palabras reservadas del lenguaje.

A diferencia de otros lenguajes de programación, las variables no tienen asociado un tipo de dato y no es necesario declararlas antes de usarlas (tipado dinámico).

Para asignar un valor a una variable se utiliza el operador de asignación <-:

  • x <- y: Asigna el valor y a la variable x.

Aunque es menos común también se puede utilizar el operador =.

Se puede crear una variable sin ningún valor asociado asignándole el valor NULL.

Una vez definida una variable, puede utilizarse en cualquier expresión donde tenga sentido el valor que tiene asociado.

Si una variable ya no va a usarse, es posible eliminarla y liberar el espacio que ocupan sus datos asociados con la siguiente función:

  • rm(x): Elimina la variable x.

Ejemplo 2.9  

x <- 3
x
[1] 3
y <- x + 2
y
[1] 5
# Valor no definido
x <- NULL
x
NULL
# Eliminar y
rm(y)
# A partir de aquí, una llamada a y produce un error.

2.5.1 Prioridad de los operadores

Al evaluar una expresiones R utiliza el siguiente orden de prioridad de evaluación:

1 Funciones predefinidas
2 Potencias (^)
3 Productos y cocientes (*, /, %%)
4 Sumas y restas (+, -)
5 Operadores relacionales (==, >, <, >=, <=, !=)
6 Negación (!)
7 Conjunción (&)
8 Disyunción (|)
9 Asignación (<-)

Se puede saltar el orden de evaluación utilizando paréntesis ( ).

Ejemplo 2.10  

4 + 8 / 2 ^ 2
[1] 6
4 + (8 / 2) ^ 2
[1] 20
(4 + 8) / 2 ^ 2
[1] 3
(4 + 8 / 2) ^ 2
[1] 64
x <- 2 
y <- 3
z <- ! x + 1 > y & y * 2  < x ^ 3
z
[1] TRUE

2.6 Ejercicios

Ejercicio 2.1 Se dispone de los siguientes datos de una persona:

Variable Valor
edad 20
estatura 165
peso 60
sexo mujer
  1. Declarar las variables anteriores y asignarles los valores correspondientes.

    # Declaración de variables
    edad <- 20
    estatura <- 165
    peso <- 60
    sexo <- "mujer"
  2. Definir la variable numérica imc con el índice de masa corporal aplicando la siguiente fórmula a las variables anteriores:

    \[ \mbox{imc} = \frac{\mbox{peso (kg)}}{\mbox{estatura (m)}^2} \]

    # Cálculo del índice de masa corporal
    imc <- peso / (estatura / 100) ^ 2
    imc
    [1] 22.03857
  3. Mostrar por pantalla el indice de masa corporal calculado en el apartado anterior redondeado a dos decimales y con sus unidades en mayúsculas.

    # Salida por pantalla
    paste("Índice de masa corporal: ", round(imc,2), toupper("KG/M²"))
    [1] "Índice de masa corporal:  22.04 KG/M²"
  4. Definir la variable booleana obesa con el valor correspondiente a la siguiente condición: ser mujer y no tener una edad superior a 60 y tener un índice de masa corporal mayor o igual que 30. ¿Es esta persona obesa?

    # Cálculo de la obesidad
    obesa <- sexo == "mujer" & ! edad > 60 & imc >= 30
    obesa
    [1] FALSE