Sabemos que toda la acción en R es a través de comandos o instrucciones.

Calculadora

Sirve como calculadora, los espacios no son necesarios, perso se recomiendan para mejorar la legibilidad. Se puede usar operadores aritméticos.

Nota:

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.

Vectores

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"

Funciones

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

Ejercicio 1

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

Vectores atómicos

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.

Vectores no atómicos

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"

Ejercicio 2

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"

Directorios

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"