# 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