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
<- 3
x x
[1] 3
<- x + 2
y y
[1] 5
# Valor no definido
<- NULL
x x
NULL
# 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
<- 2
x <- 3
y <- ! x + 1 > y & y * 2 < x ^ 3
z 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
<- 20
edad <- 165
estatura <- 60
peso <- "mujer" sexo
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
<- peso / (estatura / 100) ^ 2
imc 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
<- sexo == "mujer" & ! edad > 60 & imc >= 30
obesa obesa
[1] FALSE