Skip to contents
library(truffles)
library(DBI)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union

Introduction

Le package {truffles} fournit des fonctionnalités pour gérer les données relatives aux truffes trouvées sous les chênes. Cette vignette détaille les étapes de base pour utiliser le package.

Connexion à une base de données

La première étape consiste à se connecter à une base de données contenant les informations sur les chênes, les truffes et les resemis.

Préparation de la base de données pour les tests

Nous créons une base de données temporaire pour effectuer nos tests sans altérer les données originales.

Création des tables

conn_usage <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")

# Création de la table truffe dans la base de données
DBI::dbWriteTable(
  conn_usage,
  "truffe",
  data.frame(
    idtruffle = character(),
    idoak = character(),
    date_found = numeric(),
    weight = numeric(),
    estimation = logical(),
    comment = character()
  )
)

DBI::dbWriteTable(
  conn_usage,
  "chenes",
  data.frame(
    idoak = character(),
    lon = numeric(),
    lat = numeric(),
    type = character(),
    present = numeric(),
    planting_date = numeric(),
    reensemence = numeric()
  )
)

DBI::dbWriteTable(
  conn_usage,
  "reens",
  data.frame(
    idoak = character(),
    date_reens = numeric()
  )
)
chenes_ <- structure(
  list(
    idoak = c("1", "2", "3", "4", "5"),
    lon = c(1.53193333748493, 1.53198654139325, 1.53203490858186, 1.53208085741133, 1.53213164296051),
    lat = c(47.9984324222873, 47.9984696419663, 47.9985181893329, 47.99855540895, 47.998600719752),
    type = c("Normal", "Normal", "Normal", "Normal", "Green"),
    present = c(1L, 1L, 1L, 1L, 1L),
    planting_date = c("2024-01-15", "2023-12-20", "2023-11-05", "2024-02-10", "2023-10-25")
  ),
  row.names = c(NA, -5L),
  class = c("tbl_df", "tbl", "data.frame")
)


DBI::dbWriteTable(
  conn_usage,
  "chenes",
  chenes_,
  overwrite = TRUE
)


reens_ <- structure(
  list(
    idoak = c("5", "5", "1"),
    date_reens = c(19128, 19043, 19605)
  ),
  row.names = c(
    NA,
    3L
  ),
  class = "data.frame"
)

DBI::dbWriteTable(
  conn_usage,
  "reens",
  reens_,
  overwrite = TRUE
)

Chargement des données

Nous chargeons les données à partir de la base de données. Nous supposons que les tables de la base de données contiennent les informations suivantes :

  • chenes : données sur les chênes
  • truffe : données sur les truffes trouvées
  • reens : données sur les resemis
chenes <- dbReadTable(conn_usage, name = "chenes")
truffe <- dbReadTable(conn_usage, name = "truffe")
reens <- dbReadTable(conn_usage, name = "reens")

Filtrage des chênes présents

Nous filtrons les chênes présents dans la base de données.

chenes <- chenes |>
  dplyr::filter(present == 1)

Ajout d’une nouvelle truffe avec toutes les informations

Nous ajoutons une nouvelle truffe avec toutes les informations requises.

Ajout de la nouvelle truffe

write_db_new_truffe(
  conn = conn_usage,
  theidoak = "5",
  date_found = "2024-01-01",
  weight = 25,
  estimation = 0,
  comment = "Un commentaire"
)
#> WRITING in DB truffe

Ajout d’une nouvelle truffe sans weight

Nous ajoutons une nouvelle truffe sans spécifier le weight.

write_db_new_truffe(
  conn = conn_usage,
  theidoak = "1",
  date_found = "2024-01-01",
  weight = NA,
  estimation = 1,
  comment = "weight a completer plus tard"
)
#> WRITING in DB truffe

Ajout d’une nouvelle truffe avec estimation du weight

Nous ajoutons une nouvelle truffe en estimant son weight.

write_db_new_truffe(
  conn = conn_usage,
  theidoak = "3",
  date_found = "2024-02-01",
  weight = 100,
  estimation = 1,
  comment = "Un weight estime"
)
#> WRITING in DB truffe

Vérification des résultats

Nous vérifions le nombre total de truffes ajoutées.

truffe <- dbReadTable(conn_usage, name = "truffe")
truffe
#>                          idtruffle idoak date_found weight estimation
#> 1 0568a3baaa2cf75937c414d53c275006     5 2024-01-01     25          0
#> 2 9990ecfe90214380d4db726ea44cbeaf     1 2024-01-01     NA          1
#> 3 86ddc862954e0a02185f3cc86e152a23     3 2024-02-01    100          1
#>                                     comment
#> 1               2024-01-01 : Un commentaire
#> 2 2024-01-01 : weight a completer plus tard
#> 3             2024-02-01 : Un weight estime

Complétion d’informations

info <- get_info_chene_last_truffe(dbtruffe = truffe, theidoak = "3")
update_db_truffe(
  conn_usage,
  idtruffle = info$idtruffle,
  idoak = info$idoak,
  date_found = info$date_found,
  weight = 32,
  comment = "J'avais surestimé",
  estimation = 0
)
#> UPDATE db truffe

Récupération des informations

truffe <- dbReadTable(conn_usage, name = "truffe")

Nous récupèrons les informations du chêne truffier n°5 :

get_info(
  dbchene = chenes,
  dbtruffe = truffe,
  dbreensemence = reens,
  theidoak = "3"
)
#> $chene
#> $chene$type
#> [1] "Normal"
#> 
#> $chene$planting_date
#> [1] "2023-11-05"
#> 
#> 
#> $truffes
#> $truffes$weight_tot
#> [1] 32
#> 
#> $truffes$derniere_truffe
#> [1] "2024-02-01"
#> 
#> $truffes$last_comment
#> [1] "2024-02-01 : 2024-02-01 : J'avais surestimé"
#> 
#> $truffes$other_comments
#> [1] "-"
#> 
#> 
#> $reensemence
#> [1] "-"

La dernière truffe trouvée pour le chêne n°5

get_info_chene_last_truffe(dbtruffe = truffe, theidoak = "5")
#>                          idtruffle idoak date_found weight estimation
#> 1 0568a3baaa2cf75937c414d53c275006     5 2024-01-01     25          0
#>                       comment estim_js
#> 1 2024-01-01 : Un commentaire

Calcul d’aggrégation:

weight total de truffes trouvés

weight_truffles_by(truffe)
#> # A tibble: 1 × 1
#>   weight
#>    <dbl>
#> 1     57

weight total de truffes trouvés par annee

weight_truffles_by(truffe, annee = year(as.Date(date_found)))
#> # A tibble: 1 × 2
#>   annee weight
#>   <dbl>  <dbl>
#> 1  2024     57

weight total de truffes trouvés par annee et par type

truffes_chene <- truffe |>
  dplyr::inner_join(chenes, by = "idoak")
weight_truffles_by(truffes_chene, annee = lubridate::year(as.Date(date_found)), type)
#> # A tibble: 2 × 3
#>   annee type   weight
#>   <dbl> <chr>   <dbl>
#> 1  2024 Green      25
#> 2  2024 Normal     32

Déconnexion de la base de données

DBI::dbDisconnect(conn_usage)