Documentos de Académico
Documentos de Profesional
Documentos de Cultura
> X <- 3
> X
[1] 3
> X = 4
> X
[1] 4
> 3 -> X
> X
[1] 3
La creación de un vector en R y la consulta de ello se realiza de
la siguiente forma
> datos <- c(4, 2, 4, 5)
> n <- length(datos)
> datos
[1] 4 2 4 5
> n
[1] 4
> min(datos)
[1] 2
> max(datos)
[1] 5
> sum(datos)
[1] 15
> ord <- sort(datos)
> ord[1]
[1] 2
> ord[n]
[1] 5
Otras rutinas útiles para analizar vectores son las siguientes:
> data <- c(1, 4, 2, 4, 2, 5, 6, 7, 4, 76, 3, 2, 5, 6, 7)
> mean(data)
[1] 8.933333
> median(data)
[1] 4
> summary(data)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 2.500 4.000 8.933 6.000 76.000
> quantile(data, 0.9)
90%
7
> table(data)
data
1 2 3 4 5 6 7 76
1 3 1 3 2 2 2 1
> var(data)
[1] 347.781
> sd(data)
[1] 18.64889
> otra <- c(1, 5, 3, 5, 3, 65, 4, 6, 3, 6, 3, 56, 4)
> length(otra)
[1] 13
> length(data)
[1] 15
> otra <- c(otra, 2, 4)
> cor(data, otra)
[1] -0.08119101
Para crear una matriz
> M <- matrix(rep(0, 9), nrow=3, ncol=3)
> M
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
Subrutina all y any
> a <- c(1, 2, 3)
> b <- c(1, 2, 4)
> a == b
[1] TRUE TRUE FALSE
> all(a == b)
[1] FALSE
> any(a == b)
[1] TRUE
Operaciones aritmeticas
> a <- 3
> b <- 4
> c <- c(5, 6, 7)
> d <- c(8, 10, 12)
> a + b
[1] 7
> a - b
[1] -1
> a * b
[1] 12
> a / b
[1] 0.75
> a^b
[1] 81
> b^a
[1] 64
> a**b
[1] 81
> a + c
[1] 8 9 10
> c + d
[1] 13 16 19
> c * d
[1] 40 60 84
> c %*% d
[,1]
[1,] 184
> e <- matrix(c(1, 2, 3, 4), nrow=2)
> e
[,1] [,2]
[1,] 1 3
[2,] 2 4
> f <- matrix(c(2, 4, 6, 8), nrow=2)
> f
[,1] [,2]
[1,] 2 6
[2,] 4 8
> e + f
[,1] [,2]
[1,] 3 9
[2,] 6 12
> e - f
[,1] [,2]
[1,] -1 -3
[2,] -2 -4
> e * f
[,1] [,2]
[1,] 2 18
[2,] 8 32
> e %*% f
[,1] [,2]
[1,] 14 30
[2,] 20 44
El redondeo de enteros a decimales se hace con las tres reglas:
hacia abajo con la función piso floor, hacia arriba con la función
techo ceiling y al entero más cercano con round. La división
entera se logra con %/% y el residuo (también llamado modulo, que
en R funciona hasta con valores decimales) con %%:
> d <- 7.3
> floor(d)
[1] 7
> ceiling(d)
[1] 8
> round(d)
[1] 7
> d / 2
[1] 3.65
> d %/% 2
[1] 3
> d %% 2
[1] 1.3
Las funciones matemáticas tienen sus nombres típicos y están disponibles en R
básico
> x <- 123.4
> sqrt(x)
[1] 11.10856
> exp(x)
[1] 3.907861e+53
> sin(x)
[1] -0.7693905
> cos(x)
[1] -0.6387787
> tan(x)
[1] 1.204471
> tanh(2.5)
[1] 0.9866143
> log(x)
[1] 4.815431
> log(x, 10)
[1] 2.091315
> log(x, 2)
[1] 6.947199
Para permutaciones y combinaciones, existen subrutinas para la factorial y el
coeficiente binomial:
> factorial(5)
[1] 120
> choose(9, 3)
[1] 84
> factorial(9) / (factorial(6) * factorial(3))
[1] 84
Para manipular secuencias, existen las siguientes subrutinas prácticas
> s <- seq(4, 100, 2)
> s
[1] 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 4
0
[20] 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76
78
[39] 80 82 84 86 88 90 92 94 96 98 100
> r <- rep(13, 20)
> r
[1] 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
> i <- 2:12
> i
[1] 2 3 4 5 6 7 8 9 10 11 12
> c <- cut(s, breaks=4)
> table(c)
c
(3.9,28] (28,52] (52,76] (76,100]
13 12 12 12
> tail(s)
[1] 90 92 94 96 98 100
> tail(s, 10)
[1] 82 84 86 88 90 92 94 96 98 100
> head(s)
[1] 4 6 8 10 12 14
> head(s, 8)
[1] 4 6 8 10 12 14 16 18
Para expresiones condicionales, repeticiones, y lógica, sirve lo siguiente:
> x <- 3
> y <- NULL
> if (x > 5) { y <- x * 3 } else { y <- 6 - x }
> y
[1] 3
> z <- NULL
> if (x %% 2 == 1 & y %% 2 == 1) { z <- 2 } else { z <- 3 }
> z
[1] 2
> if (z != 1) { print("no es uno") }
[1] "no es uno"
> if (x == 2 | y == 2 | z == 2) { print("hay un dos") } else { print("no hay
un dos") }
[1] "hay un dos"
> for (i in 1:5) { print(2**i) }
[1] 2
[1] 4
[1] 8
[1] 16
[1] 32
> while (x > 0) { print("quito uno"); x <- x - 1 }
[1] "quito uno"
[1] "quito uno"
[1] "quito uno"
> x
[1] 0
Cuando algún cálculo ocupa ser reutilizado en múltiples ocasiones,
posiblemente con algunas variaciones, conviene encapsularlo en una subrutina
como una función: nombre <- function(p1, p2, ... ){...; return(resultado)}
Conviene probar la creación y llamadas a subrutinas propias