Escriba una funćión que permita calcular las siguientes sumatorias y productorias
\[\sum_{i=1}^{100}\frac{1}{2^i}\]
ejr_1_a <- function(n){
sum =0
for (i in 1:n) {
sum = sum+(1/(2^i))
}
return(sum)
}
ejr_1_a(100)
## [1] 1
## {.tabset .tabset-fade .tabset-pills}
\[\sum_{n=0}^{\infty}\frac{1}{n!}\]
ejr_1_b <- function(n){
sum =0
x = c(1)
for (i in 0:n) {
if (i > 0 ){
x = c(x,i)
}
valor = 1/prod(x)
sum = sum+valor
}
return(sum)
}
ejr_1_b(100)
## [1] 2.718282
\[\prod_{n=1}^{6}(1+x^{2^n})\]
ejr_1_c <- function(x,n){
produc = 1
for (i in 1:n) {
produc = produc*(1+x^(2^i))
}
return(produc)
}
ejr_1_c(1,5)
## [1] 32
\[\prod_{k=1}^{\infty}\frac{4k^2}{4k^2-1}\]
ejr_1_d <- function(k){
produc = 1
for (i in 1:k) {
valor = (4*i^2)/(4*i^2-1)
produc = produc*valor
}
return(produc)
}
ejr_1_d(100)
## [1] 1.566894
\[\prod_{k=0}^{\infty}\frac{x^{2^n}}{(2n)!}\]
ejr_1_d <- function(x,n){
prod = 1
fac = c(1)
for (i in 0:n) {
if (i>0){
fac = c(fac,2*i)
}
valor = (x^(2^i))/(prod(fac))
}
return(valor)
}
ejr_1_d(1,3)
## [1] 0.02083333
ejr_1_f <- function(x,n){
sum = 0;
fac = c()
for (i in 0:n) {
fac = c(fac,2*i+1)
valor = ((-1)^i*(x)^(2^(n+1)))/prod(fac)
sum = sum+valor
}
return(sum)
}
ejr_1_f(1,18)
## [1] 0.7247785
Evalue las siguientes funciones definiendo un dominio para esto, luego grafique la función.
\[y = x^5-7x^4-162x^3+878x^2+3937x-15015\]
ejr_2_a <- function(x){
y = x^5-8*x^4-162*x^3+878*x^2+3937*x-15015;
return(y)
}
x = seq(-16,20,0.5)
y = ejr_2_a(x)
plot(x,y,type = 'l')
\[y = \frac{sin(x)}{x}\]
ejr_2_b <- function(x){
y = sin(x)/x
for (i in 1:length(y)){
if (is.nan(y[i]) == 'TRUE'){
y[i] = 1
}
}
return(y)
}
x = seq(-50,50,0.5)
y = ejr_2_b(x)
plot(x,y,type = 'l')
\[y = \frac{cos(x)-1}{x}\]
ejr_2_c <- function(x){
y = (cos(x)-1)/x
for (i in 1:length(y)){
if (is.nan(y[i]) == 'TRUE'){
y[i] = 0
}
}
return(y)
}
x = seq(-50,50,0.5)
y = ejr_2_c(x)
plot(x,y,type = 'l')
\[y = x^5 - 3x^4 + x^2 - x - 5\]
ejr_2_d <- function(x){
y = x^5-3*x^4+x^2-x-5;
return(y)
}
x = seq(-10,11,0.5)
y = ejr_2_d(x)
plot(x,y,type = 'l')
Calcule para qué valor de n las sumatorias convergen a pi y coincide con los primeros valores (3.141593)
\[\sum_{k = 0}^\infty \frac{8}{(4k+1)(4k+3)}\]
ejr_3_a <- function(x){
sum = 0;
k=0
while(sum<=x){
valor = 8/((4*k+1)*(4*k+3))
k=k+1
sum = valor+sum
}
return(k)
}
ejr_3_a(3.141592)
## [1] 765006
\[\sqrt{6\sum_{k=1}^\infty \frac{1}{k^2}}\]
ejr_3_b <- function(x){
sum = 0;
k=1
while(sum^(1/2)<=x){
valor = (6/k^2)
k=k+1
sum = valor+sum
}
return(k)
}
ejr_3_b(3.141592)
## [1] 1461055
Escriba una funci ́on que tome dos argumentos, a saber, x y n, donde x es un número y n sea estrictamente un entero positivo. La funcíon debe retornarel valor de \[1+x+\frac{x^2}{2}+\frac{x^3}{3}+...+\frac{x^n}{n}\]
ejr_4 <- function(x,n){
y = c(1)
y1 = c()
for (i in 1:length(n)) {
y = c(y,(x^i)/i)
y1 = c(y1,sum(y))
}
plot(n,y1, type = 'l')
return(sum(y))
}
x = 1
n = seq(1,20,1)
ejr_4(x,n)
## [1] 4.59774
Una estructura muy común en R son los vectores, por lo que algunos ejercicios relacionados ser ́an de mucha utilidad.
Cree un vector de valores de \(e^xcosx\) para x=3,3.1,3.2,…,6
ejr_5_a<-function(x){
y = exp(x)*cos(x)
return(y)
}
x = seq(3,6,0.1)
ejr_5_a(x)
## [1] -19.884531 -22.178753 -24.490697 -26.773182 -28.969238 -31.011186
## [7] -32.819775 -34.303360 -35.357194 -35.862834 -35.687732 -34.685042
## [13] -32.693695 -29.538816 -25.032529 -18.975233 -11.157417 -1.362099
## [19] 10.632038 25.046705 42.099201 61.996630 84.929067 111.061586
## [25] 140.525075 173.405776 209.733494 249.468441 292.486707 338.564378
## [31] 387.360340
cree el vector \(2,\frac{2^2}{3},\frac{2^3}{3},...,\frac{2^25}{25}\)
vec = c()
for (i in 1:25) vec = c(vec,(2^i)/i)
vec
## [1] 2.000000e+00 2.000000e+00 2.666667e+00 4.000000e+00 6.400000e+00
## [6] 1.066667e+01 1.828571e+01 3.200000e+01 5.688889e+01 1.024000e+02
## [11] 1.861818e+02 3.413333e+02 6.301538e+02 1.170286e+03 2.184533e+03
## [16] 4.096000e+03 7.710118e+03 1.456356e+04 2.759411e+04 5.242880e+04
## [21] 9.986438e+04 1.906502e+05 3.647221e+05 6.990507e+05 1.342177e+06
con paste cree un vector de largo 30: trat 1, trat 2,…,trat 30
paste(c('trat'),1:30,sep=' ')
## [1] "trat 1" "trat 2" "trat 3" "trat 4" "trat 5" "trat 6" "trat 7"
## [8] "trat 8" "trat 9" "trat 10" "trat 11" "trat 12" "trat 13" "trat 14"
## [15] "trat 15" "trat 16" "trat 17" "trat 18" "trat 19" "trat 20" "trat 21"
## [22] "trat 22" "trat 23" "trat 24" "trat 25" "trat 26" "trat 27" "trat 28"
## [29] "trat 29" "trat 30"
con paste cree un vector de largo 10: gen1,gen2,…,gen10
paste(c('gen'),1:10,sep = '')
## [1] "gen1" "gen2" "gen3" "gen4" "gen5" "gen6" "gen7" "gen8" "gen9"
## [10] "gen10"
Use replicate para generar 20 vectores columna con datos generados de rnorm(40,3,0.3) y cree un vector con las medias de cada columna con colMeans
dat = replicate(20, rnorm(40, 3, 0.3))
medias = colMeans(dat)
medias
## [1] 2.973544 3.029161 2.897547 2.986115 2.954902 2.915827 2.930206 2.987106
## [9] 2.981535 3.033915 2.987457 3.044930 3.021548 2.899464 3.033256 3.003538
## [17] 2.995001 2.960633 3.060810 2.993119
cree un vector con las desviaciones estandar de cada columna generadas en el punto anterior
# MARGIN = 1 -> Operar sobre filas
# MARGIN = 2 -> Operar sobre columnas
vec_sd = apply(X = dat,MARGIN = 2,FUN = sd)
vec_sd
## [1] 0.2999667 0.2291796 0.2777426 0.2969658 0.3103478 0.2843837 0.2835968
## [8] 0.2841357 0.3524299 0.2823330 0.3020928 0.3255939 0.2362396 0.3481836
## [15] 0.2535258 0.3408219 0.2864766 0.3046484 0.2256345 0.2450608
cree un vector con todos los coeficientes de variacion
coef_var = vec_sd/medias
coef_var
## [1] 0.10087851 0.07565777 0.09585439 0.09944890 0.10502811 0.09753107
## [7] 0.09678391 0.09512071 0.11820419 0.09305894 0.10112041 0.10692984
## [13] 0.07818494 0.12008550 0.08358208 0.11347347 0.09565156 0.10289976
## [19] 0.07371726 0.08187470
Cree la siguiente matriz \[\begin{bmatrix} 1& 1 &3 \\ 2& 9 &3 \\ -4& 5&1 \end{bmatrix}\]
mat = matrix(c(1,2,-4,1,9,5,3,3,1),3,3)
mat
## [,1] [,2] [,3]
## [1,] 1 1 3
## [2,] 2 9 3
## [3,] -4 5 1
Transponga la matriz
mat_trans = t(mat)
mat_trans
## [,1] [,2] [,3]
## [1,] 1 2 -4
## [2,] 1 9 5
## [3,] 3 3 1
Invierta la matriz
mat_inv = solve(mat)
mat_inv
## [,1] [,2] [,3]
## [1,] -0.05084746 0.11864407 -0.20338983
## [2,] -0.11864407 0.11016949 0.02542373
## [3,] 0.38983051 -0.07627119 0.05932203
Halle el determinante
mat_det = det(mat)
mat_det
## [1] 118
Calcule la traza
mat_traza = sum(diag(mat))
mat_traza
## [1] 11
Determine el rango de la matriz
mat_ran = qr(mat)$rank
mat_ran
## [1] 3
halle la dimension con dim
mat_dim = dim(mat)
mat_dim
## [1] 3 3
multiplique la matriz por ella misma con solo *
mult1 = mat*mat
mult1
## [,1] [,2] [,3]
## [1,] 1 1 9
## [2,] 4 81 9
## [3,] 16 25 1
Multiplique la matriz de forma usual con %*%
mult2 = mat%*%mat
mult2
## [,1] [,2] [,3]
## [1,] -9 25 9
## [2,] 8 98 36
## [3,] 2 46 4
si llamamos a la matriz A, calcule \(A^3\) de ambas formas descritas anteriormente. ¿Observa algun resultado curioso?
mat_pot3_1= mat*mat*mat
mat_pot3_1
## [,1] [,2] [,3]
## [1,] 1 1 27
## [2,] 8 729 27
## [3,] -64 125 1
mat_pot3_2 = mat%*%mat%*%mat
mat_pot3_2
## [,1] [,2] [,3]
## [1,] 5 261 57
## [2,] 60 1070 354
## [3,] 78 436 148
cree la matriz B en r y use las funciones row(B),col(B),nrow(B),NROW(B),NCOL(B),ncol(B),anyNA(B), as.matrix(B),as.raw(B),colnames(B),colSums(B),cummax(B) ,cummin(B),cumprod(B),cumsum(B),det(B),diag(B),diff(B) ,dimnames(B),exp(B),is.matrix(B),is.unsorted(B),is.vector(B) ,isSymmetric(B),length(B),lengths(B),log10(B),lower.tri(B) ,margin.table(B),marginSums(B),max(B),max.col(B),mean(B) ,min(B),nchar(B),norm(B),order(B),plot(B),pmax(B),pmin(B) ,range(B),rank(B),raw(B),solve(B),sort(B),sum(B),t(B),upper.tri(B) ,which.max(B), para que pueda interpretar el resultado generador \[ \begin{bmatrix} 0 & 1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 \end{bmatrix} \]
v1 = c(0,1,0,0,0,0)
v2 = c(1,0,1,0,0,0)
v3 = c(0,1,0,1,0,0)
v4 = c(0,0,1,0,1,0)
v5 = c(0,0,0,1,0,1)
v6 = c(0,0,0,0,1,0)
B = rbind(v1,v2,v3,v4,v5,v6)
B
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 0 1 0 0 0 0
## v2 1 0 1 0 0 0
## v3 0 1 0 1 0 0
## v4 0 0 1 0 1 0
## v5 0 0 0 1 0 1
## v6 0 0 0 0 1 0
row(B) #Numero de fila para cada elemento
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 1 1 1 1 1
## [2,] 2 2 2 2 2 2
## [3,] 3 3 3 3 3 3
## [4,] 4 4 4 4 4 4
## [5,] 5 5 5 5 5 5
## [6,] 6 6 6 6 6 6
col(B) #Numero de columna para cada elemento
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 2 3 4 5 6
## [2,] 1 2 3 4 5 6
## [3,] 1 2 3 4 5 6
## [4,] 1 2 3 4 5 6
## [5,] 1 2 3 4 5 6
## [6,] 1 2 3 4 5 6
nrow(B) #Numero de filas de la matriz
## [1] 6
NROW(B) #Numero de filas de la matriz tratando un vector como una matriz de una sola columna
## [1] 6
NCOL(B) #Numero de columnas de la matriz tratando un vector como una matriz de una sola columna
## [1] 6
ncol(B) #Numero de columnas de la matriz
## [1] 6
anyNA(B) #Prueba si faltan valores
## [1] FALSE
as.matrix(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 0 1 0 0 0 0
## v2 1 0 1 0 0 0
## v3 0 1 0 1 0 0
## v4 0 0 1 0 1 0
## v5 0 0 0 1 0 1
## v6 0 0 0 0 1 0
as.raw(B)
## [1] 00 01 00 00 00 00 01 00 01 00 00 00 00 01 00 01 00 00 00 00 01 00 01 00 00
## [26] 00 00 01 00 01 00 00 00 00 01 00
colnames(B)
## NULL
colSums(B)
## [1] 1 2 2 2 2 1
cummax(B)
## [1] 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
cummin(B)
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cumprod(B)
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cumsum(B)
## [1] 0 1 1 1 1 1 2 2 3 3 3 3 3 4 4 5 5 5 5 5 6 6 7 7 7
## [26] 7 7 8 8 9 9 9 9 9 10 10
det(B)
## [1] -1
diag(B)
## [1] 0 0 0 0 0 0
diff(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v2 1 -1 1 0 0 0
## v3 -1 1 -1 1 0 0
## v4 0 -1 1 -1 1 0
## v5 0 0 -1 1 -1 1
## v6 0 0 0 -1 1 -1
dimnames(B)
## [[1]]
## [1] "v1" "v2" "v3" "v4" "v5" "v6"
##
## [[2]]
## NULL
exp(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 1.000000 2.718282 1.000000 1.000000 1.000000 1.000000
## v2 2.718282 1.000000 2.718282 1.000000 1.000000 1.000000
## v3 1.000000 2.718282 1.000000 2.718282 1.000000 1.000000
## v4 1.000000 1.000000 2.718282 1.000000 2.718282 1.000000
## v5 1.000000 1.000000 1.000000 2.718282 1.000000 2.718282
## v6 1.000000 1.000000 1.000000 1.000000 2.718282 1.000000
is.matrix(B)
## [1] TRUE
is.unsorted(B)
## [1] TRUE
is.vector(B)
## [1] FALSE
isSymmetric(B)
## [1] FALSE
length(B)
## [1] 36
lengths(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 1 1 1 1 1 1
## v2 1 1 1 1 1 1
## v3 1 1 1 1 1 1
## v4 1 1 1 1 1 1
## v5 1 1 1 1 1 1
## v6 1 1 1 1 1 1
log10(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 -Inf 0 -Inf -Inf -Inf -Inf
## v2 0 -Inf 0 -Inf -Inf -Inf
## v3 -Inf 0 -Inf 0 -Inf -Inf
## v4 -Inf -Inf 0 -Inf 0 -Inf
## v5 -Inf -Inf -Inf 0 -Inf 0
## v6 -Inf -Inf -Inf -Inf 0 -Inf
lower.tri(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] FALSE FALSE FALSE FALSE FALSE FALSE
## [2,] TRUE FALSE FALSE FALSE FALSE FALSE
## [3,] TRUE TRUE FALSE FALSE FALSE FALSE
## [4,] TRUE TRUE TRUE FALSE FALSE FALSE
## [5,] TRUE TRUE TRUE TRUE FALSE FALSE
## [6,] TRUE TRUE TRUE TRUE TRUE FALSE
margin.table(B)
## [1] 10
marginSums(B)
## [1] 10
max(B)
## [1] 1
max.col(B)
## [1] 2 3 4 3 4 5
mean(B)
## [1] 0.2777778
min(B)
## [1] 0
nchar(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 1 1 1 1 1 1
## v2 1 1 1 1 1 1
## v3 1 1 1 1 1 1
## v4 1 1 1 1 1 1
## v5 1 1 1 1 1 1
## v6 1 1 1 1 1 1
norm(B)
## [1] 2
order(B)
## [1] 1 3 4 5 6 8 10 11 12 13 15 17 18 19 20 22 24 25 26 27 29 31 32 33 34
## [26] 36 2 7 9 14 16 21 23 28 30 35
plot(B)
pmax(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 0 1 0 0 0 0
## v2 1 0 1 0 0 0
## v3 0 1 0 1 0 0
## v4 0 0 1 0 1 0
## v5 0 0 0 1 0 1
## v6 0 0 0 0 1 0
pmin(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## v1 0 1 0 0 0 0
## v2 1 0 1 0 0 0
## v3 0 1 0 1 0 0
## v4 0 0 1 0 1 0
## v5 0 0 0 1 0 1
## v6 0 0 0 0 1 0
range(B)
## [1] 0 1
rank(B)
## [1] 13.5 31.5 13.5 13.5 13.5 13.5 31.5 13.5 31.5 13.5 13.5 13.5 13.5 31.5 13.5
## [16] 31.5 13.5 13.5 13.5 13.5 31.5 13.5 31.5 13.5 13.5 13.5 13.5 31.5 13.5 31.5
## [31] 13.5 13.5 13.5 13.5 31.5 13.5
solve(B)
## v1 v2 v3 v4 v5 v6
## [1,] 0 1 0 -1 0 1
## [2,] 1 0 0 0 0 0
## [3,] 0 0 0 1 0 -1
## [4,] -1 0 1 0 0 0
## [5,] 0 0 0 0 0 1
## [6,] 1 0 -1 0 1 0
sort(B)
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
sum(B)
## [1] 10
t(B)
## v1 v2 v3 v4 v5 v6
## [1,] 0 1 0 0 0 0
## [2,] 1 0 1 0 0 0
## [3,] 0 1 0 1 0 0
## [4,] 0 0 1 0 1 0
## [5,] 0 0 0 1 0 1
## [6,] 0 0 0 0 1 0
upper.tri(B)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] FALSE TRUE TRUE TRUE TRUE TRUE
## [2,] FALSE FALSE TRUE TRUE TRUE TRUE
## [3,] FALSE FALSE FALSE TRUE TRUE TRUE
## [4,] FALSE FALSE FALSE FALSE TRUE TRUE
## [5,] FALSE FALSE FALSE FALSE FALSE TRUE
## [6,] FALSE FALSE FALSE FALSE FALSE FALSE
which.max(B)
## [1] 2
En el an ́alisis de genes encontramos problemas que involucran la b ́usqueda de ciertas combinaciones de letras a lo largo de una cadena. Para un cierto gen (”AGT CACAAT GGAAT AGGCCAAGCGAT T GCAGGGT AGCCAGCCA”), escriba una funcion que permita:
library(stringr)
## Warning: package 'stringr' was built under R version 4.0.5
analisis_genes <- function(cadena){
espacio = str_count(string = cadena,pattern = ' ')
total = nchar(cadena)
total_base = total-espacio
Ab = str_count(string = cadena,pattern = 'A')
Gb = str_count(string = cadena,pattern = 'G')
Tb = str_count(string = cadena,pattern = 'T')
Cb = str_count(string = cadena,pattern = 'C')
Gp = str_locate_all(string = cadena,pattern = 'G')
Gp = table(Gp)
GA = str_count(string = cadena,pattern = 'GA')
cat("Total de base: ",total_base,
"\nTotal de base A: ", Ab,
"\nTotal de base G: ",Gb,
"\nTotal de base T: ",Tb,
"\nTotal de base C: ",Cb,
"\nPosicion de la base G: ",Gp,
"\nTotal de base par GA: ",GA)
}
cadena = c("AGT CACAAT GGAAT AGGCCAAGCGAT T GCAGGGT AGCCAGCCA")
analisis_genes(cadena)
## Total de base: 43
## Total de base A: 14
## Total de base G: 13
## Total de base T: 6
## Total de base C: 10
## Posicion de la base G: 2 2 2 2 2 2 2 2 2 2 2 2 2
## Total de base par GA: 2
(tab content)
(tab content)
(tab content)
(tab content)
(tab content)
(tab content)
(tab content)
(tab content)