diff --git a/.gitignore b/.gitignore
index 3bd3b4ea..d47e9289 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+## ------------------------R----------------------------------------------
+
# History files
.Rhistory
.Rapp.history
@@ -5,6 +7,9 @@
# Session Data files
.RData
+# User-specific files
+.Ruserdata
+
# Example code in package build process
*-Ex.R
@@ -25,17 +30,146 @@ vignettes/*.pdf
.httr-oauth
# knitr and R markdown default cache directories
-/*_cache/
+*_cache/
/cache/
# Temporary files created by R markdown
*.utf8.md
*.knit.md
-# Shiny token, see https://shiny.rstudio.com/articles/shinyapps.html
-rsconnect/
-.Rproj.user
+# R Environment Variables
+.Renviron
+
+
+
+## ------------------------Python----------------------------------------------
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+pip-wheel-metadata/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+.python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
-##Deleted by JB
-.DS_Store
+# Pyre type checker
+.pyre/
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 00000000..68e149c9
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,3 @@
+jupyter
+pandas
+matplotlib
\ No newline at end of file
diff --git a/script.sh b/script.sh
new file mode 100644
index 00000000..f98a9681
--- /dev/null
+++ b/script.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+python -m venv .env # Crea ambiente en path (carpeta) .env
+source .env/Scripts/activate # activa el ambiente
+python -m pip install --upgrade pip
+pip install wheel
+pip install -r requirements.txt # Lee el archivo requirements.txt e instala los modulos que esten escritos en este
+deactivate
\ No newline at end of file
diff --git a/teoria/Tema2.Rmd b/teoria/Tema2.Rmd
index e5ce8725..a6b4ce13 100644
--- a/teoria/Tema2.Rmd
+++ b/teoria/Tema2.Rmd
@@ -377,13 +377,14 @@ La función `text{}` nos permite introducir texto en fórmulas matemáticas.
Los bloques de código de R dentro de un documento R Markdown se indican de la manera siguiente
-`r ''` ```{r SegundoChunk}
+` ```{r SegundoChunk}`
` y = 1*2*3`
-`r ''` ```
+` ``` `
@@ -442,7 +440,7 @@ Código | Significado
## Parámetros de los chunks
-`r ''` ```{r, echo=FALSE}
+` ```{r, echo=FALSE}`
` sec = 10:20`
@@ -450,7 +448,7 @@ Código | Significado
`cumsum(sec)`
-`r ''` ```
+` ``` `
\n
@@ -459,13 +457,13 @@ No aparece
## Parámetros de los chunks
-`r ''` ```{r, echo=TRUE, message = TRUE}
+` ```{r, echo=TRUE, message = TRUE}`
`library(car)`
`head(cars,3)`
-`r ''` ```
+` ``` `
\n
@@ -477,13 +475,13 @@ head(cars,3)
## Parámetros de los chunks
-`r ''` ```{r, echo=TRUE, message = FALSE, comment = NA}
+` ```{r, echo=TRUE, message = FALSE, comment = NA}`
`library(car)`
`head(cars,3)`
-`r ''` ```
+` ``` `
\n
@@ -501,13 +499,13 @@ Significado | Código | Resultado
`results` | `markup` | Valor por defecto. Nos muestra los resultados en el documento final línea a línea, encabezados por `##`
`results` | `hide` | No se nos muestra el resultado en el documento final
`results` | `asis` | Nos devuelve los resultados línea a línea de manera literal en el documento final y el programa con el que se abre el documento final los interpreta como texto y formatea adecuadamente
-`results` | `hold` | Miestra todos los resultados al final del bloque de código
+`results` | `hold` | Muestra todos los resultados al final del bloque de código
## Parámetros de los chunks
-`r ''` ```{r, echo=TRUE, results = "markup"}
+` ```{r, echo=TRUE, results = "markup"}`
` sec = 10:20`
@@ -515,7 +513,7 @@ Significado | Código | Resultado
`cumsum(sec)`
-`r ''` ```
+` ``` `
\n
@@ -529,7 +527,7 @@ cumsum(sec)
-`r ''` ```{r, echo=TRUE, results = "hide"}
+` ```{r, echo=TRUE, results = "hide"}`
` sec = 10:20`
@@ -537,7 +535,7 @@ cumsum(sec)
`cumsum(sec)`
-`r ''` ```
+` ``` `
\n
@@ -551,7 +549,7 @@ cumsum(sec)
-`r ''` ```{r, echo=TRUE, results = "asis"}
+` ```{r, echo=TRUE, results = "asis"}`
` sec = 10:20`
@@ -559,7 +557,7 @@ cumsum(sec)
`cumsum(sec)`
-`r ''` ```
+` ``` `
\n
@@ -573,7 +571,7 @@ cumsum(sec)
-`r ''` ```{r, echo=TRUE, results = "hold"}
+` ```{r, echo=TRUE, results = "hold"}`
` sec = 10:20`
@@ -581,7 +579,7 @@ cumsum(sec)
`cumsum(sec)`
-`r ''` ```
+` ``` `
\n
@@ -597,14 +595,14 @@ cumsum(sec)
Con lo explicado hasta ahora, solamente hemos generado resultados en la línea aparte
-Para introducir una parte de código dentro de un párrafo y que se ejecute al comilarse el documento mostrando así el resultado final, hay que hacerlo utilizando `` `r "\u0060r ...\u0060"` ``
+Para introducir una parte de código dentro de un párrafo y que se ejecute al compilarse el documento mostrando así el resultado final, hay que hacerlo utilizando `` `r "\u0060r ...\u0060"` ``
**Ejemplo**
-La raíz cuadrada de 64 es `` `r "\u0060r sqrt(64)\u0060"` `` o, lo que viene siendo lo mismo, $\sqrt{64}=$`` `r "\u0060r sqrt(64)\u0060"` ``
+La raíz cuadrada de 64 es `` `r "\u0060r sqrt(64)\u0060"` `` o, lo que viene siendo lo mismo, $\sqrt{64}=$ `` `r "\u0060r sqrt(64)\u0060"` ``
-La raíz quinta de 32 es `r sqrt(64)` o, lo que viene siendo lo mismo, $\sqrt{64}=$`r sqrt(32)`
+La raíz quinta de 32 es `r 32^(1/5)` o, lo que viene siendo lo mismo, $\sqrt[5]{32}=$ `r 32^(1/5)`
diff --git a/teoria/Tema3.Rmd b/teoria/Tema3.Rmd
index 16d54fdd..9d5e58b0 100644
--- a/teoria/Tema3.Rmd
+++ b/teoria/Tema3.Rmd
@@ -31,11 +31,11 @@ En los vectores de `R`, todos sus objetos han de ser del mismo tipo: todos núme
- ```c()```: para definir un vector
- ```scan()```: para definir un vector
- ```fix(x)```: para modificar visualmente el vector $x$
-- ```rep(a,n)```: para definir un vector constante que contiene el dato $a$ repetido $n$ veces
+- ```rep(a, n)```: para definir un vector constante que contiene el dato $a$ repetido $n$ veces
```{r}
-c(1,2,3)
-rep("Mates",7)
+c(1, 2, 3)
+rep("Mates", 7)
```
@@ -57,7 +57,7 @@ Vamos a crear un vector que contenga 3 copias de 1 9 9 8 0 7 2 6 con la función
1. Repite tu año de nacimiento 10 veces
2. Crea el vector que tenga como entradas $16, 0, 1, 20, 1, 7, 88, 5, 1, 9$, llámalo vec y modifica la cuarta entrada con la función fix()
-
+
@@ -69,11 +69,11 @@ Vamos a crear un vector que contenga 3 copias de 1 9 9 8 0 7 2 6 con la función
## Progresiones y Secuencias
Una progresión aritmética es una sucesión de números tales que la **diferencia**, $d$, de cualquier par de términos sucesivos de la secuencia es constante.
-$$a_n = a_1 + (n-1)\cdot d$$
+$$a_n = a_1 + (n - 1) \cdot d$$
-- ``seq(a,b,by=d)``: para generar una [progresión aritmética](https://es.wikipedia.org/wiki/Progresión_aritmética) de diferencia $d$ que empieza en $a$ hasta llegar a $b$
-- ```seq(a,b, length.out=n)```: define progresión aritmética de longitud $n$ que va de $a$ a $b$ con diferencia $d$. Por tanto $d=(b-a)/(n-1)$
-- ```seq(a,by=d, length.out=n)```: define la progresión aritmética de longitud $n$ y diferencia $d$ que empieza en $a$
+- ``seq(a, b, by = d)``: para generar una [progresión aritmética](https://es.wikipedia.org/wiki/Progresión_aritmética) de diferencia $d$ que empieza en $a$ hasta llegar a $b$
+- ```seq(a, b, length.out = n)```: define progresión aritmética de longitud $n$ que va de $a$ a $b$ con diferencia $d$. Por tanto $d = (b - a) / (n - 1)$
+- ```seq(a, by = d, length.out = n)```: define la progresión aritmética de longitud $n$ y diferencia $d$ que empieza en $a$
- ```a:b```: define la secuencia de números **enteros** ($\mathbb{Z}$) consecutivos entre dos números $a$ y $b$
@@ -84,9 +84,9 @@ $$a_n = a_1 + (n-1)\cdot d$$
- Imprimid los números del 1 al 20
- Imprimid los 20 primeros números pares
-
+
- Imprimid 30 números equidistantes entre el 17 y el 98, mostrando solo 4 cifras significativas
-
+

@@ -97,7 +97,7 @@ $$a_n = a_1 + (n-1)\cdot d$$
Cuando queremos aplicar una función a cada uno de los elementos de un vector de datos, la función `sapply` nos ahorra tener que programar con bucles en `R`:
-- ```sapply(nombre_de_vector,FUN=nombre_de_función)```: para aplicar dicha función a todos los elementos del vector
+- ```sapply(nombre_de_vector, FUN = nombre_de_función)```: para aplicar dicha función a todos los elementos del vector
- ```sqrt(x)```: calcula un nuevo vector con las raíces cuadradas de cada uno de los elementos del vector $x$
## Funciones
@@ -124,7 +124,7 @@ Dado un vector de datos $x$ podemos calcular muchas medidas estadísticas acerca
```{r}
cuadrado = function(x){x^2}
-v = c(1,2,3,4,5,6)
+v = c(1, 2, 3, 4, 5, 6)
sapply(v, FUN = cuadrado)
mean(v)
cumsum(v)
@@ -137,7 +137,7 @@ cumsum(v)
- ```rev(x)```: invierte el orden de los elementos del vector $x$
```{r}
-v = c(1,7,5,2,4,6,3)
+v = c(1, 7, 5, 2, 4, 6, 3)
sort(v)
rev(v)
```
@@ -181,10 +181,10 @@ rev(v)
## Subvectores
```{r}
-v = c(14,5,6,19,32,0,8)
+v = c(14, 5, 6, 19, 32, 0, 8)
v[2]
-v[-c(3,5)]
-v[v != 19 & v>15]
+v[-c(3, 5)]
+v[v != 19 & v > 15]
```
@@ -192,9 +192,9 @@ v[v != 19 & v>15]
- ```which(x cumple condición)```: para obtener los índices de las entradas del vector $x$ que satisfacen la condición dada
- ```which.min(x)```: nos da la primera posición en la que el vector $x$ toma su valor mínimo
-- ```which(x==min(x))```: da todas las posiciones en las que el vector $x$ toma sus valores mínimos
+- ```which(x == min(x))```: da todas las posiciones en las que el vector $x$ toma sus valores mínimos
- ```which.max(x)```: nos da la primera posición en la que el vector $x$ toma su valor máximo
-- ```which(x==max(x))```: da todas las posiciones en las que el vector $x$ toma sus valores máximos
+- ```which(x == max(x))```: da todas las posiciones en las que el vector $x$ toma sus valores máximos
# Factores
@@ -208,7 +208,7 @@ v[v != 19 & v>15]
## La función factor()
-- `factor(vector,levels=...)`: define un factor a partir del vector y dispone de algunos parámetros que permiten modificar el factor que se crea:
+- `factor(vector, levels = ...)`: define un factor a partir del vector y dispone de algunos parámetros que permiten modificar el factor que se crea:
- `levels`: permite especificar los niveles e incluso añadir niveles que no aparecen en el vector
- `labels`: permite cambiar los nombres de los niveles
@@ -220,17 +220,17 @@ v[v != 19 & v>15]
Factor ordenado. Es un factor donde los niveles siguen un orden
-- `ordered(vector,levels=...)`: función que define un factor ordenado y tiene los mismos parámetros que factor
+- `ordered(vector, levels = ...)`: función que define un factor ordenado y tiene los mismos parámetros que factor
## Factores y factores ordenados
```{r}
-fac = factor(c(1,1,1,2,2,3,2,4,1,3,3,4,2,3,4,4),
- levels = c(1,2,3,4), labels = c("Sus","Apr","Not","Exc"))
+fac = factor(c(1, 1, 1, 2, 2, 3, 2, 4, 1, 3, 3, 4, 2, 3, 4, 4),
+ levels = c(1, 2, 3, 4), labels = c("Sus", "Apr", "Not", "Exc"))
fac
-facOrd = ordered(c(1,1,1,2,2,3,2,4,1,3,3,4,2,3,4,4),
- levels = c(1,2,3,4), labels = c("Sus","Apr","Not","Exc"))
+facOrd = ordered(c(1, 1, 1, 2, 2, 3, 2, 4, 1, 3, 3, 4, 2, 3, 4, 4),
+ levels = c(1, 2, 3, 4), labels = c("Sus", "Apr", "Not", "Exc"))
facOrd
```
@@ -255,7 +255,7 @@ facOrd
## Obtener información de una list
```{r}
-x = c(1,-2,3,4,-5,6,7,-8,-9,0)
+x = c(1, -2, 3, 4, -5, 6, 7, -8, -9, 0)
miLista = list(nombre = "X", vector = x, media = mean(x), sumas = cumsum(x))
miLista
```
@@ -275,12 +275,12 @@ names(miLista)
## Cómo definirlas
-- `matrix(vector, nrow=n, byrow=valor_lógico)`: para definir una matriz de $n$ filas formada por las entradas del vector
+- `matrix(vector, nrow = n, byrow = valor_lógico)`: para definir una matriz de $n$ filas formada por las entradas del vector
- `nrow`: número de filas
- `byrow`: si se iguala a TRUE, la matriz se construye por filas; si se iguala a FALSE (valor por defecto), se construye por columnas.
-` ncol`: número de columnas (puede usarse en lugar de nrow)
- - R muestra las matrices indicando como [$i,$] la fila $i$-ésima y [$,j$] la columna $j$-ésima
- - Todas las entradas de una matriz han de ser del mismo tipo de datos
+- R muestra las matrices indicando como [$i,$] la fila $i$-ésima y [$,j$] la columna $j$-ésima
+- Todas las entradas de una matriz han de ser del mismo tipo de datos
## Cómo definirlas{.exercise}
@@ -290,7 +290,7 @@ names(miLista)
- ¿Cómo definirías una matriz constante? Es decir, ¿cómo definirías una matriz $A$ tal que $\forall\ i=1,...,n; j = 1,...,m$, $a_{i,j}=k$ siendo $k\in\mathbb{R}$? Como R no admite incógnitas, prueba para el caso específico $n = 3, m = 5, k = 0$
-- Con el vector vec = (1,2,3,4,5,6,7,8,9,10,11,12) crea la matriz
+- Con el vector vec = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) crea la matriz
$$\begin{pmatrix}
1 & 4 & 7 & 10\\
2 & 5 & 8 & 11\\
@@ -312,7 +312,7 @@ $$\begin{pmatrix}
## Submatrices
-- `matriz[i,j]`: indica la entrada ($i,j$) de la matriz, siendo $i,j\in\mathbb{N}$. Si $i$ y $j$ son vectores de índices, estaremos definiendo la submatriz con las filas pertenecientes al vector $i$ y columnas pertenecientes al vector $j$
+- `matriz[i, j]`: indica la entrada ($i,j$) de la matriz, siendo $i,j\in\mathbb{N}$. Si $i$ y $j$ son vectores de índices, estaremos definiendo la submatriz con las filas pertenecientes al vector $i$ y columnas pertenecientes al vector $j$
- `matriz[i,]`: indica la fila $i$-ésima de la matriz, siendo $i\in\mathbb{N}$
- `matriz[,j]`: indica la columna $j$-ésima de la siendo $j\in\mathbb{N}$
- Si $i$ ($j$) es un vector de índices, estaremos definiendo la submatriz con las filas (columnas) pertenecientes al vector $i$ ($j$)
@@ -350,7 +350,7 @@ Dada la matriz $$A = \begin{pmatrix}
```{r}
-A = matrix(c(1,2,3,4,5,6,7,8,9), ncol = 3)
+A = matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), ncol = 3)
dim(A)
diag(A)
```
@@ -358,14 +358,14 @@ diag(A)
## Función apply()
-- `apply(matriz, MARGIN=..., FUN=función)`: para aplicar otras funciones a las filas o las columnas de una matriz
- - `MARGIN`: ha de ser 1 si queremos aplicar la función por filas; 2 si queremos aplicarla por columnas; o c(1,2) si la queremos aplicar a cada entrada
+- `apply(matriz, MARGIN = ..., FUN = función)`: para aplicar otras funciones a las filas o las columnas de una matriz
+ - `MARGIN`: ha de ser 1 si queremos aplicar la función por filas; 2 si queremos aplicarla por columnas; o c(1, 2) si la queremos aplicar a cada entrada
## Función apply()
```{r}
-apply(A, MARGIN = c(1,2), FUN = cuadrado)
+apply(A, MARGIN = c(1, 2), FUN = cuadrado)
apply(A, MARGIN = 1, FUN = sum)
apply(A, MARGIN = 2, FUN = sum)
```
@@ -377,7 +377,7 @@ apply(A, MARGIN = 2, FUN = sum)
- `+`: para sumar matrices
- `*`: para el producto de un escalar por una matriz
- `%*%`: para multiplicar matrices
-- `mtx.exp(matriz,n)`: para elevar la matriz a $n$
+- `mtx.exp(matriz, n)`: para elevar la matriz a $n$
- Del paquete `Biodem`
- No calcula las potencias exactas, las aproxima
- `%^%`: para elevar matrices
@@ -397,7 +397,7 @@ Observad qué ocurre si, siendo $A = \begin{pmatrix}
3 & 2 & 1\\
1 & 0 & 0\\
1 & 1 & 1
-\end{pmatrix}$, realizamos las operaciones $A*B$, $A^2$ y $B^3$
+\end{pmatrix}$, realizamos las operaciones $A \cdot B$, $A^2$ y $B^3$

@@ -409,7 +409,7 @@ Observad qué ocurre si, siendo $A = \begin{pmatrix}
- `det(matriz)`: para calcular el determinante de la matriz
- `qr(matriz)$rank`: para calcular el rango de la matriz
- `solve(matriz)`: para calcular la inversa de una matriz invertible
- - También sirve para resolver sistemas de ecuaciones lineales. Para ello introducimos `solve(matriz,b)`, donde $b$ es el vector de términos independientes
+ - También sirve para resolver sistemas de ecuaciones lineales. Para ello introducimos `solve(matriz, b)`, donde $b$ es el vector de términos independientes
## Valores y vectores propios
@@ -423,7 +423,7 @@ Observad qué ocurre si, siendo $A = \begin{pmatrix}
## Valores y vectores propios
```{r}
-M = rbind(c(2,6,-8), c(0,6,-3), c(0,2,1))
+M = rbind(c(2, 6, -8), c(0, 6, -3), c(0, 2, 1))
eigen(M)
```
@@ -432,7 +432,7 @@ eigen(M)
**Ejercicio**
-Comprobad, con los datos del ejemplo anterior, que si $P$ es la matriz de vectores propios de $M$ en columna y $D$ la matriz diagonal cuyas entradas son los valores propios de $M$, entoces se cumple la siguiente igualdad llamada **descomposición canónica**: $$M = P\cdot D\cdot P^{-1}$$
+Comprobad, con los datos del ejemplo anterior, que si $P$ es la matriz de vectores propios de $M$ en columna y $D$ la matriz diagonal cuyas entradas son los valores propios de $M$, entonces se cumple la siguiente igualdad llamada **descomposición canónica**: $$M = P \cdot D \cdot P^{-1}$$

@@ -447,7 +447,7 @@ Si hay algún vap con multiplicidad algebraica mayor que 1 (es decir, que aparec
## Valores y vectores propios
```{r}
-M = matrix(c(0,1,0,-7,3,-1,16,-3,4), nrow=3, byrow=TRUE)
+M = matrix(c(0, 1, 0, -7, 3, -1, 16, -3, 4), nrow = 3, byrow = TRUE)
eigen(M)
```