##########Introducción a R##########
##########Seminario Minería de Datos##########

#################################################################
#
#       FIRST VERSION   6/02/2014
#       THIS VERSION    15/02/2016
#
#       LAST REVISOR    Miguel Bernal
#
#       INPUT FILES:    
#                           
#     
#       OUTPUT FILES:   
#                       
#       
################################################################

#1.Cosas Básicas

#Si no saben nada de R y quieren conocer un poco más
help.start()

#Ayuda
help(q)
?q

??q
#q()

## numeral es para hacer comentarios



#Ignora espacios
3-1
3 -   1
#Sensible a mayúsculas y minúsculas


#< espera que ingresen un comando, + muestra que esta incompleto, Esc para terminar
3+
2  

#Historial de comandos, con las flechas se puede navegar.

#; sirve para varios comandos en una misma línea
-1/0; 0/0; 1/0; sqrt(-2+0i)

#Google!!! Muchos sitios, recomendado http://stackoverflow.com/

#Para asignar a objetos = , <-,->
m <- sqrt(25); "Manizales" -> man
b="Bogotá"
m
man
#Para mirar los objetos en la sesión
ls()


#Para borrar
rm(man)
remove(b)

#Para borrar todo
rm(list=ls())


#Las funciones predeterminadas son de la manera z(a=input1,b=input2,...)
#Si ponene las cosas en orden no hay que poner a=

###Directorio de trabajo


#Mirar el directorio de trabajo
getwd()

#Definir el directorio de trabajo
#O bien \\\\ o /

path<-"C:/Users/User/Documents"

setwd(path)
setwd("C:\\Users\\User\\Documents\\Miguel B\\Universidad\\Maestría\\Monitoría Minería de datos\\Intro R")


list.files()

simon<-read.csv("DF2.csv")


#Guardar un objeto particular
save(m,file="M.Rdata") 
#Guardar todo el espacio de trabajo
save.image("myfile.Rdata")
#Guardar historial de comandos
savehistory("myhist.Rhistory") 

#Cargarlos
load("myfile.Rdata")
loadhistory("hist.Rhistory")

#Guardar archivos en otros formatos

write("a<-3;print(ls())","hello.R")
#Cargarlos y evaluarlos! Súper importante
source("hello.R")


#####Operadores

#Aritméticos

#'+', '-', '*', '/', '^', '%%' (modulo)

8^3
8%%3

#Lógicos

#'&' (and ) , '|' (or ), '!' (not ), '==' (identity ), '!=' (not identical ),
#'<', '<=', '>=', '>', 'all()' (all value true? ), 'any()' (at least
#                                                           one value true? ), TRUE, FALSE
a=2
a

2!=2
2==2
2=2
#Matemáticos básicos

#'abs()', 'ceiling()', 'cos()', 'cumsum()', 'cumpro()', 'exp()',
#'length()', 'log()', 'log10()', 'min()', 'max()', 'order()',
#'product()', 'range()', 'rank()', 'round()', 'sqrt()',, 'sign()',
#'sin()', 'sinh()', 'sort()', 'sum()', 'tan()', 'floor()', 'Inf',
#'0i',... ; 'Arg()', 'Conj()', 'Im()', 'Mod()','Re()'.

(3+5i)*(3-2i)
sin(pi)

#Estadísticos básicos

#'cor', 'cov()', 'mean()', 'median()','quantile()', 'sample()', 'sd()',
#'table()', 'var()',...;
#'ddist ()', 'pdist ()', 'qdist ()', 'rdist ()'
#donde dist = {binom, chisq, exp, f, geom, lognorm, norm, t, unif, ...}.

y=runif(10)

###Objetos

#Vectores
#Mismo tipo ie logical, integer, numeric, complex, character o raw) y un largo

#Concatenar
a <- c(1,3,2,4,5); a
aa<-c(0,"miguel",TRUE)


c(0,2^2,mean(a),pi,"hello")

#Características del objeto
class(a)
str(a)
mode(a)

is.vector(a)

length(a)


#Secuencias
seq(1,5)
1:5
5:1
#Repeticiones

