# Ctrl + Shift + C para comentar lineas
# Ctrl + Alt + R para correr todo el codigo
# Ctrl + R correr la linea donde esta el cursor
# Ctrol + L Limpiar la consola
# Introducción a R --------------------------------------------------------


#Definición o asignación de variables
#Se pueden definir varialves con el operador = o con una flecha <-

a = 1
b <- 2

#Existen diferentes clases de objetos en R

#Caracteres
#Numeros (reales)
#Enteros
#Complejos
#Logicos (True/False)

#---------------------------------Vectores----------------------------------#
#Tambien podemos crear vectores que tengan diferentes clases de objetos
#Vector con numeros enteros
vectorA = c(1,5)

#Vector con caracteres
vectorB = c('hola', 'bien','modelos')

#Vector con diferentes calses de objetos
vectorDiverso = c(1.4, 'dos', TRUE)
class(vectorDiverso)

vectorExplicito = 0:7
class(vectorExplicito)

as.character(vectorExplicito)

as.logical(vectorExplicito)

#------------------------------------Paquetes en R--------------------------#

# install.packages("Nombre del paquete")
# library('Nombre del paquete')

install.packages('markovchain')
library('markovchain')

#------------------------------------Funciones en R-------------------------#

#estructura de codigo de una función
funcion1 = function(arg1,arg2){
  statements
  return(object)
}
#Ejemplo: Crear una función que reciba como parametro un numero y calcule su 
#raiz cubica y suma 10

funcion2 = function(n){
  valor = (n^(1/3))+10
  return(valor)
}
funcion2(4)


#Una función, no necesariamente debe retornar un valor numerico, puede retornar graficas
funcion3 = function(x){
  y <- seq(from = 1, to = length(x), by = 1)
  plot(y,x, type = 'c', col = 'red')
}

vector1 = c(5,4,7,6,10)
funcion3(vector1)

#Recorridos en R
funcion4 = function(v1,v2){
  vectorResultado = rep(0,times = length(v1))
  
  for(i in 1:length(v1)){
    vectorResultado[i] = max(v1[i],v2[i])
  }
  return(vectorResultado)
}

vectorp = c(2,3,4,5,6)
vectorp2 = c(3,1,9,8,2)

funcion4(vectorp,vectorp2)


#Estructuras de control o condicionales
x = 4
if (x <= 10) {
  print('x es menor a 10')
} else {
  print('x es mayor a 10')
} 

x = 10
if (x > 1 & x < 7) {
  print('X es un numero entre 1 y 7')
} else if (x > 8 & x < 15) {
  print(('X es un numero entre 8 y 15'))
}

#Poniendo en practica lo aprendido, vamos a elaborar una función que retorne TRUE
#si un numero especifico esta dentro de un vector

funcion5 = function(vector,n){
  for (i in 1:length(vector)) {
    if (vector[i] == n) {
      return(TRUE)
    } 
  }
  return(FALSE)
}


vectorE = c(3,4,7,9,10,18,23,78,95)
y = 18
funcion5(vectorE,y)

#Graficas en R
#Vamos a crear un grafico de lineas usando dos vectores

vectorC = c(1,3,4,7,8,4,2)
vectorD = c(1,2,3,4,5,6,7)

