---
title: "Ejemplos de uso"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{ejemplos-de-uso}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

```{r setup}
knitr::opts_chunk$set(warning = FALSE, message = FALSE)
library(SISINTAR)
library(dplyr)
```

```{r, echo = FALSE}
if (!check_sisinta()) {
  print("No se pudo conectar con SISINTA. El código siguiente no se va a evaluar.")
  knitr::opts_chunk$set(
    eval = FALSE
  )
}
```

En esta viñeta se presentan distintos ejemplos de uso de las funciones principales del paquete {SISINTA} para trabajar con perfiles de suelo.

## Buscar datos disponibles

La función `buscar_perfiles()` permite buscar perfiles en función de la localización, la fecha y la clase.
La primera vez que se corre, descarga el archivo http://sisinta.inta.gob.ar/es/perfiles.geojson. 

Si se corre sin argumentos, devuelve todos los perfiles disponibles. 


```{r}
buscar_perfiles() %>% 
  head(10)
```

Técnicamente, también lista algunos perfiles que no están disponibles públicamente:

```{r}
buscar_perfiles() %>%
  filter(clase == "No disponible") %>% 
  head(10)
```

La búsqueda por clase devuelve todos los perfiles que contienen alguno de los términos a buscar.
Por ejemplo, la siguiente búsqueda devuelve los perfiles que contengan "hapludol" o "natralbol".

```{r}
buscar_perfiles(clase = c("hapludol", "natralbol")) %>% 
  head(10)
```


También se puede buscar for fechas. 
La siguiente búsqueda devuelve los perfiles realizados durante 2019.

```{r}
buscar_perfiles(rango_fecha = c("2019-01-01", "2019-12-31")) %>% 
  head(10)
```

Y si se busca los perfiles de una o más series en particular. 
Este campo es un filtro exacto. 
La serie tiene que existir así como está escrita, en caso contrario la función tira error. 

```{r}
buscar_perfiles(serie = c("Ramallo", "Calabresse")) %>% 
  dplyr::group_by(serie) %>% 
  slice_head(n = 2)
```

La combinación de criterios de búsqueda devuelve los perfiles que cumplen con ambos criterios. 
La siguiente búsqueda devuelve perfiles obtenidos en 2019 y que tienen "hapludol" o "natralbol".

```{r}
buscar_perfiles(rango_fecha = c("2019-01-01", "2019-12-31"),
                clase = c("hapludol", "natralbol"))
```

## Descarga de datos

Para descargar lo datos de los perfiles se usa la función `get_perfiles()`. 
Ésta toma un vector con los ids de los perfiles a descargar.

```{r}
get_perfiles(c(6653, 6347, 6580)) %>% 
  .[, 1:5] %>% 
  head(10)
```

Alternativamente, puede tomar un data.frame que tenga una columna llamada "perfil_id". 
Esto es así para que se pueda usar directamente la salida de `buscar_perfiles()` para descargar los perfiles buscados.

```{r}
buscar_perfiles(rango_fecha = c("2019-01-01", "2019-12-31"),
                clase = c("hapludol", "natralbol")) %>%
  get_perfiles() %>% 
  .[, 1:5] 
```

`get_perfiles()` por defecto descarga los datos en una carpeta temporal de modo que si se vuelve a correr la misma línea de código no descarga el o los perfil nuevamente.


```{r}
# Primera llamada, tarda porque descarga los datos
system.time(get_perfiles(c(3238, 3182)))

# Segunda llamada, levanta los datos de la carpeta temporal
system.time(get_perfiles(c(3238, 3182)))
```

La carpeta de descarga se puede cambiar con el argumento `dir` de modo que se puede cambiar a una carpeta permanente de datos dentro de un proyecto. 
Para forzar la re-descarga de los datos, hay que setear el argumento `refresh = TRUE`.

Algunos perfiles no se pueden descargar públicamente. 
Cuando pasa esto, `get_perfiles()` devuelve un data.frame con los perfiles que sí se pudieron descargar y un warning describiendo qué problemas hubo.

```{r}
perfiles <- get_perfiles(c(3182, 4609))
```

Para elevar este warning a un error, hay que setear el argumento `parar_en_error` a `TRUE`.
En este caso, la función va a tirar error al primer perfil que no pueda descargar.

```{r, error=TRUE}
get_perfiles(c(3182, 4609), parar_en_error = TRUE)
```

Para convertir los perfiles a un SoilProfileCollection se usa `as_SoilProfileCollection()`. 
En este caso convertimos dos perfiles al mismo tiempo. 

```{r}
get_perfiles(c(3355, 3205)) %>%
  as_SoilProfileCollection()
```

Utilizando la librería {aqp}, se pueden plotear los perfiles.

```{r message=FALSE, warning=FALSE}
library(aqp)
get_perfiles(c(3355, 3205)) %>%
  as_SoilProfileCollection() %>%
  plot()
```

## Horizontes estandarizados

La función `interpolar_perfiles()` permite transformar el perfil en horizontes estandarizados utilizando alguno de los métodos implementados, promedios ponderados o función spline. 
El argumento `variables` recibe un vector con las variables a estandarizar y por defecto genera horizontes cada 30 centrímetros. 

Por defecto utiliza el método de promedios ponderados `interpolar_promedio_ponderado()`:

```{r}
get_perfiles(c(3238, 4634)) %>% 
  interpolar_perfiles(variables =  c("sum_bases", "cic"))
```

También es posible definir los horizontes estandarizados utilizando el argumento `horizontes`, por ejemplo de 0 a 100, cada 10 centímetros.

```{r}
get_perfiles(c(3238, 4634)) %>% 
  interpolar_perfiles(variables =  c("sum_bases", "cic"),
                      horizontes = seq(0, 100, 10))
```

Para utilizar el método de splines, se utiliza la opción `metodo = interpolar_spline()`. 
Este método no acepta datos faltantes en las profundidades, así que primero hay que imputar la profundidad inferior. 

```{r}
get_perfiles(c(3238, 4634)) %>% 
  imputar_profundidad_inferior(10) %>%
  interpolar_perfiles(variables = c("sum_bases", "cic"),
                      horizontes = seq(0, 100, 10),
                      metodo = interpolar_spline()) 
```

## Exportar perfiles

La función `exportar_excel()` permite exportar perfiles de SISINTA en formato MS Excel.
Esta función recibe un data.frame con perfiles leidos o el resultado de `get_perfiles()`. 
El archivo de excel tendrá dos hojas, la primera con los datos del sitio llamada "sitios" y la segunda con los datos de los horizontes, llamada "horizontes". 

```{r}
archivo <- tempfile(fileext = ".xlsx") # Temporal para el ejemplo
exportar_excel(get_perfiles(c(3238, 4634)), archivo)
```

