Roger Guevara — May 21, 2014, 7:50 AM
#Operaciones básicas en R. Desde una ventana de código presiona CTRL R ó CTRL ENTER para que se ejecute la linea de código en donde está el cursor. Si seleccionas varias lineas de código presionas CTRL R ó CTRL ENTER se ejecutarán todas las lineas seleccionadas. En la ventana de CONSOLA aparecerán los resultados
3 + 5 # Suma
[1] 8
5 - 3 # resta
[1] 2
10 / 4 # División
[1] 2.5
7 * 17 # Multiplicación
[1] 119
2^3 # Elevar a una potencia
[1] 8
2**3 # Elevar a una potencia
[1] 8
25^(1/2) # Raíz cuadrada
[1] 5
sqrt(25) # Raíz cuadrada
[1] 5
#Para asignar valores a un nombre (OBJETO), se puede utilizar el simbolo <- . Si ejecutan una linea de código con el nombre de un objeto al que ya se le asignó un valor R mostrará en la consola el valor (o valores) que contenga este objeto
A <- 5 + 5
A
[1] 10
3 + 5 -> A
B <- 5 - 3
C <- 10 /4
D <- 7 * 17
E <- 2^3
A * B
[1] 16
G <- sqrt(25)
#Los nombres de los objetos pueden ser muy cortos, una letra, o muy largos. No se permiten espacios en los nombres, ni puende empezar con un numero.
MI_PRIMER.OBJETO.EN_R <-0 #Se puede usar punto dentro de los nombres de los obejtos, y tambien se puede usar guión bajo
#Se puede usar mayúsculas y minúsculas en los nombres de los objetos
VAR1 <- 18
VAR2 <- 4
Var.3 <- 56
#3Var <- 9 # Los nombres objetos no pueden empezar con un número
#Pueden asignar valores a un objetor a trevés de otro objeto. Ambos objetos contendrán la misma información
LUZ <- VAR1
VAR1 <- factorial(7)
#La función ls() despliega una lista de todos los objetos que se hayan creado
ls()
[1] "A" "B"
[3] "C" "D"
[5] "E" "G"
[7] "LUZ" "MI_PRIMER.OBJETO.EN_R"
[9] "Var.3" "VAR1"
[11] "VAR2"
#Para remover un objeto se usa la función rm()
VAR1
[1] 5040
rm(VAR1)
#Para remover todos los objetos podemos usar
rm(list=ls())
##
#runif() random uniforme
#rnorm() randon aleatorio
(700*10000)/100
[1] 70000
runif(1) #primer argumento es el número de datos que se van a generar
[1] 0.1474
runif(1, 0, 1) # el segundo y tercer argumento son los límites del intervalo entre los cuales queremos generar los valores aleatorios, en este caso entre 0 y 1 ...
[1] 0.356
runif(1, 0, 10) # ... y en este caso entre 0 y 10
[1] 3.136
?runif #un signo de interrogación seguido del nombre de la función despliega una ventana de ayuda para la función
#generamos diez mil números aleatorios entre 0 y 10
ALEAT1 <- runif(10000, 0, 10)
#Calculamos la media de los 10 mil valores
mean(ALEAT1)
[1] 5.046
#y representamos esos 10 mil valores en un histograma de frecuencias
hist(ALEAT1)
#generamos diez mil números aleatorios entre 0 y 10 y los redondeamos a un decil
ALEAT2 <- round(runif(10000, 0, 10),1)
#El redondeo lo podemos hacer en un solo paso dentro de una única linea de código o en dos pasos como se muestra abajo
ALEAT2 <- runif(10000, 0, 10)
ALEAT2 <- round(ALEAT2, 1)
#Calculamos la media de los 10 mil valores
mean(ALEAT2)
[1] 5.004
#representamos esos 10 mil valores en un histograma de frecuencias
hist(ALEAT2)
#Cambiamos el color de las barras
hist(ALEAT2, col = "red")
#ayuda de la funcición de histogramas
?hist
#generar un orden aleatorio de 100 muestras, individuos, etc
sample(1:100, replace = FALSE)
[1] 3 4 31 66 34 69 49 50 65 97 55 18 30 46 80 45 60
[18] 100 25 32 98 21 99 43 73 42 51 47 27 76 38 24 57 53
[35] 62 91 1 52 26 67 40 64 9 33 44 2 58 6 61 37 41
[52] 36 16 85 68 22 8 20 87 39 12 86 72 81 59 92 5 28
[69] 96 23 78 95 93 90 15 79 56 11 7 63 13 74 83 14 10
[86] 94 75 77 70 54 35 89 48 19 17 29 71 84 88 82
#Cambiamos el color del borde
hist(ALEAT2, col = "red", borde="green")
#cambiamos el tamaño de las fuentes en el gráfico, cex = "expansión de los caracteres"
par(cex = 2)
#Agregamos etiquetas a los ejes y título de la gráfica con x.lab, y.lab y maim
hist(ALEAT2, col = "red", borde= "green", xlab = "lo que sea", ylab = "Frecuencia", main = "Título")
#cambiamos los límites de los ejes con x.lim y y.lim
hist(ALEAT2, col = "red", borde= "green", xlab = "lo que sea", ylab = "Frecuencia", main = "Título", cex.main = 2, cex.lab = 2, cex.axis= 1.2, width=2, ylim= c(0, 2000), xlim= c(0, 20))
Warning: "width" is not a graphical parameter
Warning: "width" is not a graphical parameter
Warning: "width" is not a graphical parameter
#Cambiamos el tamaño de las fuentes de manera particular con cex.axis, cex.lab y cex.main
H <- hist(ALEAT2, col = c("red", "blue", "orchid"), borde= "green", xlab = "lo que sea", ylab = "Frecuencia", main = "Título", cex.main = 2, cex.lab = 2, cex.axis= 1.2, ylim= c(0, 2000))
#función concatenar, c(), para asignar varios valores a un solo objeto
c(6, 8, 12, 16, 90, 45)
[1] 6 8 12 16 90 45
#Se asigna 15 valores al objeto VAR4
VAR4 <- c(16, 17, 19, 2, 26, 19, 25, 1, 23, 26, 12, 8, 15, 9, 2)
par(cex = 1)
#gráfico de barras
#para agregar valores en el eje X usamos el argument names.arg
barplot(VAR4, col = c("darkred", "blue", "orchid", "grey", "tomato"), borde= "green", xlab = "Categoria de edad", ylab = "Frecuencia", main = "Título", cex.main = 2, cex.lab = 2, cex.axis= 1.2, ylim= c(0, 31), names.arg = c(1:15))
#Los colores de las barras los podemos definir mediante números del 1 al 8
barplot(VAR4, col = c(1,2,3,4,5,6,7,8), borde= "green", xlab = "lo que sea", ylab = "Frecuencia", main = "Título", cex.main = 2, cex.lab = 2, cex.axis= 1.2, ylim= c(0, 31), , names.arg = c(1:15))
barplot(VAR4, col = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14), borde= "green", xlab = "lo que sea", ylab = "Frecuencia", main = "Título", cex.main = 2, cex.lab = 2, cex.axis= 1.2, ylim= c(0, 31), space =0.03, angle = c(0,45, 90, 135), density= 8)
#Generamos números aleatorios
ALEATNORM <- rnorm(10000, mean = 0, sd = 1)
ALEATNORM2 <- rnorm(10000, mean = 0, sd = 3)
#calculamos la media
mean(ALEATNORM)
[1] -0.00774
#calculamos la desviación estandar
sd(ALEATNORM)
[1] 1.017
hist(ALEATNORM)
#hacemos un gráfico de densidad porobabilistica, en lugar de un histograma, con la función density()
plot(density(ALEATNORM), xlim = c(-8, 8))
#Añadimos al gráfico una segunda curva de densiada con la función lines()
lines(density(ALEATNORM2), col = "red")
#Estandarizamos los datos en ALEATNORM2. SA cada dato se le resta la media (=0) y se divide por la desviación estándar
ALEATNORM3 <- (ALEATNORM2-0)/sd(ALEATNORM2)
#Al ser estandarizada la desviación estandar es 1, y la media es 0
sd(ALEATNORM3)
[1] 1
ALEATNORM4 <- rnorm(10000, mean = 21, sd = 3)
ALEATNORM5 <- (ALEATNORM4 - mean(ALEATNORM4))/sd(ALEATNORM4)
sd(ALEATNORM5)
[1] 1
mean(ALEATNORM5)
[1] -2.245e-16
#podemos hacer un gráfico de dispersión, X Y. Con cex cambiamos el tamaño de los puntos
plot(ALEATNORM4, ALEATNORM, cex = 0.2)
#para redondear los valores a cero decimales podemos especificarlo, o al dejar este argumento sin especificar la función round() por default lo toma como cero
VAR1N <- round(rnorm(100, mean = 21, sd = 3), 0)
VAR2N <- round(rnorm(100, mean = 13, sd = 3))
#con la función table() generamos una tabulación, es decir contamos cuantas veces se presenta cada una de los distintos valores en un objeto
TABLA <- table(VAR1N)
#la función length() nos informa sobre cuantos elementos hay en un objeto
length(TABLA)
[1] 15
#
LT <- round(length(TABLA)/2)
MA <- length(TABLA)-LT
LT
[1] 8
MA
[1] 7
#La función rep() repite los valores del primer argumento tantas veces como se indique en el segund argumento. Y la función factor() le da la propiedad de ser categorias de un factor y no solo texto informativo para cada onservación
FACTOR <- factor(rep(c("LT","MA"), c(LT, MA)))
#Se muestran lo valores, y una lista de los niveles que contiene
FACTOR
[1] LT LT LT LT LT LT LT LT MA MA MA MA MA MA MA
Levels: LT MA
# la función data.frmae(), genera un objeto arganizado en filas y columnas
DATOS <- data.frame(FACTOR, TABLA)
# y la función attach() nos permite usar los nombres de las columnas como si fuesen objetos
attach(DATOS)
The following object(s) are masked _by_ '.GlobalEnv':
FACTOR, VAR1N
Freq
[1] 1 3 1 3 8 6 10 13 11 13 12 6 4 6 3
#Ahora tenemos un objeto llamado VAR1N, y una comuna dentro del objeto DATOS que también se llama VAR1N.Cuando pedimos los datos de VAR1N, nos muestra los datos en el objeto. Siempre los objetos tienen precedencia sobre los nombres de las columnas dentro de otro objeto.
DATOS$VAR1N
[1] 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Levels: 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27
VAR1N
[1] 19 22 21 22 26 23 20 20 24 17 18 17 19 27 20 16 20 22 21 25 23 24 12
[24] 23 19 16 21 14 25 22 24 24 19 26 22 20 26 20 23 27 17 22 25 24 19 20
[47] 23 22 20 21 23 21 23 26 23 16 23 14 20 25 20 27 20 21 20 17 21 19 23
[70] 22 21 22 26 21 23 19 23 24 19 17 19 21 20 18 17 18 22 19 21 14 22 22
[93] 17 18 18 15 17 26 22 18
# la función ls() nos da una lista de todos los objetos que tenemos en el ambiente R
ls()
[1] "ALEAT1" "ALEAT2" "ALEATNORM" "ALEATNORM2" "ALEATNORM3"
[6] "ALEATNORM4" "ALEATNORM5" "DATOS" "FACTOR" "H"
[11] "LT" "MA" "TABLA" "VAR1N" "VAR2N"
[16] "VAR4"
#con la función rm() eliminamos un objeto
rm(VAR1N)
#Al eliminar el objeto VAR1N, y pedir los datos en VAR1N entonces si obtendremos los datos de la columa VAR1N dentro del objeto DATOS
VAR1N
[1] 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Levels: 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27
names(DATOS)
[1] "FACTOR" "VAR1N" "Freq"
#La función dim() nos regresa las dimensiones de una matriz, número de filas y número de columnos
dim(DATOS)
[1] 15 3
#No podemos multiplcar VAR1N*Freq por que en VAR1N pese a que vemos números, no son valores numéricos
VAR1N*Freq
Warning: * not meaningful for factors
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
#La función class() no indica que tipo de objeto tenemos
class(Freq)
[1] "integer"
class(VAR1N)
[1] "factor"
#Para cambiar los valores en VAR1N a que realmente sean números usamos la función as.numeric() y los podemos agregar a una nueva columna dentro del objeto DATOS o sustituir las valores en la misma columna
DATOS$VAR1NN <- as.numeric(levels(VAR1N)) #Agrega una columna
DATOS$VAR1N <- as.numeric(levels(VAR1N)) # Sustituye la columna
#Sin embargo los atributos de VAR1N no se actualizan hasta que usemos la función attach() en el objeto DATOS nuevamente
class(VAR1N)
[1] "factor"
attach(DATOS)
The following object(s) are masked _by_ '.GlobalEnv':
FACTOR
The following object(s) are masked from 'DATOS (position 3)':
FACTOR, Freq, VAR1N
class(VAR1N)
[1] "numeric"
#Ahora si podemos multiplar VAR1N * Freq
DATOS$PRODUCTO <- VAR1N * Freq
#attach() para actualizar los nombres de las columas en el objeto DATOS
attach(DATOS)
The following object(s) are masked _by_ '.GlobalEnv':
FACTOR
The following object(s) are masked from 'DATOS (position 3)':
FACTOR, Freq, VAR1N, VAR1NN
The following object(s) are masked from 'DATOS (position 4)':
FACTOR, Freq, VAR1N
PRODUCTO
[1] 12 42 15 48 136 108 190 260 231 286 276 144 100 156 81
#Podemos calcular el promedio de los valores correspondientes a LT y MA de acuerdo a la columan FACTOR en el objeto DATOS
mean(PRODUCTO[1:LT])
[1] 101.4
mean(PRODUCTO[(LT+1): (LT+MA)])
[1] 182
#Podemos usar la función tapply() para generar una tabla apartir de un conjunto de valores numericos (PRODUCTO), para cada uno de los niveles de un factor (FACTOR) de acuerdo con una función que especifiquemos, por ejemplo la media (mean), la varianza (var), la desviación estándar (sd), la longitud (length) es decir la N en cada nivel (length)
tapply(PRODUCTO, FACTOR, mean)
LT MA
101.4 182.0
tapply(PRODUCTO, FACTOR, var)
LT MA
8012 6850
tapply(PRODUCTO, FACTOR, sd)
LT MA
89.51 82.76
tapply(PRODUCTO, FACTOR, length)
LT MA
8 7
#tapply() para generar una tabla usando la columna PRODUCTOS en ek objeto DATOS
tapply(DATOS$PRODUCTO, FACTOR, mean)
LT MA
101.4 182.0
#Usando la posisción de la columna (5) y el hecho de que antes de la coma, dentro de los corchetes, no hay ningún valor indica que se usarán todas las filas
tapply(DATOS[, 5], FACTOR, mean)
LT MA
101.4 182.0
#Si colocamos un valor o valores concatenados entes de la coma le estamos indicando que filas que remos usar
tapply(DATOS[1:13, 5], FACTOR, mean)
Error: arguments must have same length
#Podemos almacenar las medias y las desviaciones estándares
MEDIAS <- tapply(PRODUCTO, FACTOR, mean)
DS <- tapply(PRODUCTO, FACTOR, sd)
#Con la función source() leemos un archivo de código de R para hacer disponibles objetos y funciones que estén en ese archivo. En este caso el código funciones.r
source("~/desktop/cursos R/2013/funciones.r")
#En windos la ruta sigue la siguiente sintaxis, donde ... indica los diferentes directorios
#source("c:\\...\\...\\funciones.r")
#Una de las funciones dentro del archivo funcinones.r calcula el error estándar, y la funcón de llama ee().
EE <- tapply(PRODUCTO, FACTOR, ee)
lineplot.error(MEDIAS, EE, ylab = "Longitud (mm)", xlab = "Sitio")