grafica = plot(vectorD, vectorC, type = 'l', col = 'blue')
LS0tDQp0aXRsZTogIkNtcDEiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0KDQojIEN0cmwgKyBTaGlmdCArIEMgcGFyYSBjb21lbnRhciBsaW5lYXMNCiMgQ3RybCArIEFsdCArIFIgcGFyYSBjb3JyZXIgdG9kbyBlbCBjb2RpZ28NCiMgQ3RybCArIFIgY29ycmVyIGxhIGxpbmVhIGRvbmRlIGVzdGEgZWwgY3Vyc29yDQojIEN0cm9sICsgTCBMaW1waWFyIGxhIGNvbnNvbGENCiMgSW50cm9kdWNjacOzbiBhIFIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQojRGVmaW5pY2nDs24gbyBhc2lnbmFjacOzbiBkZSB2YXJpYWJsZXMNCiNTZSBwdWVkZW4gZGVmaW5pciB2YXJpYWx2ZXMgY29uIGVsIG9wZXJhZG9yID0gbyBjb24gdW5hIGZsZWNoYSA8LQ0KDQphID0gMQ0KYiA8LSAyDQoNCiNFeGlzdGVuIGRpZmVyZW50ZXMgY2xhc2VzIGRlIG9iamV0b3MgZW4gUg0KDQojQ2FyYWN0ZXJlcw0KI051bWVyb3MgKHJlYWxlcykNCiNFbnRlcm9zDQojQ29tcGxlam9zDQojTG9naWNvcyAoVHJ1ZS9GYWxzZSkNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVZlY3RvcmVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMNCiNUYW1iaWVuIHBvZGVtb3MgY3JlYXIgdmVjdG9yZXMgcXVlIHRlbmdhbiBkaWZlcmVudGVzIGNsYXNlcyBkZSBvYmpldG9zDQojVmVjdG9yIGNvbiBudW1lcm9zIGVudGVyb3MNCnZlY3RvckEgPSBjKDEsNSkNCg0KI1ZlY3RvciBjb24gY2FyYWN0ZXJlcw0KdmVjdG9yQiA9IGMoJ2hvbGEnLCAnYmllbicsJ21vZGVsb3MnKQ0KDQojVmVjdG9yIGNvbiBkaWZlcmVudGVzIGNhbHNlcyBkZSBvYmpldG9zDQp2ZWN0b3JEaXZlcnNvID0gYygxLjQsICdkb3MnLCBUUlVFKQ0KY2xhc3ModmVjdG9yRGl2ZXJzbykNCg0KdmVjdG9yRXhwbGljaXRvID0gMDo3DQpjbGFzcyh2ZWN0b3JFeHBsaWNpdG8pDQoNCmFzLmNoYXJhY3Rlcih2ZWN0b3JFeHBsaWNpdG8pDQoNCmFzLmxvZ2ljYWwodmVjdG9yRXhwbGljaXRvKQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUGFxdWV0ZXMgZW4gUi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIw0KDQojIGluc3RhbGwucGFja2FnZXMoIk5vbWJyZSBkZWwgcGFxdWV0ZSIpDQojIGxpYnJhcnkoJ05vbWJyZSBkZWwgcGFxdWV0ZScpDQoNCmluc3RhbGwucGFja2FnZXMoJ21hcmtvdmNoYWluJykNCmxpYnJhcnkoJ21hcmtvdmNoYWluJykNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUZ1bmNpb25lcyBlbiBSLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMNCg0KI2VzdHJ1Y3R1cmEgZGUgY29kaWdvIGRlIHVuYSBmdW5jacOzbg0KZnVuY2lvbjEgPSBmdW5jdGlvbihhcmcxLGFyZzIpew0KICBzdGF0ZW1lbnRzDQogIHJldHVybihvYmplY3QpDQp9DQojRWplbXBsbzogQ3JlYXIgdW5hIGZ1bmNpw7NuIHF1ZSByZWNpYmEgY29tbyBwYXJhbWV0cm8gdW4gbnVtZXJvIHkgY2FsY3VsZSBzdSANCiNyYWl6IGN1YmljYSB5IHN1bWEgMTANCg0KZnVuY2lvbjIgPSBmdW5jdGlvbihuKXsNCiAgdmFsb3IgPSAobl4oMS8zKSkrMTANCiAgcmV0dXJuKHZhbG9yKQ0KfQ0KZnVuY2lvbjIoNCkNCg0KDQojVW5hIGZ1bmNpw7NuLCBubyBuZWNlc2FyaWFtZW50ZSBkZWJlIHJldG9ybmFyIHVuIHZhbG9yIG51bWVyaWNvLCBwdWVkZSByZXRvcm5hciBncmFmaWNhcw0KZnVuY2lvbjMgPSBmdW5jdGlvbih4KXsNCiAgeSA8LSBzZXEoZnJvbSA9IDEsIHRvID0gbGVuZ3RoKHgpLCBieSA9IDEpDQogIHBsb3QoeSx4LCB0eXBlID0gJ2MnLCBjb2wgPSAncmVkJykNCn0NCg0KdmVjdG9yMSA9IGMoNSw0LDcsNiwxMCkNCmZ1bmNpb24zKHZlY3RvcjEpDQoNCiNSZWNvcnJpZG9zIGVuIFINCmZ1bmNpb240ID0gZnVuY3Rpb24odjEsdjIpew0KICB2ZWN0b3JSZXN1bHRhZG8gPSByZXAoMCx0aW1lcyA9IGxlbmd0aCh2MSkpDQogIA0KICBmb3IoaSBpbiAxOmxlbmd0aCh2MSkpew0KICAgIHZlY3RvclJlc3VsdGFkb1tpXSA9IG1heCh2MVtpXSx2MltpXSkNCiAgfQ0KICByZXR1cm4odmVjdG9yUmVzdWx0YWRvKQ0KfQ0KDQp2ZWN0b3JwID0gYygyLDMsNCw1LDYpDQp2ZWN0b3JwMiA9IGMoMywxLDksOCwyKQ0KDQpmdW5jaW9uNCh2ZWN0b3JwLHZlY3RvcnAyKQ0KDQoNCiNFc3RydWN0dXJhcyBkZSBjb250cm9sIG8gY29uZGljaW9uYWxlcw0KeCA9IDQNCmlmICh4IDw9IDEwKSB7DQogIHByaW50KCd4IGVzIG1lbm9yIGEgMTAnKQ0KfSBlbHNlIHsNCiAgcHJpbnQoJ3ggZXMgbWF5b3IgYSAxMCcpDQp9IA0KDQp4ID0gMTANCmlmICh4ID4gMSAmIHggPCA3KSB7DQogIHByaW50KCdYIGVzIHVuIG51bWVybyBlbnRyZSAxIHkgNycpDQp9IGVsc2UgaWYgKHggPiA4ICYgeCA8IDE1KSB7DQogIHByaW50KCgnWCBlcyB1biBudW1lcm8gZW50cmUgOCB5IDE1JykpDQp9DQoNCiNQb25pZW5kbyBlbiBwcmFjdGljYSBsbyBhcHJlbmRpZG8sIHZhbW9zIGEgZWxhYm9yYXIgdW5hIGZ1bmNpw7NuIHF1ZSByZXRvcm5lIFRSVUUNCiNzaSB1biBudW1lcm8gZXNwZWNpZmljbyBlc3RhIGRlbnRybyBkZSB1biB2ZWN0b3INCg0KZnVuY2lvbjUgPSBmdW5jdGlvbih2ZWN0b3Isbil7DQogIGZvciAoaSBpbiAxOmxlbmd0aCh2ZWN0b3IpKSB7DQogICAgaWYgKHZlY3RvcltpXSA9PSBuKSB7DQogICAgICByZXR1cm4oVFJVRSkNCiAgICB9IA0KICB9DQogIHJldHVybihGQUxTRSkNCn0NCg0KDQp2ZWN0b3JFID0gYygzLDQsNyw5LDEwLDE4LDIzLDc4LDk1KQ0KeSA9IDE4DQpmdW5jaW9uNSh2ZWN0b3JFLHkpDQoNCiNHcmFmaWNhcyBlbiBSDQojVmFtb3MgYSBjcmVhciB1biBncmFmaWNvIGRlIGxpbmVhcyB1c2FuZG8gZG9zIHZlY3RvcmVzDQoNCnZlY3RvckMgPSBjKDEsMyw0LDcsOCw0LDIpDQp2ZWN0b3JEID0gYygxLDIsMyw0LDUsNiw3KQ0KDQpncmFmaWNhID0gcGxvdCh2ZWN0b3JELCB2ZWN0b3JDLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScpDQoNCg0KDQpgYGANCg0K