rep(x=1:3,times=2)
rep(x=1:3,times=1:3)


#Pegar objetos
paste("X",1:5,sep="")
paste(c("Ene","Feb"),2013,sep="---")

#Extraer partes del vector
x <- c(2,4,8)
x; x[2]; x[-2];x[c(1,3)]; x[rep(1:3,2)]

x[c(TRUE,TRUE,FALSE)]

x[(x>=2)&(x<=6)]

#Operaciones entre vectores, elemento a elemento

y<-seq(1,5,by=2)

x+y

3*x

#Otros tipos
gender <- rep(c("F","M"),c(3,2)); gender
mode(gender);levels(gender)

gender <- factor(gender); gender

as.character(gender)
as.numeric(gender)

#Factores ordenados
educ <- rep(c("High","Med","Low"),c(1,2,2));educ
educ <- ordered(educ,levels=c("Low","Med","High"));educ


##Matrices: varios vectores

B <- matrix(1:6,nrow=2,ncol=3,byrow=FALSE);B
A <- matrix(1:6,nrow=2,ncol=3,byrow=T);A

#Pegar 2 vectores
rbind(1:3,4:6)
V<-cbind(1:3,4:6)
V
dim(V)


#Extraer pedazos
V[3,2];V[3,];V[,2]
V[2]

V[-c(1,3),2]




#Operaciones
X <- matrix(1:4,ncol=2)
#Elementos
X*X

#Matricial
X%*%X

#Por filas o columnas

apply(X,MARGIN=1,FUN=sum)
rowSums(X)
?rowMeans


#Transponer
t(X)
x<-1:5
diag(x)
diag(X)

#Inversersa
solve(X)

eigen(X)



#Data frames: vectores de diferentes tipos

DF <- data.frame(name=c("BoA","BP","CITI","FAN","UBS","AIG"),
                pro=c(11,10,18,6,5,NA), cty=c("US","UK",
                            "US","US","CH","US")); DF

names(DF)

head(DF)
str(DF)

#Extraer elementos
DF[,2]; DF[,2][1:3]

DF$pro; DB$pro[1:3]
DF[[2]]; DF[[2]][1:3]
attach(DF); pro; pro[1:3]
summary(DF)
DF[cty=="US",c("name","pro")]
detach(DF)


#Listas conjuntos de todo tipo de objetos
mylist <- list(Day=c("Mo","Tu"),Place="Z¨urich",eigen(X),obj4=DF)
mylist



#Paquetes
#+ de 2000 paquetes 



library()

install.packages("HSAUR2")
update.packages()

library(HSAUR2)
require(HSAUR2)

library(randomForest)



#Datos
data()
data("Forbes2000", package="HSAUR2")

is.data.frame(Forbes2000); dim(Forbes2000)
names(Forbes2000)

#Funciones propias estrucutra my.fct <- function(arg1,arg2,...)
my.sqr <- function(x) {
  x^2
   }
my.sqr(1:5)


#EScribir el nombre de una funcion les muestra
my.sqr

#Otros importantes
for (i in 1:5) { print(1:i) }
i=1
while (i <= 5) { print(1:i); i = i + 1 }



#Escribir y cargar datos
write.table(DF,file="DF1.txt")
write.csv(DF,file="DF2.csv")
library(foreign)


DF1 <- read.table("DF1.txt")
DF2 <- read.csv("DF2.dat")

DF1; DF2

#Muchas opciones

#Graficas
par(mfrow=c(2,3))
set.seed(12); x <- rnorm(10)
for (i in c("p","l","b","c","h","s"))
   plot(x=x,type=i,
          main=paste("plot(type=",i,")",sep=""))

par(mfrow=c(1,3))
plot(x=-5:5,y=(-5:5)^2,main=expression(y==x^2))
hist(x,freq=FALSE)
lines(density(x),col="red")
rug(x)
boxplot(x,rt(10,3),rchisq(10,3),names=c("Norm","Stud","ChiSq"))
title("Box-plot")


##Otros lattice, ggplot2 etc.