#la "c" es el nombre del vector y los valores en parentesis es
#la definición del valor de c.
c(1,2.3,-0.56)
## [1] 1.00 2.30 -0.56
c
## function (...) .Primitive("c")
#operador ":" es para indicar un rango
1:5
## [1] 1 2 3 4 5
15:20
## [1] 15 16 17 18 19 20
#la función secuencia permite que los valores que deseamos se
#desplieguen conforme a los valores que asignemos en este caso
#nos va a dar un vector con los valores de -1 hasta 1, para el 2
#caso nos dará un valor de -2 a 9
seq(-1,1,0.5)
## [1] -1.0 -0.5 0.0 0.5 1.0
seq(-2,9)
## [1] -2 -1 0 1 2 3 4 5 6 7 8 9
#la función rep, repite los valores indicados en la función "c"
#parentesis hasta el numero de veces que se desee
rep(c(1,2),3)
## [1] 1 2 1 2 1 2
rep(c(3,4),4)
## [1] 3 4 3 4 3 4 3 4
rep(c(3:10),4)
## [1] 3 4 5 6 7 8 9 10 3 4 5 6 7 8 9 10 3 4 5 6 7 8 9
## [24] 10 3 4 5 6 7 8 9 10
#la función c sirve para definir un vector de datos o una lista
#de datos, el resultado es 1.2 2.7 3.0 4.0 5.0
c(c(1.2,2.7),3:5)
## [1] 1.2 2.7 3.0 4.0 5.0
#el comando <- sirve para definir una variable
v<-1:5
v
## [1] 1 2 3 4 5
#append sirva paa pegar datos, en este caso del valor v y
#cuando termina v pega los que se definen en la función c.
append(v,c(6,7))
## [1] 1 2 3 4 5 6 7
#LA FUNCIÓN C también acepta texto
c(T,F,F,T)
## [1] TRUE FALSE FALSE TRUE
#aqui termina clase 1
#en la documentación de R para el caso de la función c explica que
#c es una función genérica que combina sus argumentos, el método predeterminado
#combina sus argumentos para formar un vector, todos los argumentos son obligados a
#ser del mismo tipo, que es el tipo del valor dado y el único valor removido es texto.
c(1,7:9)
## [1] 1 7 8 9
c(1:5, 10.5, "next")
## [1] "1" "2" "3" "4" "5" "10.5" "next"
#uses with a single argument to drop attributes
x <- 1:4
x
## [1] 1 2 3 4
#la funcion names es para obtener o definir los nombres de un atributo
#la funcion letters es para constantes en letra minuscula
#ahora x tiene letras y números
names(x) <- letters[1:4]
x
## a b c d
## 1 2 3 4
#ahora tomamos la función c para tomar nuestro argumento que contiene letras y numeros
c(x)
## a b c d
## 1 2 3 4
#usando esta función removemos el texto de nuestro argumento
as.vector(x)
## [1] 1 2 3 4
#funcion para recuperar la dimensión del argumento
dim(x)
## NULL
#el resultado es nulo porque no se ha definido la dimensión del argumento
x
## a b c d
## 1 2 3 4
#función para definir la dimensión de un argumento
dim(x)<-c(2,2)
#muestra una matriz de 2x2, que es igual a la definición que hicimos
x
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
#a función c ahora sólo nos muestra 4 elementos en el argumento, ya no muestra las letras
c(x)
## [1] 1 2 3 4
#la funcion vector nos muestra los mismos 4 elementos numericos
as.vector(x)
## [1] 1 2 3 4
## append to a list (pegar a una lista):
#nombramos a la lista "ll"
ll <- list(A = 1, c = "C")
ll
## $A
## [1] 1
##
## $c
## [1] "C"
## do *not* use (no usar)
c(ll, d = 1:3) # which is == c(ll, as.list(c(d = 1:3))
## $A
## [1] 1
##
## $c
## [1] "C"
##
## $d1
## [1] 1
##
## $d2
## [1] 2
##
## $d3
## [1] 3
## but rather -mejor usar
c(ll, d = list(1:3)) # c() combining two lists
## $A
## [1] 1
##
## $c
## [1] "C"
##
## $d
## [1] 1 2 3
# If recursive = TRUE, the function recursively descends through lists (and pairlists) combining all their elements into a vector.
c(list(A = c(B = 1)), recursive = TRUE)
## A.B
## 1
c(list(A = c(B = 1, C = 2), B = c(E = 7)), recursive = TRUE)
## A.B A.C B.E
## 1 2 7
# }
#otros básicos:NO MUCHAS LINEAS DE EXPLICACIÓN
#MATRICES
M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)
M
## [,1] [,2] [,3]
## [1,] "a" "a" "b"
## [2,] "c" "b" "a"
print(M)
## [,1] [,2] [,3]
## [1,] "a" "a" "b"
## [2,] "c" "b" "a"
M = matrix( c('a','a','b','c','b','a','E','F','G'), nrow = 3, ncol = 3, byrow = TRUE)
print(M)
## [,1] [,2] [,3]
## [1,] "a" "a" "b"
## [2,] "c" "b" "a"
## [3,] "E" "F" "G"
#ARRAY dim=c(3,3) dimension matriz y ,2 numero de matrices
a <- array(c('green','yellow'),dim = c(3,3,2))
print
## function (x, ...)
## UseMethod("print")
## <bytecode: 0x000000001c1db7c8>
## <environment: namespace:base>
b <- array(c('green','yellow'),dim = c(2,2,2))
print(b)
## , , 1
##
## [,1] [,2]
## [1,] "green" "green"
## [2,] "yellow" "yellow"
##
## , , 2
##
## [,1] [,2]
## [1,] "green" "green"
## [2,] "yellow" "yellow"
c <- array(c('green','yellow'),dim = c(2,2,3))
print(c)
## , , 1
##
## [,1] [,2]
## [1,] "green" "green"
## [2,] "yellow" "yellow"
##
## , , 2
##
## [,1] [,2]
## [1,] "green" "green"
## [2,] "yellow" "yellow"
##
## , , 3
##
## [,1] [,2]
## [1,] "green" "green"
## [2,] "yellow" "yellow"
d <- array(c('green','yellow','red'),dim = c(2,2,3))
print(d)
## , , 1
##
## [,1] [,2]
## [1,] "green" "red"
## [2,] "yellow" "green"
##
## , , 2
##
## [,1] [,2]
## [1,] "yellow" "green"
## [2,] "red" "yellow"
##
## , , 3
##
## [,1] [,2]
## [1,] "red" "yellow"
## [2,] "green" "red"
l<-list(3.2,"Hola", TRUE, 2+4i)
l
## [[1]]
## [1] 3.2
##
## [[2]]
## [1] "Hola"
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] 2+4i
#los elementos de una lista están enumerados
alumno<-list(nota=7.2,nombre="N.Fernandez",aprobado=TRUE)
alumno$nota
## [1] 7.2
#elemnto 2 del objeto alumno.
alumno[[2]]
## [1] "N.Fernandez"
#se puede abreviar el nombre del campo, pero si hay alguno inicia con el mismo nombre
#el resultado sera null
alumno$no
## NULL
#funcion lapply para aplicar una función a los elementos de una lista
l<-list(a=seq(1,4),b=rep(1,4))
l
## $a
## [1] 1 2 3 4
##
## $b
## [1] 1 1 1 1
lapply(l,sum) #para cada uno de los elementos de la lista sumamos sus componentes
## $a
## [1] 10
##
## $b
## [1] 4
#se usa para especificar los niveles que consta una clasificación discreta (variable categórica)
dias<-factor(levels=c("L","M","X","J","V"))
levels(dias)
## [1] "L" "M" "X" "J" "V"
#funcion cut para convertir una variable continua en discreta.
notas<-c(1.7,6.4,5.3,9.8,3.5,7.8)
cut(notas,breaks=c(0,5,7.5,9,10))
## [1] (0,5] (5,7.5] (5,7.5] (9,10] (0,5] (7.5,9]
## Levels: (0,5] (5,7.5] (7.5,9] (9,10]
cut(notas, breaks=c(0,5,7.5,9,10), labels=c("Sus","Apr","Not","Sob"))
## [1] Sus Apr Apr Sob Sus Not
## Levels: Sus Apr Not Sob
#funcion tapply para factores
alturas<- c(1.75, 1.68, 1.72, 2.03, 1.73, 1.69, 1.83, 1.92)
grupos<-factor(rep(c("Grupo1","Grupo2"),4))
grupos
## [1] Grupo1 Grupo2 Grupo1 Grupo2 Grupo1 Grupo2 Grupo1 Grupo2
## Levels: Grupo1 Grupo2
tapply(alturas,grupos, mean)
## Grupo1 Grupo2
## 1.7575 1.8300
alturas<- c(1.75, 1.68, 1.72, 2.03, 1.73, 1.69, 1.83, 1.92)
alturas
## [1] 1.75 1.68 1.72 2.03 1.73 1.69 1.83 1.92
#factores:variables categóricas
grupos<-factor(rep(c("Grupo1","Grupo2"),4))
grupos
## [1] Grupo1 Grupo2 Grupo1 Grupo2 Grupo1 Grupo2 Grupo1 Grupo2
## Levels: Grupo1 Grupo2
tabla<-data.frame(Alturas=alturas,Grupos=grupos)
tabla
## Alturas Grupos
## 1 1.75 Grupo1
## 2 1.68 Grupo2
## 3 1.72 Grupo1
## 4 2.03 Grupo2
## 5 1.73 Grupo1
## 6 1.69 Grupo2
## 7 1.83 Grupo1
## 8 1.92 Grupo2
#cambio de etiquetas
colnames(tabla)<-c("Alt","Grp")
rownames(tabla)<-c("U1","U2","U3","U4","U5","U6","U7","U8")
tabla
## Alt Grp
## U1 1.75 Grupo1
## U2 1.68 Grupo2
## U3 1.72 Grupo1
## U4 2.03 Grupo2
## U5 1.73 Grupo1
## U6 1.69 Grupo2
## U7 1.83 Grupo1
## U8 1.92 Grupo2
#los nombres pueden ayudarnos a acceder a la tabla
tabla$Alt
## [1] 1.75 1.68 1.72 2.03 1.73 1.69 1.83 1.92
tabla[5,]
## Alt Grp
## U5 1.73 Grupo1
tabla["U5",]
## Alt Grp
## U5 1.73 Grupo1
#Añadir nuevas entradas
#columnas
tabla$Nueva<-seq(1,8)
tabla
## Alt Grp Nueva
## U1 1.75 Grupo1 1
## U2 1.68 Grupo2 2
## U3 1.72 Grupo1 3
## U4 2.03 Grupo2 4
## U5 1.73 Grupo1 5
## U6 1.69 Grupo2 6
## U7 1.83 Grupo1 7
## U8 1.92 Grupo2 8
#filas
tabla["U9",]<-list(Alt=1.59,Grp="Grupo2",Nueva=9)
tabla
## Alt Grp Nueva
## U1 1.75 Grupo1 1
## U2 1.68 Grupo2 2
## U3 1.72 Grupo1 3
## U4 2.03 Grupo2 4
## U5 1.73 Grupo1 5
## U6 1.69 Grupo2 6
## U7 1.83 Grupo1 7
## U8 1.92 Grupo2 8
## U9 1.59 Grupo2 9
#tambien es posible acceder a los datos de una tabla utilizando indices
#fila
tabla[1,]
## Alt Grp Nueva
## U1 1.75 Grupo1 1
#columna
tabla[,1]
## [1] 1.75 1.68 1.72 2.03 1.73 1.69 1.83 1.92 1.59
#posicion especifica
tabla[3,1]
## [1] 1.72
#obtención de nombres
names(tabla)
## [1] "Alt" "Grp" "Nueva"
dimnames(tabla)
## [[1]]
## [1] "U1" "U2" "U3" "U4" "U5" "U6" "U7" "U8" "U9"
##
## [[2]]
## [1] "Alt" "Grp" "Nueva"
#dimensiones tabla
dim(tabla)
## [1] 9 3
nrow(tabla)
## [1] 9
ncol(tabla)
## [1] 3
#estructura de la tabla
str(tabla)
## 'data.frame': 9 obs. of 3 variables:
## $ Alt : num 1.75 1.68 1.72 2.03 1.73 1.69 1.83 1.92 1.59
## $ Grp : Factor w/ 2 levels "Grupo1","Grupo2": 1 2 1 2 1 2 1 2 2
## $ Nueva: num 1 2 3 4 5 6 7 8 9
#estructuras de control
#ifelse expresion de tres argumentos, expresión de evaluación,cuando es cierta y cuando es falsa
x<-c(1,-2,4,-3.2,0.-9)
y<-ifelse(x<0,-x+1,x)
y
## [1] 1.0 3.0 4.0 4.2 10.0
#permiten repetir el código cierto numero de veces
#1.for:recorre elementos de una secuencia y repite el código que se proporciona
total<-0
for (i in c(2,3,5,8)) {
total<-total+i
}
total
## [1] 18
#2.while:se ejecuta el codigo mientras se cumpla la condicion
y<-0; suma<-0
while (y<5){
suma<- suma+y
y<-y+1
}
suma
## [1] 10
y
## [1] 5
y<-0; suma<-0
while (y<4){
suma<- suma+y
y<-y+1
}
suma
## [1] 6
y
## [1] 4
#3.repeat:se repite cierto código hasta que se ejecuta un break
#que indica que saldremos del bucle
y<-0; suma<-0
repeat {
suma<- suma+y
y<-y+1
if (y==5)break
}
suma
## [1] 10
y
## [1] 5
#es mas eficiente usar funciones a bucles.
#nos permite crear nuestras propias funciones
sumprod<-function(x,y){
return((x+y)/(x*y))
}
#hemos definido una función de nombre sumprod que tiene
#dos parametros de entrada x y y que devuelve un resultado con "return"
sumprod(2,3)
## [1] 0.8333333
#también es posible definir nuevos operadores binarios, asignando el
#símbolo del operador a utilizar el lugar del nombre de la función:
"%@%"<-function(x,y){
return((x+y)/(x*y))
}
2%@%3
## [1] 0.8333333
#también es posible especificar valores por defecto en los parametros
#de la función
sumprod<-function(x,y=1){
return((x+y)/(x*y))
}
sumprod(3)
## [1] 1.333333
#inclusive se puede que los valores se obtengan a partir de parametros
sumprod<-function(x,y=length(x)){
return((x+y)/(x*y))
}
v<-seq(1,3)
sumprod(v)
## [1] 1.3333333 0.8333333 0.6666667
#podemos utilizar la funcion missing para comprobar si un determinado
#parametro ha sido proporcionado o no a la hora de llamar nuestra función:
f<-function(x=1,y){
if (missing(y)){
y<-2
}
return(x+y)
}
#evaluamos la funcion en 2
f(2)
## [1] 4
f(2,3)
## [1] 5
#parametros adicionales que no son conocidos al momento de declarar la funcion
f<-function(x,y=2,...){
args<-list(...) #obtenemos lista de argumentos
for (arg in args){ #recorremos la lista
print(arg)
}
}