1) Dados los siguientes objetos. Cuál es la clase (class()) y el tipo (typeof()) de cada objeto ¿Ve alguna diferencia entre los resultados obtenidos con class() y con typeof()? ¿Qué significa que un objeto sea integer o double? (2pts). — #### Desarrollo ##### Objeto 1:
objeto_1 <- "HolaMundo"
#Clase:
class(objeto_1)
## [1] "character"
#Tipo:
typeof(objeto_1)
## [1] "character"
objeto_2 <- 1L
#Clase
class(objeto_2)
## [1] "integer"
#Tipo
typeof(objeto_2)
## [1] "integer"
objeto_3 <- 9.2
#Clase
class(objeto_3)
## [1] "numeric"
#Tipo
typeof(objeto_3)
## [1] "double"
objeto_4 <- TRUE
#Clase
class(objeto_4)
## [1] "logical"
#Tipo
typeof(objeto_4)
## [1] "logical"
Ambas funciones entregan información sobre los objetos, sin embargo usan perspectivas diferentes. Class indica la clase de un objeto, que determina su comportamiento y cómo interactúa con funciones y métodos. Por otro lado, typeof revela el tipo de datos subyacente, describiendo cómo el objeto se almacena en la memoria. En cuanto a que se refiere con que un objeto sea double o interger; en primer lugar con double entiendo que se refiere a que la funcion typeof lo reconoce como un numero de “coma flotante” asi con que en un mismo set de datos podria decirse numericos tengo numeros con una coma decimal explicita como “2.1” y otros que no como “2” y en class se almacenarian como numeric. Por otro lado para interger en class se reconoce como numeric pero en typeof se trataria de un numero entero sin decimales, ni comas flotantes. En resumen ambos son de clase numerica pero la forma en que son los datos y se almacenan es diferente por que estos set de datos presentan diferencias como tal.
2) Realice las siguientes operaciones aritméticas (con: +, -, por, /, ˆ, %%, %/%, sqrt(), log(), pi()). (2pts)
numero_inicial <- 10.0
numero_inicial
## [1] 10
Divida numero_inicial por 2
obj_division <- numero_inicial/2
obj_division
## [1] 5
Obtenga el resto de la división de numero_inicial por 2
obj_resto <- numero_inicial%%2
obj_resto
## [1] 0
Realize una división entera de numero_inicial por 2
obj_div_entera <- numero_inicial%/%2
obj_div_entera
## [1] 5
Multiplique obj_division por 2
obj_multiplicacion <- obj_division*2
obj_multiplicacion
## [1] 10
Sume el obj_division com el obj_multiplicacion
obj_adicion <- (obj_division)+(obj_multiplicacion)
obj_adicion
## [1] 15
Reste el obj_multiplicacion a numero_inicial
objeto_subtraccion <- (numero_inicial)-(obj_multiplicacion)
objeto_subtraccion
## [1] 0
Eleve el numero_inicial al cubo
obj_elevacion <- numero_inicial^2
obj_elevacion
## [1] 100
Calcule la raiz cuadrada de numero_inicial
obj_raiz <- sqrt(numero_inicial)
obj_raiz
## [1] 3.162278
Calcule el logaritmo en base 10 de numero_inicial multiplicado por pi
obj_log_por_pi <- log10(numero_inicial*pi)
obj_log_por_pi
## [1] 1.49715
3)Borre de la memoria de R los objetos creados en las dos preguntas anteriores. Despues borre especificamente el objeto creado en el siguiente chunk (vea la función rm() y sus ejemplos) (2pts).
Objetos en memoria:
ls()
## [1] "numero_inicial" "obj_adicion" "obj_div_entera"
## [4] "obj_division" "obj_elevacion" "obj_log_por_pi"
## [7] "obj_multiplicacion" "obj_raiz" "obj_resto"
## [10] "objeto_1" "objeto_2" "objeto_3"
## [13] "objeto_4" "objeto_subtraccion"
Ocupe rm() para borrar todos los objetos en memoria:
rm(list = ls())
Borre un objeto en especifico”
borrame <- '¿Podrías borrarme, porfi? No me gusta existir. Creo que tengo problemas existenciales'
borrame
## [1] "¿Podrías borrarme, porfi? No me gusta existir. Creo que tengo problemas existenciales"
rm(borrame)
4) Genere vectores que contengan (2pts):
a<-rep("hola mundo", times=25)
print(a)
## [1] "hola mundo" "hola mundo" "hola mundo" "hola mundo" "hola mundo"
## [6] "hola mundo" "hola mundo" "hola mundo" "hola mundo" "hola mundo"
## [11] "hola mundo" "hola mundo" "hola mundo" "hola mundo" "hola mundo"
## [16] "hola mundo" "hola mundo" "hola mundo" "hola mundo" "hola mundo"
## [21] "hola mundo" "hola mundo" "hola mundo" "hola mundo" "hola mundo"
b<-seq(0,100 , by = 2)
print(b)
## [1] 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36
## [20] 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74
## [39] 76 78 80 82 84 86 88 90 92 94 96 98 100
c <- rnorm(1000, mean = 10, sd = 2)
#print(c)
mean(c) #media de c
## [1] 10.00994
sd(c) #desviacion estandar de c
## [1] 2.022076
e<-runif(n = 10, min = 0, max = 10)
print(e)
## [1] 6.3603361 8.8706346 4.4706203 7.7172652 8.3339338 7.9628273 9.4973741
## [8] 6.0278338 0.7583127 3.2462403
f<-e*5
print(f)
## [1] 31.801681 44.353173 22.353101 38.586326 41.669669 39.814137 47.486871
## [8] 30.139169 3.791563 16.231202
g <- c(f,77)
print(g)
## [1] 31.801681 44.353173 22.353101 38.586326 41.669669 39.814137 47.486871
## [8] 30.139169 3.791563 16.231202 77.000000
#?cumsum
h <- cumsum(2:20)
print(h)
## [1] 2 5 9 14 20 27 35 44 54 65 77 90 104 119 135 152 170 189 209
5)Genere dos vectores,un vector alpha con los números del 1 al 10 y un vectos beta de largo 5 con nombres de frutas.En base a estos responda (5pts):
alpha <- 1:10
beta <- c("frambuesa","murta","frutilla","manzana","grosella")
#?length #con la funcion length()
length(alpha) #ejemplo usando alpha
## [1] 10
# Primer elemento
alpha[1] #de alpha
## [1] 1
beta[1] #de beta
## [1] "frambuesa"
# Último elemento
alpha[length(alpha)] #de alpha
## [1] 10
beta[length(beta)] #de beta
## [1] "grosella"
#suponiendo que quiero añadir un elemento "mango" a beta
beta[length(beta)] <- "mango"
mean(alpha) #media
## [1] 5.5
sd(alpha) #desviación estándar
## [1] 3.02765
var(alpha) #varianza
## [1] 9.166667
max(alpha) #valor máximo
## [1] 10
min(alpha) #valor mínimo
## [1] 1
combinao<- list(alpha = alpha, beta = beta)
combinao
## $alpha
## [1] 1 2 3 4 5 6 7 8 9 10
##
## $beta
## [1] "frambuesa" "murta" "frutilla" "manzana" "mango"
#?summary
summary(alpha) #alpha
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 3.25 5.50 5.50 7.75 10.00
#summary(beta) #beta
#de menor a mayor / de la a a la z
sort(alpha) #alpha
## [1] 1 2 3 4 5 6 7 8 9 10
sort(beta) #beta
## [1] "frambuesa" "frutilla" "mango" "manzana" "murta"
#de mayor a menor / de z a a
sort(alpha, decreasing = TRUE) #alpha
## [1] 10 9 8 7 6 5 4 3 2 1
sort(beta, decreasing = TRUE) #beta
## [1] "murta" "manzana" "mango" "frutilla" "frambuesa"
alpha[which(alpha >= 8)]
## [1] 8 9 10
sample(alpha, 5, replace = TRUE) #alpha
## [1] 1 1 6 8 9
sample(beta, 5, replace = TRUE) #beta
## [1] "murta" "manzana" "frutilla" "frutilla" "frambuesa"
sample(alpha) #alpha
## [1] 7 3 5 10 4 6 1 9 8 2
sample(beta) #beta
## [1] "mango" "frutilla" "frambuesa" "manzana" "murta"
6) El siguiente código contiene 8 errores, corríjalos (2pts):
#Error 1: el nombre de la variable esta mal escrito en el segundo enunciado
mi_variable1 <- 10
print(mi_variable1)
## [1] 10
#Error 2: incluir c y comillas
mi_vector_numerico <- c(1, 23, 4, 5, 6, 7, 8, 9, 10, NA)
print(class(mi_vector_numerico))
## [1] "numeric"
#Error 3: escribir mean y quitar valores na
mi_media <- mean(mi_vector_numerico, na.rm = TRUE)
print(mi_media)
## [1] 8.111111
#Error 4: usar == para comparar en vez de =, pq = es como usar <- para asignar
a <- 10
b <- 10
print(paste("¿A es igual a B?:", a == b))
## [1] "¿A es igual a B?: TRUE"
#Error 5: añadir , y '', y cerrar con []
vector_caracteres <- c('uno', 'dos', 'tres', 'cuatro', 'cinco')
print(vector_caracteres[-1])
## [1] "dos" "tres" "cuatro" "cinco"
# Error 6: fn max() no se escribe en mayuscular
valor_maximo <- max(runif(100, 0, 50))
# Error 7: usamos un valor inexistente
v <- 1:5
v[length(v)]
## [1] 5
# Error 8: arreglar comillas
print("Hola mundo")
## [1] "Hola mundo"
7) Genere los objetos numéricos aa, bb, cc y dd de tal manera que se cumpla que:
aa es mayor que bb
bb es igual a cc
aa es distinto a bb
aa es menor o igual a dd
#definir los objetos
aa <- 10 # dar valor a A
bb <- 5 # dar valor a B que sea menor que A
cc <- bb # igualar cc a bb
dd <- 15 # dar valor dd
#verificar que las condiciones se cumplan
aa > bb
## [1] TRUE
bb == cc
## [1] TRUE
aa != bb
## [1] TRUE
aa <= dd
## [1] TRUE
8) Use paste() para escribir el siguiente texto “hola estrellitas el mundo les dice hola”, con un espacio de separación entre palabras. Repita el proceso con las siguientes separaciones: “/” y “._.”. Después ocupe paste0() ¿en qué se diferencia paste() y paste0()? (2pts) #### Desarrollo
#usando paste y un espacio de separacion
texto_espacio <- paste("hola", "estrellitas", "el", "mundo", "les", "dice", "hola", sep = " ")
print(texto_espacio)
## [1] "hola estrellitas el mundo les dice hola"
#usando paste con "/" de separación
texto_slash <- paste("hola", "estrellitas", "el", "mundo", "les", "dice", "hola", sep = "/")
print(texto_slash)
## [1] "hola/estrellitas/el/mundo/les/dice/hola"
#usando paste() con "._." de separación
texto_punto <- paste("hola", "estrellitas", "el", "mundo", "les", "dice", "hola", sep = "._.")
print(texto_punto)
## [1] "hola._.estrellitas._.el._.mundo._.les._.dice._.hola"
texto_paste0<- paste0("hola", "estrellitas", "el", "mundo", "les", "dice", "hola")
print(texto_paste0)
## [1] "holaestrellitaselmundolesdicehola"
# Usando paste0() no se admite separador personalizado
9) Diga cuáles son las variables del data frame “trees” (contenido en R base), en qué unidades de medida estan cada una y cuál es la fuente de los datos. Ocupe la función colnames() para saber el nombre de las columnas de data frame y nrow() para saber la cantidad de observaciones. Ocupe las funciones glimpse(), view() y summary() sobre el data frame y vea que ocurre. Tenga en cuenta que estas funciones son del paquete tidyverse (cárguelo).Además, usé [ ] y comparaciones lógicas para saber a través de un vector booleano (TRUE/FALSE) cuáles árboles son mayores a 80. (2pts) print(trees)
print(trees) #ver datos
## Girth Height Volume
## 1 8.3 70 10.3
## 2 8.6 65 10.3
## 3 8.8 63 10.2
## 4 10.5 72 16.4
## 5 10.7 81 18.8
## 6 10.8 83 19.7
## 7 11.0 66 15.6
## 8 11.0 75 18.2
## 9 11.1 80 22.6
## 10 11.2 75 19.9
## 11 11.3 79 24.2
## 12 11.4 76 21.0
## 13 11.4 76 21.4
## 14 11.7 69 21.3
## 15 12.0 75 19.1
## 16 12.9 74 22.2
## 17 12.9 85 33.8
## 18 13.3 86 27.4
## 19 13.7 71 25.7
## 20 13.8 64 24.9
## 21 14.0 78 34.5
## 22 14.2 80 31.7
## 23 14.5 74 36.3
## 24 16.0 72 38.3
## 25 16.3 77 42.6
## 26 17.3 81 55.4
## 27 17.5 82 55.7
## 28 17.9 80 58.3
## 29 18.0 80 51.5
## 30 18.0 80 51.0
## 31 20.6 87 77.0
colnames(trees) #ver nombres de columnas
## [1] "Girth" "Height" "Volume"
nrow(trees) #saber la cant de observaciones
## [1] 31
library(tidyverse) #llamar libreria
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
glimpse(trees) #ver df rapidamente
## Rows: 31
## Columns: 3
## $ Girth <dbl> 8.3, 8.6, 8.8, 10.5, 10.7, 10.8, 11.0, 11.0, 11.1, 11.2, 11.3, …
## $ Height <dbl> 70, 65, 63, 72, 81, 83, 66, 75, 80, 75, 79, 76, 76, 69, 75, 74,…
## $ Volume <dbl> 10.3, 10.3, 10.2, 16.4, 18.8, 19.7, 15.6, 18.2, 22.6, 19.9, 24.…
#view(trees)
summary(trees) #obtener estadigrafos comunes
## Girth Height Volume
## Min. : 8.30 Min. :63 Min. :10.20
## 1st Qu.:11.05 1st Qu.:72 1st Qu.:19.40
## Median :12.90 Median :76 Median :24.20
## Mean :13.25 Mean :76 Mean :30.17
## 3rd Qu.:15.25 3rd Qu.:80 3rd Qu.:37.30
## Max. :20.60 Max. :87 Max. :77.00
trees$Height > 80 #id arborles mayores a 80 pies
## [1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE TRUE TRUE FALSE FALSE FALSE TRUE
trees[trees$Height > 80, ] #filtrar arboles mayores a 80 pies
## Girth Height Volume
## 5 10.7 81 18.8
## 6 10.8 83 19.7
## 17 12.9 85 33.8
## 18 13.3 86 27.4
## 26 17.3 81 55.4
## 27 17.5 82 55.7
## 31 20.6 87 77.0