Sabemos que toda la acción en R es a través de comandos o instrucciones.
Sirve como calculadora, los espacios no son necesarios, perso se recomiendan para mejorar la legibilidad. Se puede usar operadores aritméticos.
Para abrir un chunk utilizar las teclas Ctrl+Alt+I
Calcular la raíz cuadrada de 25
sqrt(25)
## [1] 5
Hay que tener en cuenta que en la consola se obtiene el resultado, pero este no queda grabado como objeto, si queremos almacenar es necesario hacerlo mediante los signos (<-) o también (=) * Agregar un nuevo Chunk: Ctrl+Alt+I
a <- (2 + sqrt(5^2+11))
Ahora se crea un objeto llamado a que graba el resultado de esta operación. Este puede utilizarse en ambos sentidos.
5 + 20 -> b
Todas las asignaciones o resultado de una respuesta pueden ser visualizadas en Environment. Como los objetos ya están en la memoria de trabajo se puede hacer operaciones con los nombres.
C <- a + b
Hay que tener en cuenta que en R hay dos grupos de objetos: Vectores y Funciones.
Para crear un vector Utilizamos la función c
v <- c(9, 5, 3.14)
v
## [1] 9.00 5.00 3.14
Si queremos acceder al segundo de los elementos de v.
v[2]
## [1] 5
En conclusión sabemos que existen dos tipos de vectores.
Vectores atómicos: Permiten almacenar un mismo tipo de elementos.
d <- 5-10
d
## [1] -5
Vectores no atómicos: Pueden almacenar elementos variados y son mucho más versátiles.
e <- c("Luis Eduardo", "Hombre", "24")
e
## [1] "Luis Eduardo" "Hombre" "24"
Las acciones que ejecuta R es una función, si los vectores permiten almacenar datos, las funciones operan esos datos.
Recordemos los elementos de v
v
## [1] 9.00 5.00 3.14
mean(v)
## [1] 5.713333
Si queremos calcular la raíz de -100
f <- -100
sqrt(f)
## Warning in sqrt(f): Se han producido NaNs
## [1] NaN
#Vemos que nos devuelve un NaN que es not a number o indeterminación.
Podemos construir una función para que convierta la entrada compleja si algún valor es negativo.
raiz <- function(entrada){
if(any(entrada <0)){
entrada <- as.complex(entrada)
}
return(sqrt(entrada))
}
raiz(f)
## [1] 0+10i
Queremos crear el vector w, que contiene los valores 1, -3, 7 y 12. Luego aplicaremos dos funciones al vector: una que dé un resultado único, de tipo resumen (como la media) y otra que dé un resultado elemento a elemento (como el valor absoluto).
w<-c(1, -3, 7, 12)
mean(w)
## [1] 4.25
abs(w)
## [1] 1 3 7 12
Existen 5 tipos de vectores atómicos: - Enteros - Reales - Lógicos - Alfanuméricos - Complejos
i <- c(5L, 6L) #integer
d <- c(3, 6, 9) #double
l <- c(TRUE, FALSE) #logical
c <- c("Luis", "Nina") #character
x <- c(1+2i, 4i) #complex
Puedo visualizar el tipo de dato del objeto.
typeof(d)
## [1] "double"
Enteros/Integer: Almacenan valores numéricos únicamente enteros. El sufijo L es para indicar que son valores numéricos de tipo entero.
Reales/Double: Almacenan valores numéricos reales.
Lógicos/Logical: Solo pueden almacenar valores de verdadero o falso, se puede usar (TRUE, FALSE) o (T, F).
Alfanumñerico/Character: Cualquier tipo de cadena de caracteres entre comillas se considera tipo alfanumérico.
Complejos/Complex: Suma de una parte real y otra imaginaria mediante el sufijo i.
Hay dos opciones para almacenar información heterogénea: 1. Las listas 2. Los data frames
Listas: Contenedores universales que almacenan cualquier vector atómico incluso data frames.
Data frames: Son listas diseñadas para almacenar bases de datos en formatos filas (casos) por columnas (variables).
Crearemos una lista con tres vectores de diferentes tipos
lista <- list(A = 7,
B = c("ciencia", "datos"),
C = c(T,F,T))
lista
## $A
## [1] 7
##
## $B
## [1] "ciencia" "datos"
##
## $C
## [1] TRUE FALSE TRUE
Para consultar el tipo (typeof) y la estructura (str)
typeof(lista$A)
## [1] "double"
str(lista$A)
## num 7
typeof(lista$C)
## [1] "logical"
str(lista$C)
## logi [1:3] TRUE FALSE TRUE
Data frame: Es un requisito que los vectores componentes tengan la misma longitud, algo razonable en cualquier base de datos.
df <- data.frame(Id = c(1, 2, 3, 4, 5),
Grupo = c("Ecuador", "Colombia", "Ecuador", "Colombia", "Ecuador"),
Edad = c(22, 23, 25, 40, 50))
df
Para poder acceder a su contenido existen varias formas una es utilizar el operador $
df$Grupo
## [1] "Ecuador" "Colombia" "Ecuador" "Colombia" "Ecuador"
df[2, ]
df[ ,2]
## [1] "Ecuador" "Colombia" "Ecuador" "Colombia" "Ecuador"
Construyan un dataframe con 3 vectores y ejecuten los comandos typeof y str.
orders <- data.frame(item_name=c("digital apparatus","reflective instrument",
"miniature apparatus refill","extra-strength instrument charger"),price=c(330,99,57.2,17.6), item_category=c("apparatus","instrument","module","mechanism"))
orders
typeof(orders$item_name)
## [1] "character"
typeof(orders$price)
## [1] "double"
typeof(orders$item_category)
## [1] "character"
str(orders$item_name)
## chr [1:4] "digital apparatus" "reflective instrument" ...
str(orders$price)
## num [1:4] 330 99 57.2 17.6
str(orders$item_category)
## chr [1:4] "apparatus" "instrument" "module" "mechanism"
Para saber mi directorio de trabajo
getwd()
## [1] "D:/Escritorio/UNI-R4DataScience"
Para cambiar directorio de trabajo
setwd("D:/NuevoDirectorioR")
getwd()
## [1] "D:/Escritorio/UNI-R4DataScience"