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"
En R existen distintos tipos de datos simples predefinidos:
numeric: Es el tipo de los números. Secuencia de dígitos (pueden incluir el - para negativos y el punto como separador de decimales) que representan números. Por ejemplo, 1, -2.0, 3.1415 o 4.5e3.
Por defecto, cualquier número que se teclee tomará este tipo.
integer: Es el tipo de los números enteros. Secuencia de dígitos sin separador de decimales que representan un número entero. Por ejemplo 1 o -2. Son una subclase del tipo de datos numérico.
double: Es el tipo de los números reales. Secuencia de dígitos que incluyen decimales separados por punto. Por ejemplo 3.1415 o -2.0. Son una subclase del tipo de datos numérico.
character: Es el tipo de las cadenas de caracteres. Secuencia de caracteres alfanuméricos que representan texto. Se escriben entre comillas simples o dobles. Por ejemplo "Hola" o 'Hola'.
logical: Es el tipo de los booleanos. Puede tomar cualquiera de los dos valores lógicos TRUE (verdadero) o FALSE (falso). También se pueden abreviar como T o F.
NA: Se utiliza para representar datos desconocidos o perdidos. Aunque en realidad es un dato lógico, puede considerarse con un tipo de dato especial.
NULL: Se utiliza para representar la ausencia de datos. La principal diferencia con NA es que NULL aparece cuando se intenta acceder a un dato que no existe, mientras que NA se utiliza para representar explícitamente datos perdidos en un estudio.
Para averiguar el tipo de un dato se puede utilizar la siguiente función:
class(x): Devuelve el tipo del dato x.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:
is.numeric(x): Devuelve el booleano TRUE si x es del tipo numeric.is.double(x): Devuelve el booleano TRUE si x es del tipo double.is.integer(x): Devuelve el booleano TRUE si x es del tipo integer.is.character(x): Devuelve el booleano TRUE si x es del tipo character.is.logical(x): Devuelve el booleano TRUE si x es del tipo logical.is.na(x): Devuelve el booleano TRUE si x es del tipo NA.is.null(x): Devuelve el booleano TRUE si x es del tipo NULL.Ejemplo 2.2
is.double(3.1415)[1] TRUE
is.character(TRUE)[1] FALSE
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.
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
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
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
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"
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
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.!b: Devuelve TRUE si el booleano b es FALSE, y FALSE si es TRUE.x & y: Devuelve TRUE si los booleanos x, y y son TRUE y FALSE en caso contrario.x | y: Devuelve TRUE si alguno de los booleanos x o y son TRUE, y FALSE en caso contrario.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
Una variable es un identificador ligado a un valor.
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
xNULL
# Eliminar y
rm(y)
# A partir de aquí, una llamada a y produce un error.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
Ejercicio 2.1 Se dispone de los siguientes datos de una persona:
| Variable | Valor |
|---|---|
| edad | 20 |
| estatura | 165 |
| peso | 60 |
| sexo | mujer |
Declarar las variables anteriores y asignarles los valores correspondientes.
# Declaración de variables
edad <- 20
estatura <- 165
peso <- 60
sexo <- "mujer"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
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²"
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